Eu diria, nenhum.
Por que não 404 (não encontrado)?
O código de status 404 deve ser reservado para situações em que um recurso não seja encontrado. Nesse caso, seu recurso é uma coleção de usuários . Esta coleção existe, mas está vazia no momento. Pessoalmente, ficaria muito confuso como autor de um cliente para seu aplicativo se recebesse um 200
um dia e um 404
no dia seguinte só porque alguém removeu alguns usuários. O que eu deveria fazer? Meu URL está errado? Alguém mudou a API e se esqueceu de deixar um redirecionamento.
Por que não 204 (sem conteúdo)?
Aqui está um trecho da descrição do código de status 204 por w3c
O servidor atendeu à solicitação, mas não precisa retornar um corpo de entidade e pode desejar retornar metainformações atualizadas.
Embora isso possa parecer razoável neste caso, acho que também confundiria os clientes. Um 204
deve indicar que alguma operação foi executada com sucesso e nenhum dado precisa ser retornado. Isso é perfeito como uma resposta a uma DELETE
solicitação ou talvez para disparar algum script que não precise retornar dados. No caso de api/users
, você geralmente espera receber uma representação de sua coleção de usuários. Enviar um corpo de resposta uma vez e não enviá-lo da outra é inconsistente e potencialmente enganoso.
Por que eu usaria um 200 (OK)
Por razões mencionadas acima (consistência), eu retornaria uma representação de uma coleção vazia. Vamos supor que você esteja usando XML. Um corpo de resposta normal para uma coleção não vazia de usuários pode ser assim:
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
e se a lista estiver vazia, você pode apenas responder com algo assim (enquanto ainda usa um 200
):
<users/>
De qualquer forma, um cliente recebe um corpo de resposta que segue um formato certo e conhecido. Não há confusão desnecessária e verificação de código de status. Além disso, nenhuma definição de código de status é violada. Todo mundo está feliz.
Você pode fazer o mesmo com JSON ou HTML ou qualquer formato que esteja usando.