Rest 识别客户正在使用哪些客户机库的最佳方法是什么?

Rest 识别客户正在使用哪些客户机库的最佳方法是什么?,rest,http-post,http-get,api-design,Rest,Http Post,Http Get,Api Design,我有3个客户端库,它们都以不同的语言(python、ruby、php)发布到同一个API端点。我想知道特定的API调用来自哪个库 我最初的想法是在HTTP POST/GET中添加一些信息,以识别客户端库,但我不确定这是否是一个好方法 您做了什么来验证API调用来自哪个库 提前感谢您的帮助 大多数请求库都设置了默认的用户代理头。反省一下那个头球 Python的urllib2将该头设置为Python urllib/MAJOR.MINOR,其中后两个值取自Python版本。例如,对于Python2.7

我有3个客户端库,它们都以不同的语言(python、ruby、php)发布到同一个API端点。我想知道特定的API调用来自哪个库

我最初的想法是在HTTP POST/GET中添加一些信息,以识别客户端库,但我不确定这是否是一个好方法

您做了什么来验证API调用来自哪个库


提前感谢您的帮助

大多数请求库都设置了默认的用户代理头。反省一下那个头球

Python的
urllib2
将该头设置为
Python urllib/MAJOR.MINOR
,其中后两个值取自Python版本。例如,对于Python2.7,您将获得
PythonURLLIB/2.7
。其他Python库(如
请求
)也有唯一的默认用户代理头

Ruby的Net::HTTP库


当然,这些库中的每一个都完全能够更改用户代理字符串,但是大多数开发人员不会设置这些,除非服务器根据该字符串改变响应(并且除了桌面浏览器使用的用户代理字符串之外,不允许任何东西访问服务器).

也许可以让客户端库的核心添加一个标题,以指示它是哪个库。例如,X-Client-Library:python在表单中提供一些信息是一种方法(例如html隐藏元素),可能是可以追溯到客户端类型的库版本号。如果您可以控制将数据发布到API,您还可以在web请求中发送自定义标头。实际上,我对编写我们自己的标头感兴趣(以确定客户端版本),但这使我朝着正确的方向前进。谢谢