Qual é o código de resposta HTTP ideal quando não está relatando 200 (tudo OK), mas com erro na entrada?
Como, você envia alguns dados para o servidor e isso responde que seus dados estão errados
usar 500
parece mais com problema de servidor
usando 200
com texto de resposta de aviso / erro é ruim (permitindo cache e tudo não está bem)
usando 204
e retornando nada, talvez seja bom (mas com suporte?) o
uso 404
está errado se o caminho solicitado (script) estiver disponível e no lugar apropriado
api
http
validation
Marek Sebera
fonte
fonte
Respostas:
Tivemos o mesmo problema ao criar nossa API também. Estávamos procurando um código de status HTTP equivalente a um
InvalidArgumentException
. Depois de ler o artigo de origem abaixo, acabamos usando422 Unprocessable Entity
quais estados:fonte: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm
fonte
Os códigos que começam com 4 (4xx) são destinados a erros do cliente. Talvez 400 (Bad Request) possa ser adequado para este caso? A definição em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html diz:
"O pedido não pôde ser entendido pelo servidor devido à sintaxe malformada. O cliente NÃO DEVE repetir o pedido sem modificações."
fonte
400 Bad Request
não é ruim, mas geralmente deve ser reservado para sintaxe malformada. O OP parece estar mais preocupado com um caso com sintaxe bem formada, mas com valores inválidos. Além disso, o 400 é um código de resposta bastante comum "ah, merda, algo não estava certo" que você pode querer diferenciar de um caso específico de entrada incorreta.Além das especificações da RFC, você também pode ver isso em ação. Confira as respostas do twitter.
https://developer.twitter.com/en/docs/ads/general/guides/response-codes
fonte
409 Conflict
poderia ser uma solução aceitável.De acordo com: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
O documento continua com um exemplo:
No meu caso, eu gostaria de colocar uma string, que deve ser exclusiva, em um banco de dados por meio de uma API. Antes de adicioná-lo ao banco de dados, estou verificando se ele ainda não está no banco de dados.
Se for, eu voltarei
"Error: The string is already in the database", 409
.Acredito que é isso que o OP queria: um código de erro adequado para quando os dados não atendem aos critérios do servidor.
fonte
De acordo com o cenário abaixo,
Digamos que alguém faça uma solicitação ao seu servidor com dados no formato correto, mas que simplesmente não são dados "bons". Por exemplo, imagine que alguém postou um valor String em um ponto de extremidade da API que esperava um valor String; mas o valor da sequência continha dados que estavam na lista negra (por exemplo, impedindo as pessoas de usarem "senha" como senha). então o código de status pode ser 400 ou 422?
Até agora, eu teria retornado um "400 Bad Request", que, de acordo com o w3.org, significa:
Esta descrição não se encaixa bem na circunstância; mas, se você seguir a lista dos principais códigos de status HTTP definidos no protocolo HTTP / 1.1, provavelmente é sua melhor aposta.
Recentemente, no entanto, alguém da minha equipe de desenvolvimento apontou [para mim] que as APIs populares estão começando a usar extensões HTTP para ficar mais detalhadas com seus relatórios de erros. Especificamente, muitas APIs, como o Twitter e o Recurly, estão usando o código de status "422 Unprocessable Entity", conforme definido na extensão HTTP do WebDAV. O código de status HTTP 422 declara:
Voltando ao nosso exemplo de senha acima, esse código de status 422 parece muito mais apropriado. O servidor entende o que você está tentando fazer; e entende os dados que você está enviando; simplesmente não permite que esses dados sejam processados.
fonte
404 - Não encontrado - pode ser usado para O URI solicitado é inválido ou o recurso solicitado, como um usuário, não existe.
fonte