web-dev-qa-db-fra.com

404 Introuvable ou mauvaise demande?

Disons que nous avons l'appel REST suivant:

GET api/companies/5 

(obtenir la société avec l'ID 5)

Si la société "5" n'existe pas, nous renvoyons généralement un 404 Not Found réponse.

Mais maintenant, prenons cet appel:

GET api/companies/5/invoices/10 

(obtenez la facture 10 de la société 5)

Maintenant, si la société "5" n'existe pas, retournons-nous toujours un 404 Not Found? Ou si un 404 n'est retourné que si la ressource la plus externe ne peut pas être trouvée (facture 10, dans ce cas).

Aurait Bad Request peut-être une meilleure option?

24
Dave New

404 est votre meilleure réponse. Selon le HTTP RFC, http://www.ietf.org/rfc/rfc2616.txt , une 400 Bad Request signifie:

La demande n'a pas pu être comprise par le serveur en raison d'une syntaxe incorrecte.

Attendu qu'un 404 déclare:

Le serveur n'a rien trouvé correspondant à l'URI de demande.

L'URI entier est votre identifiant de ressource, et vous ne trouvez pas de ressource correspondante pour cet identifiant particulier.

29
Josh Rack

404 peut provoquer une confusion - la ressource est-elle manquante ou l'URL réelle est-elle incorrecte?

J'irais personnellement pour le 422 code:

   The 422 (Unprocessable Entity) status code means the server
   understands the content type of the request entity (hence a
   415(Unsupported Media Type) status code is inappropriate), and the
   syntax of the request entity is correct (thus a 400 (Bad Request)
   status code is inappropriate) but was unable to process the contained
   instructions.  For example, this error condition may occur if an XML
   request body contains well-formed (i.e., syntactically correct), but
   semantically erroneous, XML instructions.
0
Mārtiņš Briedis