Introdução

O procotolo HTTP define uma série de ~60 códigos de status que podem ser retornados em API. Estes códigos são essenciais para indicar o resultado de uma requisição, ou seja, da manipulação de recursos.

Comumente vimos APIs trabalhando apenas com o código 200, sendo necessário analisar campos específicos da resposta para entender exatamente o resultado da requisição. Esta abordagem, além de inutilizar o código de status HTTP, ainda exige um tratamento específico, sendo necessário interpretar um ou mais campos do corpo da requisição, dificultando o consumo da API por parte dos clientes.

Segue abaixo a relação dos códigos mais comuns para uso, separada por categorias, obtida a partir da minha experiência de trabalho e estudo:

Sucesso

Código Descrição
200 OK Resposta a um bem-sucedido GET, PUT, PATCH ou DELETE. Também pode ser usado para um POST que não resulte em uma criação.
201 Created Em requisições POST quando um recurso é criado.
204 No Content Resposta a uma requisição bem-sucedida que não retorna um corpo (requisição DELETE).

Redirecionamento

Código Descrição
301 Moved Permanently Base para criação de encurtadores de URL.
304 Not Modified Usado ao lidar com cabeçalhos de cache HTTP.

Erros do cliente da API

Código Descrição
400 Bad Request O pedido é malformado; não foi possível fazer o parse do corpo.
401 Unauthorized Cliente não está autenticado ou os dados de autenticação são inválidos.
403 Forbidden A autenticação foi bem-sucedida, mas o usuário autenticado não tem acesso ao recurso.
404 Not Found Recurso solicitado não existe.
405 Method Not Allowed Método HTTP que não é permitido para o usuário autenticado.
415 Unsupported Media Type Se o content type incorreto foi fornecido como parte do pedido.
422 Unprocessable Entity Usado para validação de erros.

Erros do servidor

Código Descrição
500 Internal Server Error Erro genérico indicando um problema de execução no servidor (cliente pode fazer chamar novamente se faz sentido)

Conclusão

Existem algumas situações discutíveis em relação aos códigos de status HTTP, como por exemplo para validação de erros de uma requisição POST. É muito comum o uso do 400 neste caso, mas como visto na tabela acima, ele indica que o corpo da requisição não está dentro do esperado, pois faltou algum campo, ou há um tipo de dado diferente, e não exatamente que alguma regra de validação/domínio de campo não foi atendida. Para isso há o código 422 (baseado na API do GitHub), então a dica é sempre usar o mais específico possível conforme a situação tratada.

A intenção aqui foi fornecer um guia com recomendações e não impor uma verdade absoluta. Se curtiu o post ou tem uma consideração deixe um like ou comentário abaixo ;)

Referências