web-dev-qa-db-fra.com

Si une API RESTful renvoie 400 ou 404 lorsqu'elle reçoit un identifiant non valide

Lorsque vous créez une API RESTful et qu'un utilisateur fournit un id de ressource qui n'existe pas, si vous renvoyez 404 Not Found ou 400 Bad Request.

Par exemple:

https://api.domain.com/v1/resource/foobar

foobar n'existe pas.

45
Justin

Je retournerais 404 en cas de ressource inexistante (signifie que le chemin de l'URL est incorrect) et je ne retournerai 400 que si l'appel de repos est fait avec des données invalides (@PathParam) par exemple
https://api.domain.com/v1/profile/test@email : ici, j'essaie d'obtenir le profil de l'identifiant de l'e-mail, mais l'e-mail lui-même est incorrect, donc je renverra 400.
https://api.domain.com/v1/profile1111/[email protected] renverra 404 car le chemin de l'url n'est pas valide.

37
Manoj

Doit être 404 (introuvable). 400 est utilisé si vous ne pouvez pas répondre à la demande en raison d'une mauvaise syntaxe, mais pour votre cas, la syntaxe est correcte, mais il n'y a pas de barre de ressources.

Vous pouvez utiliser 400 si l'utilisateur utilise une API inexistante comme ci-dessous:

https://api.domain.com/v1/nonexistAPI/xyz/xyz

Vous pouvez également consulter ce blog de conception d'API REST qui vous indique comment concevoir vos codes d'erreur REST.

14
Rudy

404 Not Found est la bonne réponse, je pense, 400 concerne davantage le corps des demandes et non l'identifiant de la ressource, vous pouvez donc par exemple l'envoyer par des erreurs de validation.

9
inf3rno

Est-ce une demande valide? L'identifiant de la ressource peut-il exister? Est-il formaté comme un identifiant correct? Est-ce syntaxiquement correct? etc .. Si oui, vous pouvez utiliser, 404 Not Found. Autrement 400 Bad Request est plus approprié.

8
qbit

Selon la RFC ( https://tools.ietf.org/html/rfc2616#section-10.4 ) l'API devrait renvoyer 404 lorsque "Le serveur n'a rien trouvé correspondant à l'URI de la demande", qui est votre exemple.

400 serait lorsque la ressource est trouvée, mais la demande elle-même est mal formée.

Par exemple: i. https://api.domain.com/v1/resource/foobar

où foobar N'EXISTE PAS devrait retourner 404

ii. https://api.domain.com/v1/resource/foobar où foobar existe, mais la demande est fausse ({age: "NOTANINTEGER"}, une chaîne au lieu d'un int par exemple) , il devrait renvoyer 400.

J'espère que je pourrais vous aider.

2
Tiaraju

404 serait une pratique plus courante. C'est pour Resource Not Found. Dans votre cas, l'URL particulière n'est pas trouvée.

400 est généralement utilisé pour Bad Request. Vous pouvez utiliser celui-ci pour toute mauvaise demande. Par exemple. MissingRequiredQueryParameter, InvalidInput.

1
user636856