我目前正在开发Restful API,我想知道最优雅,最长寿的解决方案是什么。
一些数据:
两者都由我们管理和消费。
这是我的要求:
更新是可选的,但建议我们只是想通知客户更新他的申请。
需要更新并且API不再可用(由于api版本控制,但不应该发生这种情况,但是谁知道)
我可以想到几个解决方案:
X-Client-Update: text="Some informative and meaningful message"; button="Do upgrade now!"; uri="itms-apps://itunes.com/apps/DevelopmentCompanyLLC"
应用程序将负责处理它并将其显示给用户。
请求:
POST /api/versions/
Content-Type: application/json
{"client_version": "4.3", "os_version": "6.0", "os_vendor": "ios"}
回复(可用更新):
{
"current_version": "4.4",
"latest_compatible_version": "4.0",
"update_required": false,
"update_available": true,
"message": "A new awesome update is available, download it now",
"uri": "itms-apps://itunes.com/apps/DevelopmentCompanyLLC",
"button_text": "I want it, and I want it now!"
}
回复(无可用更新):
{
"current_version": "4.3",
"latest_compatible_version": "4.0",
"update_required": false,
"update_available": false,
}
如果应用程序更新必需,我还希望始终返回错误,该错误将由应用程序处理。
我想知道我应该使用哪种HTTP状态,现在我想到400 Bad parameters
,因为我找不到更好的代码。
相应的消息与端点解决方案提供的消息非常相似。
答案 0 :(得分:1)
由于服务器和客户端都是由您开发的,因此使用哪个状态代码(imho)并不重要。除了您选择的400
之外,您还可以查看以下状态代码:
403
禁止 - 如果服务器理解了请求,但拒绝履行请求,则是适当的;服务器应描述实体拒绝的原因。 501
未实现 - 如果服务器不再支持完成请求所需的功能,则该内容是合适的。正如您所写,所需更新绝不应该正常发生,因此可选更新是主要用例,后者的条件响应似乎适合任何成功请求。在这种情况下,您应该像往常一样使用200
状态代码,并依赖响应中的其他标头。