Il n'y a donc rien de nouveau ici, j'essaie simplement d'obtenir des éclaircissements et je n'arrive pas à en trouver dans d'autres messages.
Je crée une nouvelle ressource en toute tranquillité, disons :
/books (POST)
avec un corps :
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Je sais que je dois renvoyer un 201 (Created) avec un en-tête Location de la nouvelle ressource :
Location: /books/12345
La question à laquelle je ne parviens pas à répondre est de savoir ce que le serveur doit renvoyer dans le corps du message.
J'ai souvent eu recours à ce type de réponse :
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Je l'ai fait pour plusieurs raisons :
- J'ai écrit une api pour des frameworks frontaux comme angularjs. Dans mon cas particulier, j'utilise des ressources angulaires et j'ai souvent besoin de l'identifiant de la ressource pour la localiser. l'identifiant de la ressource pour la localiser. Si je ne renvoyais pas l'id dans dans le corps de la réponse, j'aurais besoin de l'analyser à partir de l'en-tête Location de l'en-tête.
- Dans un GET de tous les livres, je renvoie généralement l'objet entier et pas seulement l'identifiant. Dans ce sens, mon code client n'a pas à différencier l'endroit où il doit obtenir l'identifiant (en-tête ou corps). l'endroit où il doit obtenir l'identifiant (en-tête de l'emplacement ou corps de l'objet).
Je sais que je suis vraiment dans une zone grise, mais la plupart des gens disent que renvoyer l'intégralité de la ressource est une "mauvaise" pratique. Mais que se passe-t-il si le serveur modifie/ajoute des informations à la ressource. Il ajoute certainement l'identifiant, mais il peut aussi ajouter d'autres choses comme un horodatage. Dans le cas où je ne renvoie pas l'intégralité de la ressource, est-il vraiment préférable de faire un POST, de renvoyer l'identifiant, puis de demander au client d'effectuer un GET pour obtenir la nouvelle ressource.