如何通知REST API客户端进行可选/必需的更新?

时间:2012-10-24 08:46:30

标签: http rest version deprecated

我目前正在开发Restful API,我想知道最优雅,最长寿的解决方案是什么。

一些数据:

  • Rest API:服务器后端
  • 应用程序:移动应用程序(ios,android等)

两者都由我们管理和消费。

这是我的要求:

  1. 更新是可选的,但建议我们只是想通知客户更新他的申请。

  2. 需要更新并且API不再可用(由于api版本控制,但不应该发生这种情况,但是谁知道)

  3. 我可以想到几个解决方案:

    • 包含一个新的HTTP标头,例如:

    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,因为我找不到更好的代码。

    相应的消息与端点解决方案提供的消息非常相似。

1 个答案:

答案 0 :(得分:1)

由于服务器和客户端都是由您开发的,因此使用哪个状态代码(imho)并不重要。除了您选择的400之外,您还可以查看以下状态代码:

  • 403禁止 - 如果服务器理解了请求,但拒绝履行请求,则是适当的;服务器应描述实体拒绝的原因。
  • 501未实现 - 如果服务器不再支持完成请求所需的功能,则该内容是合适的。

正如您所写,所需更新绝不应该正常发生,因此可选更新是主要用例,后者的条件响应似乎适合任何成功请求。在这种情况下,您应该像往常一样使用200状态代码,并依赖响应中的其他标头。