Quel est le code de réponse HTTP optimal lorsque vous ne signalez pas 200 (tout est OK) mais une erreur d'entrée?
Par exemple, vous soumettez des données au serveur, et il répondra que vos données sont fausses
l'utilisation 500
ressemble plus à un problème de serveur l'
utilisation 200
d'un texte de réponse d'avertissement / d'erreur est mauvaise (autoriser la mise en cache et tout n'est pas OK)
utiliser 204
et ne renvoyer rien, est peut-être bon (mais bien pris en charge?) l'
utilisation 404
est incorrecte si le chemin demandé (script) est disponible et au bon endroit
api
http
validation
Marek Sebera
la source
la source
Réponses:
Nous avons eu le même problème lors de la création de notre API. Nous recherchions un code d'état HTTP équivalent à un
InvalidArgumentException
. Après avoir lu l'article source ci-dessous, nous avons fini par utiliser422 Unprocessable Entity
quels états:source: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm
la source
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 demande 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 demande sans modifications."
la source
400 Bad Request
n'est pas mauvais mais devrait généralement être réservé à une syntaxe mal formée. OP semble être plus préoccupé par un cas avec une syntaxe bien formée mais des valeurs invalides. Plus 400 est un code de réponse "oh merde quelque chose n'allait pas" assez commun que vous voudrez peut-être différencier d'un cas particulier d'entrée erronée.En plus de la spécification RFC, vous pouvez également voir cela en action. Consultez les réponses Twitter.
https://developer.twitter.com/en/docs/ads/general/guides/response-codes
la source
409 Conflict
pourrait être une solution acceptable.Selon: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
La doc continue avec un exemple:
Dans mon cas, je voudrais METTRE une chaîne, qui doit être unique, dans une base de données via une API. Avant de l'ajouter à la base de données, je vérifie qu'il 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 crois que c'est ce que voulait l'OP: un code d'erreur adapté lorsque les données ne satisfont pas aux critères du serveur.
la source
Selon le scénario ci-dessous,
Disons que quelqu'un fait une demande à votre serveur avec des données au format correct, mais qui ne sont tout simplement pas de «bonnes» données. Par exemple, imaginez que quelqu'un ait publié une valeur String sur un point de terminaison d'API qui attendait une valeur String; mais, la valeur de la chaîne contenait des données qui étaient sur la liste noire (ex. empêchant les gens d'utiliser "mot de passe" comme mot de passe). alors le code d'état pourrait être 400 ou 422?
Jusqu'à présent, j'aurais renvoyé une "400 Bad Request", ce qui, selon le w3.org, signifie:
Cette description ne correspond pas tout à fait aux circonstances; mais, si vous consultez la liste des codes d'état HTTP de base définis dans le protocole HTTP / 1.1, c'est probablement votre meilleur pari.
Récemment, cependant, un membre de mon équipe de développement m'a fait remarquer que les API populaires commencent à utiliser des extensions HTTP pour obtenir plus de précision dans leurs rapports d'erreurs. Plus précisément, de nombreuses API, comme Twitter et Recurly, utilisent le code d'état "422 Entité non traitable" tel que défini dans l'extension HTTP pour WebDAV. Le code d'état HTTP 422 indique:
Pour revenir à notre exemple de mot de passe ci-dessus, ce code d'état 422 semble beaucoup plus approprié. Le serveur comprend ce que vous essayez de faire; et il comprend les données que vous soumettez; il ne permettra tout simplement pas que ces données soient traitées.
la source
404 - Not Found - peut être utilisé pour L'URI demandé n'est pas valide ou la ressource demandée, comme un utilisateur, n'existe pas.
la source