Est HTTP 404 une réponse appropriée pour une opération de placement, où certains sont liés ressource n'est pas trouvée?

Imaginer un REPOS webservice où vous êtes l'ajout d'éléments à un certain type de conteneur. Par exemple, disons que nous pourrions ajouter un participant #789 à un événement #456 comme ceci:

PUT http://..../api/v1/events/456/attendees/789

Si l'event #456 ou participant #789 n'existent pas, est-il correct de retourner une erreur HTTP 404 (avec une erreur détaillé de la charge utile d'expliquer quel était le problème, par exemple { "error" : { "message" : "Event 456 does not exist" , "code" : "404" } }?

De même, que si je suis entrain de créer quelque chose de nouveau qui fait référence à un autre objet, mais l'autre objet n'existe pas? Par exemple, imaginez que je suis entrain de créer un événement à l'Emplacement n ° 123

PUT http://..../api/v1/event
{ "location": 123, "name": "Party", "date": "2012-05-23", ...etc... }

Si l'Emplacement n ° 123 n'existe pas, il est également correct de retour 404 (avec détail dans la réponse)? Si non, quelles seraient appropriées, juste un 400?

Selon le HTTP 1.1 spec http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

9.6 METTRE ... Si la ressource ne peut pas être créé ou modifié avec l'URI de la Requête, une réponse d'erreur DEVRAIT être donnée qui reflète la nature du problème

Donc qui semblerait être une bonne voix pour répondre à 404. Cependant pour une raison que je n'arrive pas à mettre mon doigt sur, de répondre à METTRE (ou POST) avec une erreur 404 me semble bizarre... peut-être que c'est parce que 404 signifie que la ressource ne peut pas être trouvé, mais dans ce cas, notre ressource est en fait un lien entre les deux autres ressources, et c'est l'une de ces deux ressources qui ne peut être trouvé.

Ne soyez pas trop inquiet au sujet de ma exacte des exemples ici-ils sont faits pour illustrer ce point. La question principale est: est-404 une réponse appropriée à une opération de placement qui échoue à cause d'une ressource liée n'est pas trouvé?

Il serait excellent si vous pouvez références -- je vais avoir un moment difficile de trouver n'importe qui entrer dans ce niveau de détail et sont également suffisamment crédible. En particulier en ce qui concerne le traitement des relations de ressources dans le RESTE de l'API de dessin.

Mise à jour de la pensée je pense que peut-être le premier exemple doit retourner 404, la seconde ne devrait pas. Le raisonnement étant que dans le premier cas, la ressource, nous allons ajouter les utilisations de l'événement 456 et participant 789 comme clé primaire composite; le second cas, l'emplacement est seulement une clé étrangère. Dans le second cas, une erreur doit être renvoyé, mais pas un 404-peut-être une Condition préalable 412 Échec ou peut-être juste un 400 Bad Request. Pensées?

  • À mon humble avis, du point de vue client, vous êtes en commençant à la racine (/) et la marche sur le chemin. À tout moment, si le chemin n'est pas trouvé, vous devriez jeter 404 avec impatience. Ce serait bien si vous pourriez fournir à la partie défaillante, mais je trouve 404 raisonnable.
InformationsquelleAutor jwl | 2012-05-23