【问题标题】:POST/PUT on REST JSON API when property doesn't exist属性不存在时在 REST JSON API 上 POST/PUT
【发布时间】:2014-02-24 08:42:54
【问题描述】:

我们正在构建公共 RESTful JSON API,并试图找出在指定属性不存在时 POST/PUT 请求的最佳做法。我们应该抛出一个 HTTP 错误,还是直接跳过它并应用所有其他属性?

{
    "name" : "Test",
    "property_doesnt_exist" : "that's sad"
}

【问题讨论】:

    标签: json api rest post put


    【解决方案1】:

    服务器的一个共同规则是在接受的内容上大方,在制作的内容上严格。

    我更愿意接受这样的意见,并尽可能多地从中受益。输入的任何未知属性都将被忽略。

    【讨论】:

      【解决方案2】:

      HTTP 422:无法处理的实体

      422(Unprocessable Entity)状态码意味着服务器理解请求实体的内容类型(因此 415(Unsupported Media Type)状态码是不合适的),并且请求实体的语法是正确的(因此 400 (错误请求)状态代码不合适)但无法处理包含的指令。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会发生这种错误情况。 RFC4918

      如果消息还包含无效属性,通常的做法是不添加有效的消息属性。

      【讨论】:

      • 我知道 github 会跳过 inavlid 参数。你知道这背后的想法是什么吗?
      • 这种常见做法在哪里?
      • @LutzHorn 在大多数需要消息符合的关键应用程序中,例如XML 架构或一些消息描述。
      • @Max 我同意 LutzHorn 的观点,即服务可以跳过无效参数。可能是他们没有将无效语法视为对安全/数据完整性的威胁。或者他们可能想要更流畅的用户体验。
      【解决方案3】:

      在回答这个问题时,您还必须考虑版本控制。您是否支持发送比预期更少的参数的旧客户端 - 可以使用合适的默认值。或者您是否有多个服务器实现,以至于较新的客户端会为较旧的服务器实现发送太多参数?如果其中之一的答案是肯定的,那么您必须小心拒绝输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-18
        • 2015-01-25
        • 2019-07-18
        • 1970-01-01
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多