Atualmente, estou retornando 401 não autorizado sempre que encontro uma falha de validação no meu aplicativo REST API baseado em Django / Piston . Tendo examinado o Registro de Código de Status HTTP, não estou convencido de que este seja um código apropriado para uma falha na validação, o que vocês recomendam?
- 400 Solicitação incorreta
- 401 não autorizado
- 403 Proibido
- 405 Método não permitido
- 406 Não aceitável
- Falha na pré-condição 412
- 417 Expectativa falhada
- 422 Entidade não processável
- 424 Dependência com falha
Atualização : "Falha na validação" acima significa uma falha na validação de dados no nível do aplicativo, ou seja, data e hora especificadas incorretamente, endereço de e-mail falso etc.
validation
rest
http-status-codes
michaeljoseph
fonte
fonte
Respostas:
Se "falha na validação" significa que há algum erro do cliente na solicitação, use HTTP 400 (Solicitação incorreta). Por exemplo, se o URI tiver uma data ISO-8601 e você achar que está no formato errado ou se referir a 31 de fevereiro, retornaria um HTTP 400. Idem se você espera XML bem formado no corpo de uma entidade e falha ao analisar.
(1/2016): Nos últimos cinco anos , o HTTP 422 (entidade não processável) mais específico do WebDAV se tornou uma alternativa muito razoável ao HTTP 400. Veja, por exemplo, seu uso na API JSON . Mas observe que o HTTP 422 não chegou ao HTTP 1.1, RFC-7231 .
O RESTful Web Services de Richardson e Ruby contém um apêndice muito útil sobre quando usar os vários códigos de resposta HTTP. Eles dizem:
e:
fonte
Do RFC 4918 (e também documentado em http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ):
fonte
Uma duplicata no banco de dados deve ser a
409 CONFLICT
.Eu recomendo usar
422 UNPROCESSABLE ENTITY
para erros de validação.Dou uma explicação mais detalhada dos códigos 4xx aqui: http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/
fonte
Aqui está:
rfc2616 # section-10.4.1 - 400 Solicitação incorreta
rfc7231 # section-6.5.1 - 6.5.1. 400 Solicitação incorreta
Refere-se a casos malformados (não bem formados)!
rfc4918 - 11.2. 422 Entidade não processável
Conclusão
Regra geral: [_] 00 cobre o caso mais geral e os casos que não são cobertos pelo código designado.
422 se encaixa no melhor erro de validação de objeto (justamente minha recomendação :)
Quanto a semanticamente errôneo - Pense em algo como a validação "Este nome de usuário já existe".
400 é usado incorretamente para validação de objeto
fonte
Eu diria que tecnicamente pode não ser uma falha HTTP, já que o recurso foi (presumivelmente) especificado de forma válida, o usuário foi autenticado e não houve falha operacional (no entanto, a especificação inclui alguns códigos reservados, como 402 Payment Required, que não são ' estritamente falando relacionado ao HTTP, embora possa ser aconselhável tê-lo no nível do protocolo para que qualquer dispositivo possa reconhecer a condição).
Se esse for realmente o caso, eu adicionaria um campo de status à resposta com erros de aplicativo, como
<status><code>4</code> <message> O período é inválido </message> </status>
fonte
Há um pouco mais de informações sobre a semântica desses erros no RFC 2616 , que documenta o HTTP 1.1.
Pessoalmente, eu provavelmente usaria
400 Bad Request
, mas esta é apenas a minha opinião pessoal, sem qualquer apoio factual.fonte
O que exatamente você quer dizer com "falha na validação"? O que você está validando? Você está se referindo a algo como um erro de sintaxe (por exemplo, XML malformado)?
Se for esse o caso, eu diria que 400 Bad Request é provavelmente a coisa certa, mas sem saber o que você está "validando", é impossível dizer.
fonte