92 votes

Message d'erreur de repos dans l'en-tête HTTP ou le corps de la réponse ?

J'ai un service REST qui est exposé aux clients iPhone et Android. Actuellement, je respecte les codes HTTP 200, 400, 401, 403, 404, 409, 500, etc.

Ma question est la suivante : quel est l'endroit recommandé pour mettre la raison/la description/la cause de l'erreur ? Est-il plus logique que l'API REST ait toujours une raison personnalisée dans l'en-tête ?

< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked

Ou est-il préférable de l'avoir dans le corps de la réponse via JSON ?

< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }

110voto

Perception Points 42290

Citation de la spécification HTTP pour les codes d'erreur 400.x :

La classe de code d'état 4xx est prévue pour les cas où le client semble avoir commis une erreur. Sauf en cas de réponse à une requête HEAD, le code d'état serveur DEVRAIT inclure une entité contenant une explication de l'erreur situation, et s'il s'agit d'une condition temporaire ou permanente. Ces codes d'état sont applicables à toute méthode de demande. Les agents utilisateurs DEVRAIENT afficher toute entité incluse à l'utilisateur.

La meilleure pratique consiste à inclure le message d'erreur en tant qu'entité dans le corps de la réponse HTTP - qu'il s'agisse de JSON, de texte brut, de HTML formaté ou de tout autre format que vous souhaitez utiliser.

26voto

Tadeck Points 37046

Il est préférable d'avoir les détails des erreurs dans le corps. En outre, de nombreux serveurs et clients (la plupart / presque tous, par exemple WSGI) ne prennent pas en charge la modification du nom du code d'erreur - traitez-les comme des paires fixes (ainsi, par exemple, 400 est toujours "Bad Request" et non "Bad Request - You Forgot To Specify The User ID"). Même s'ils ne se cassent pas, ils ne se soucieront pas de votre nom spécial pour un code d'erreur spécifique.

3voto

B Seven Points 6496

L'erreur n'a pas sa place dans le corps. Elle doit se trouver dans l'en-tête Warning.

L'en-tête HTTP général Warning contient des informations sur les éventuelles problèmes éventuels concernant l'état du message.

Référence

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X