177 votes

Quel est le code d'état HTTP le plus approprié pour une page d'erreur "item not found" ?

Je suis curieux de savoir quel est le code d'état HTTP le plus approprié pour une page "l'article n'existe pas".

Si la page elle-même n'existe pas, j'utiliserai évidemment 404. Cependant, l'une de mes pages a un userid (il s'agit d'une page "modifier l'utilisateur") et si aucun utilisateur avec l'ID donné n'existe, j'affiche une page d'erreur, mais j'aimerais également envoyer un en-tête de statut 4xx (car "200 OK" ne convient pas vraiment).

Je suppose que 404 serait acceptable puisque c'est "non trouvé" et non "fichier non trouvé", mais je me demande s'il n'y a pas un meilleur code pour ce cas.

5voto

Mosia Thabo Points 11

Si la page elle-même n'existe pas, j'utiliserai évidemment 404.

Ce que vous avez dit ici est un peu confus, mais je dois supposer que vous développez une API backend.

Le problème est que la personne qui consomme le point de terminaison de l'API peut être désorientée de deux manières :

  1. Ils peuvent penser que le 404 renvoyée est due au fait que le point de terminaison (ressource) n'a pas été atteint, Ou
  2. Ils peuvent penser que l'élément ou l'utilisateur demandé n'a pas été trouvé.

Le problème est donc de savoir comment ils vont savoir quelle est la bonne hypothèse.

La réponse est simple. Essayez toujours d'attacher un corps à toute erreur renvoyée par le code. Les erreurs renvoyées automatiquement par le serveur n'ont pas de corps. Essayez donc de joindre un corps que vous pouvez documenter afin qu'ils puissent utiliser le contenu du corps pour différencier les erreurs renvoyées par le code des erreurs renvoyées par le serveur.

Mais en résumé, 404 est le bon statut à renvoyer, mais essayez d'y attacher un corps indiquant pourquoi 404 a été renvoyée.

Voici un exemple :

// For illustration I'm just gonna use C#
Return NotFound(new { errorMessage: "Item requested was not found" });

Ici, NotFound renvoie un 404 et le paramètre est un objet comme { errorMessage: "some reason for the error"} . De cette façon, vous pouvez toujours vérifier si votre erreur a renvoyé un corps, et vous savez qu'il a été renvoyé par votre code. Sinon, la ressource (lien) n'a pas été trouvée.

1voto

Andrea Ciccotta Points 125
/**
* {@code 422 Unprocessable Entity}.
* @see <a href="https://tools.ietf.org/html/rfc4918#section-11.2">WebDAV</a>
*/
UNPROCESSABLE_ENTITY(422, "Unprocessable Entity")

1voto

Caveman Points 469

Puisqu'il s'agit d'une page destinée à l'utilisateur, utilisez toujours 404 . C'est le seul code que les gens connaissent habituellement.

Pour la requête api, utilisez 400 avec le message d'erreur "No such user exists" ou quelque chose de ce genre.

1voto

Shakthifuture Points 21

204 est la solution appropriée lorsque l'élément n'est pas trouvé :

404 Code d'état :

404 apparaît automatiquement lorsque l'API demandée est indisponible . Les liens qui mènent à une page 404 sont souvent appelés cassé ou morts des liens et peuvent être soumis au pourrissement des liens.

204 Code d'état :

204 Le code d'état doit indiquer que l'élément n'a pas été trouvé, ce qui signifie que votre demande a été rejetée. traité avec succès et le contenu introuvable .

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