我在哪里可以找到有关状态代码 200 未涵盖的内容的明确文档?

Where can I find explicit documentation on what's NOT covered by Status Code 200?

我们今天讨论了导致状态代码 200,OK 的传输操作。返回了两个看起来像这样的对象。

第一个相当容易掌握(并遵循预期的合同)。

{ name: "john", age: 34, city: "stockholm" }

第二个,遵循合同,但数据无疑是错误的。

{ name: null, age: -3.141526, city: "http://some.com/address/poof" }

一方声称状态代码 200 不正确因为值是错误的。对方辩称,状态码描述了操作本身和request/response的格式,这很顺利因为转账符合合约

很明显,REST 端点从它获取数据的源中获取异常。因此,第一方希望结果是 404 not found500 internal error。在前一种情况下对象结构为空(一路为空)并且在后一种情况下它不尝试遵循约定的格式的情况下,另一方对其开放。

查看the Kamasutra据说:

The request has succeeded. The information returned with the response is dependent on the method used in the request.

现在,从技术上讲,我们无法确定所请求的资源是否有名字,可能计划在 PI 年出生并且恰好居住在一个城市,并将其名称更改为 URL. 实际上是可能的,尽管可能性很小。但是,我希望看到状态代码 200 中未包含的内容的明确说明。

问题:要求状态码 400 或更高是否有效,因为这些值看似(甚至明显)错误?

不要使用 RFC 2616

如今 RFC 2616 完全 无关紧要 一旦它被一组共同定义 HTTP/1.1 协议的新 RFC 取代:

状态码

对于 HTTP 状态代码,请参阅 RFC 7231。此类文档定义了每个状态代码表示的内容。选择最能给出理解和满足请求的尝试结果的一项。

本文档还定义了状态码的,有助于确定最适合响应的状态:

The first digit of the status-code defines the class of response. The last two digits do not have any categorization role. There are five values for the first digit:

  • 1xx (Informational): The request was received, continuing process

  • 2xx (Successful): The request was successfully received, understood, and accepted

  • 3xx (Redirection): Further action needs to be taken in order to complete the request

  • 4xx (Client Error): The request contains bad syntax or cannot be fulfilled

  • 5xx (Server Error): The server failed to fulfill an apparently valid request

请记住,HTTP 状态代码是 可扩展的 RFC 7231 不包括其他规范中定义的扩展状态代码。状态代码的完整列表由 IANA.

维护

无法处理的实体

2xx class of status code indicates that request was successfully received, understood, and accepted. Once you won't accept invalid data, that is, an entity that cannot be processed by the server, the 200 状态码不适合这种情况。

422 状态码就是你要找的:请求负载的语法有效,但由于数据无效而无法处理。看看:

11.2. 422 Unprocessable Entity

The 422 (Unprocessable Entity) status code means the server understands the content type of the request entity (hence a 415 (Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.

对于您的情况,只需阅读 JSON 而不是 XML

422IANA 中注册并在 RFC 4918 中定义,该文档定义了 WebDAV,一个扩展对于 HTTP 协议。

决策图表

Michael Kropat put together a set of decision charts 有助于确定每种情况的最佳状态代码。状态代码大致分为三类:


从这里开始:


选择 2xx3xx 状态代码:


正在选择 4xx 状态代码:


正在选择 5xx 状态代码: