Question: 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}` gets album by albumId. If not found returns 404
2. `user/{userId}/albums` gets all albums by userId. In this case, if a user has no albums, what should be the status code 204 or 404?

Answer: 
Here is what the [RFC2616](https://www.rfc-editor.org/rfc/rfc2616#section-10.2.5) 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.
Error Code 404
--------------

The web site hosting server will typically generate a "404 Not Found" web page when a user attempts to follow a broken or dead link.

Return Code 204
---------------

The server has fulfilled the request but does not need to return an entity-body.

Conclusion
----------

You obviously need to return a 204 status code. If you use the 404 one, the user may be disturbed. More, you use 404 when the targeted album doesn't exist. Using 404 for both 1 and 2 is illogical.