我们通过HTTP获得了restful api。在其他客户中,我们也有移动设备客户端(例如iphone)。问题是有几个不同版本的iphone应用程序(1.0,2.0)。由于它们是分布式的,我们无法控制哪个应用程序版本正在调用我们。编码REST的移动设备版本API服务器
要识别服务器端应用程序的版本我看到以下选项:
- 设备必须附加URL参数(例如/foo?iphone-app-version=1.0):有点令人讨厌,但良好事情是,我可以始终在服务器日志中看到它(始终记录URL)
- 我们使用HTTP摘要验证api-clients。我们可以在用户名内编码应用程序版本(例如iphone_1_0):它记录在服务器日志中的好东西,但只适用于作为HTTP摘要公开的资源。
- 设备必须使用自定义HTTP标头,例如X-IPHONE-APP-VERSION:在我看来是最干净的方法,但我们不会在服务器日志中记录HTTP标头(对于关闭它的对数噪声)。所以后来的分析是不可能的。
您是否有首选方法或其他选择?
编辑:与上述版本我不是指API版本/内容协商。它是移动设备的版本。
已经有版本控制概念(通过头文件和perma-link)。我需要的是识别移动设备应用程序版本。这个版本与api-server版本不同。动机是知道最终用户使用哪些应用程序版本/版本。 – 2010-10-15 17:11:14
@manuel这不是用户代理标头的用途吗? – 2010-10-15 17:18:48
是的,这可能适合(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43)。到目前为止,我只看到这个头文件来标识“连接构建器”(例如firefox,http-commons客户端)。我将查看一下User-Agent条目iphone当前正在发送的内容。也许我只是将app-version-fingerprint附加到它上面(这与提到的X-IPHONE-APP头相似)。缺点仍然是生产模式日志中看不到它,因为它不包含在永久链接中。所以仍然任何来自过去日志的统计信息都不会起作用,只有临时打开的标题日志才会显示。 – 2010-10-15 17:31:39