HTTP status code for “no data available” from an e

2019-02-07 19:18发布

问题:

Scenario:

A POST request is sent to process an order that will result in data retrieval from an external datasource.

There are three possible results:

  1. The datasource returned data for the request
  2. No data was available for the request (this is viewed as an error)
  3. The datasource couldn't be accessed (may be down for maintenance)

An obvious response for 1 is 200: OK or 201: Created (an entity is created from this request).

What status codes would be appropriate for 2 and 3?

Status codes I have considered:

  • 503: Service Unavailable when datasource is down
  • 500: Internal Server Error when datasource is down
  • 502: Bad Gateway when "no data available"
  • 404: Not Found when "no data available"
  • 403: Forbidden when "no data available"
  • 412: Precondition Failed when "no data available"

回答1:

2) Looking back at this, I agree it should probably be either a 204 No Content or maybe a 200 with a body indicating no records or resources could be found depending on the structure returned. 404's are generally used when the resource URI doesn't exist or a resource in the URI is not found in the case of a restful service.

3) 503 Service Unavailable

The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.

  Note: The existence of the 503 status code does not imply that a
  server must use it when becoming overloaded. Some servers may wish
  to simply refuse the connection.


回答2:

3) I agree with 503 for this

2) Frankly I think a good argument could be made for using 204 in case 2 You can include metainfo in the header to indicate specifically what 'went wrong'. It really depends on how much you consider this case to be 'an error' at the API level.

If the API itself is functioning as intended, and the request was to a valid endpoint, by an authenticated and authorized user and did not cause the server to malfunction, then very few of the 400 or 500 series errors would really seem to apply.

for example, 404 usually means the URI you called does not exist, if it does exist, then using that code is misleading at least IMHO

**10.2.5 204 No Content**

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view.

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.



回答3:

HTTP 404 - With your own error message like "No data found".

Twitter uses 404. Reference: https://developer.twitter.com/en/docs/basics/response-codes.html