J'ai le point de terminaison suivant:
a/{id}/b
et souhaitez créer une demande d' b
envoi POST
. Si a
avec donné {id}
n'est pas trouvé, dois-je répondre avec 404 NOT_FOUND
ou peut-être avec 409 CONFLICT
?
Il s'agit de gérer simplement a/{id}
, l'astuce est qu'ici une sous-ressource est utilisée.
rest
api
api-design
http-request
Opale
la source
la source
Réponses:
404 NOT FOUND
semble la réponse appropriée, car la ressource avec cet ID n'existe pas. C'est très clair à comprendre et vous attendez la même réponse sia/{id}
est appelé.409 CONFLICT
ne me semble pas le meilleur choix, car dans votre exemple, vous retournerez un 409 lorsque la ressource parent n'a pas été trouvée :).Mais se souvient que la chose la plus importante est d'être cohérent dans votre API
la source
id
), est 404. Mais si le dossier a été passé dans le corps, cela pourrait être autre chose (412, 422 ... quelque chose à représenter "échec de validation: le dossier fait n'existe pas"). C'est une bonne question à poser et à discuter.En plus de la réponse de @ Dherik.
Les URI sont des identifiants , nous devons donc garder à l'esprit que (
/a/{id}/b
est un identifiant). L' URI n'a pas de sens pour le WWW, tout comme pour le client HTTP.404 est la bonne réponse . En substance, le serveur répond
Que la ressource manquante soit parent ou enfant n'a pas d'importance.
Nous, développeurs, voyons les hiérarchies et les chemins dans l'URI, mais pas les clients HTTP. En d'autres termes, HTTP est uniquement destiné à être interprété par les clients HTTP mais pas par les humains (développeurs, utilisateurs finaux, etc.).
En cas de doute, ne demandez pas quel code a du sens pour vous (humain). Demandez-vous quel code a du sens pour le client HTTP. Comment voulez-vous que le client HTTP se comporte?
Pourquoi? Parce qu'un code d'état oblige ces clients à effectuer certaines opérations. Par exemple, 302 . Ce code oblige généralement les navigateurs Web à rediriger vers un emplacement spécifique (URI) informé dans les en-têtes de réponse.
Ce n'est peut-être pas votre cas, mais il est important d'en être conscient. En fin de compte, les codes d'état HTTP sont adressés aux clients HTTP. Pas à nos applications. Pas aux personnes.
1: 409 est rarement implémenté comme erreur de navigation. Cela implique généralement l'exécution d'opérations à distance (suppression, mise à jour, nouvelle, etc.). Mais l'URI devrait exister. Sinon, 404 prévaudra
la source