2010-12-10 3 views
8

Je suis en train de concevoir une API reposante, et j'essaie de vraiment le faire correctement pour la première fois.Réponse RESTful correcte au POST et PUT sur les ressources imbriquées

J'ai défini certaines ressources imbriquées (commentaires dans un article de blog), et ce choix reflète le fait que les commentaires sont imbriqués dans le document de blog post dans mongo.

Je ne souhaite pas traiter les commentaires individuels hors contexte, j'ai donc différé la mise en œuvre des GET pour les ressources imbriquées. Cependant, il est logique d'implémenter POSTing à la collection de commentaires, et PUTTING à un commentaire uri.

Questions spécifiques:

1) Est-il judicieux de répondre à un POST avec un 201 et un en-tête d'emplacement défini sur la ressource mère? Si non, comment communiquer l'emplacement parent pour informer les choix de navigation sur le client?

2) Question similaire pour PUT, comment puis-je mieux communiquer au client qu'il devrait se tourner vers la ressource parente pour localiser sa mise à jour? (de préférence sans que le client doive faire des hypothèses sur mon système uri). L'en-tête Location est-il raisonnable sur un 200?

Répondre

12

Bien que je ne l'ai jamais fait moi-même, j'ai entendu parler de personnes utilisant l'en-tête Content-Location à cette fin. Content-Location est utilisé pour identifier l'emplacement de la ressource représentée par l'entité renvoyée. Dans le cas de vos PUT et POST, il se peut que vous ne souhaitiez pas renvoyer la totalité de l'article de blog, donc je ne suis pas certain de la validité de renvoyer un en-tête Content-Location même lorsque vous ne renvoyez pas une représentation dans la réponse.

Cela dit, je ne peux pas penser à des effets négatifs, alors voici ce que je suggère:

PUT /Blog/343/Comment/23 
=> 
200 OK 
Content-Location: /Blog/343 


POST /Blog/343/Comments 
=> 
201 Created 
Location: /Blog/343/Comment/24 
Content-Location: /Blog/343 
+0

Grand pointeur! Nous l'appellerons une "représentation minimaliste" = o) – BnWasteland

+0

@BnWasteland Dans les cas où vous utilisez PUT pour mettre à jour des morceaux d'une ressource plus grande, j'ai appelé cela l'approche "mini-PUT". –

Questions connexes