Je retourne actuellement 401 non autorisé chaque fois que je rencontre un échec de validation dans mon application API REST basée sur Django / Piston . Après avoir jeté un œil au registre des codes d'état HTTP, je ne suis pas convaincu qu'il s'agit d'un code approprié pour un échec de validation, que recommandez-vous tous?
- 400 Mauvaise demande
- 401 non autorisé
- 403 Interdit
- 405 Méthode non autorisée
- 406 Non acceptable
- Échec de la condition préalable 412
- 417 Attente a échoué
- 422 Entité non traitable
- 424 Dépendance défaillante
Mise à jour : "Échec de validation" ci-dessus signifie un échec de validation des données au niveau de l'application, c'est-à-dire une date / heure incorrectement spécifiée, une adresse e-mail fausse, etc.
validation
rest
http-status-codes
michaeljoseph
la source
la source
Réponses:
Si «échec de validation» signifie qu'il y a une erreur client dans la demande, utilisez HTTP 400 (Bad Request). Par exemple, si l'URI est censé avoir une date ISO-8601 et que vous trouvez qu'il est dans le mauvais format ou fait référence au 31 février, alors vous renverriez un HTTP 400. Idem si vous vous attendez à un XML bien formé dans un corps d'entité et il ne parvient pas à analyser.
(1/2016): Au cours des cinq dernières années , HTTP 422 (Entité non traitable) plus spécifique de WebDAV est devenu une alternative très raisonnable à HTTP 400. Voir par exemple son utilisation dans l' API JSON . Mais notez que HTTP 422 n'est pas devenu HTTP 1.1, RFC-7231 .
Les services Web RESTful de Richardson et Ruby contiennent une annexe très utile sur le moment d'utiliser les différents codes de réponse HTTP. Ils disent:
et:
la source
De RFC 4918 (et également documenté à http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ):
la source
Un doublon dans la base de données devrait être a
409 CONFLICT
.Je recommande d'utiliser
422 UNPROCESSABLE ENTITY
pour les erreurs de validation.Je donne une explication plus longue des codes 4xx ici: http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/
la source
C'est ici:
rfc2616 # section-10.4.1 - 400 mauvaise requête
rfc7231 # section-6.5.1 - 6.5.1. 400 Mauvaise demande
Fait référence aux cas mal formés (pas bien formés)!
rfc4918 - 11.2. 422 Entité non traitable
Conclusion
Règle générale: [_] 00 couvre le cas le plus général et les cas qui ne sont pas couverts par le code désigné.
422 correspond à la meilleure erreur de validation d'objet (précisément ma recommandation :)
Quant à la sémantique erronée - Pensez à quelque chose comme la validation "Ce nom d'utilisateur existe déjà".
400 est incorrectement utilisé pour la validation d'objet
la source
Je dirais que techniquement, il pourrait ne pas s'agir d'un échec HTTP, car la ressource a été (vraisemblablement) validement spécifiée, l'utilisateur a été authentifié et il n'y a pas eu d'échec opérationnel (cependant, même la spécification comprend certains codes réservés comme 402 Payment Required qui ne sont pas '' t à proprement parler lié à HTTP non plus, mais il pourrait être judicieux de l'avoir au niveau du protocole pour que tout appareil puisse reconnaître la condition).
Si c'est effectivement le cas, j'ajouterais un champ d'état à la réponse avec des erreurs d'application, comme
<status><code>4</code> <message> La plage de dates n'est pas valide </message> </status>
la source
Il y a un peu plus d'informations sur la sémantique de ces erreurs dans RFC 2616 , qui documente HTTP 1.1.
Personnellement, j'utiliserais probablement
400 Bad Request
, mais ce n'est que mon opinion personnelle sans aucun soutien factuel.la source
Qu'entendez-vous exactement par «échec de validation»? Que validez-vous? Faites-vous référence à quelque chose comme une erreur de syntaxe (par exemple, XML mal formé)?
Si c'est le cas, je dirais que 400 Bad Request est probablement la bonne chose, mais sans savoir ce que vous "validez", c'est impossible à dire.
la source