HTTP GET Request Status 204 Vs 404

后端 未结 5 794
北海茫月
北海茫月 2020-12-25 11:06

I have 2 resources User and Album. An user has a list of albums. To get albums there are 2 REST API.

  1. user/{userId}/albums/{albumId} get album by albumId if not
5条回答
  •  孤独总比滥情好
    2020-12-25 12:00

    Here is what the RFC2616 that defines the HTTP protocol says about Status-codes:

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

      - 1xx: Informational - Request received, continuing process
    
      - 2xx: Success - The action was successfully received,
        understood, and accepted
    
      - 3xx: Redirection - Further action must 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
    

    In your case, the request was successful, but there are no albums to show, so you definitely should use a status from the 2xx category.

    Here is what the RFC says about the 204 status:

    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.

    The RFC states that the 204 is primarily intended to allow inputs, so you shouldn't use this one. I would use the 200 in this case.

提交回复
热议问题