web-dev-qa-db-fra.com

Code d'état HTTP correct pour une entrée incorrecte

Qu'est-ce que le code de réponse HTTP optimal lorsque vous ne signalez pas 200 (tout est OK) mais qu'une erreur est entrée?

Par exemple, vous envoyez des données au serveur et il vous répondra que vos données sont erronées

en utilisant 500 ressemble plus à un problème de serveur
en utilisant 200 avec le texte de réponse avertissement/erreur incorrect (permet la mise en cache et tout n’est pas correct)
en utilisant 204 et ne rien retourner, c'est peut-être bon (mais bien soutenu?)
en utilisant 404 est faux si le chemin demandé (script) est disponible et à la place appropriée

140
Marek Sebera

Nous avons eu le même problème lors de la création de notre API. Nous recherchions un code de statut HTTP équivalent à InvalidArgumentException. Après avoir lu l'article source ci-dessous, nous avons fini par utiliser 422 Unprocessable Entity quels États:

Le code de statut 422 (entité non traitable) signifie que le serveur comprend le type de contenu de l'entité de demande (par conséquent, un code de statut 415 (type de support non pris en charge) est inapproprié), et la syntaxe de l'entité de demande est correcte (par conséquent, une requête de type 400 (requête incorrecte)). ) le code d’état est inapproprié) mais n’a pas pu traiter les instructions contenues. Par exemple, cette condition d'erreur peut se produire si un corps de requête XML contient des instructions XML bien formées (c'est-à-dire syntaxiquement correctes), mais sémantiquement erronées.

source: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm

162
Keego

Les codes commençant par 4 (4xx) sont destinés aux erreurs du client. Peut-être que 400 (Bad Request) pourrait convenir à ce cas? La définition dans http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html dit:

"La requête n'a pas pu être comprise par le serveur en raison d'une syntaxe mal formée. Le client NE DEVRAIT PAS répéter la requête sans modification."

132
esaj

En plus de RFC Spec , vous pouvez également le voir en action. Consultez les réponses sur Twitter et Facebook.

https://developer.Twitter.com/en/docs/ads/general/guides/response-codes

http://www.fb-developers.info/tech/fb_dev/faq/general/gen_10.html

13
Mob

409 Conflict pourrait être une solution acceptable.

Selon: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

La demande n'a pas pu être complétée en raison d'un conflit avec l'état actuel de la ressource. Ce code n'est autorisé que dans les cas où l'utilisateur devrait pouvoir résoudre le conflit et soumettre à nouveau la demande. Le corps de la réponse DEVRAIT inclure suffisamment d'informations pour que l'utilisateur puisse reconnaître la source du conflit. Idéalement, l'entité de réponse inclurait suffisamment d'informations pour permettre à l'utilisateur ou à l'agent d'utilisateur de résoudre le problème. cependant, cela pourrait ne pas être possible et n'est pas requis.

La doc continue avec un exemple:

Les conflits sont plus susceptibles de se produire en réponse à une demande PUT. Par exemple, si le contrôle de version était utilisé et que l'entité en cours PUT incluait des modifications d'une ressource incompatibles avec celles effectuées par une requête précédente (tierce partie), le serveur pourrait utiliser la réponse 409 pour indiquer qu'il ne pouvait pas terminer la demande. . Dans ce cas, l'entité de réponse contiendra probablement une liste des différences entre les deux versions dans un format défini par la réponse Content-Type.


Dans mon cas, je voudrais mettre une chaîne, qui doit être unique, à une base de données via une API. Avant de l'ajouter à la base de données, je vérifie que ce n'est pas déjà dans la base de données.

Si c'est le cas, je reviendrai "Error: The string is already in the database", 409.

Je pense que c’est ce que l’opération cherchait: un code d’erreur approprié lorsque les données ne répondent pas aux critères du serveur.

6