Donc, rien de nouveau ici, j'essaie simplement d'obtenir des éclaircissements et je n'arrive pas à en trouver dans d'autres articles.
Je crée une nouvelle ressource avec réticence, dites:
/books (POST)
avec un corps:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Je sais que je devrais retourner un 201 (créé) avec un en-tête Location de la nouvelle ressource:
Location: /books/12345
La question à laquelle je n'arrive pas à répondre par moi-même est de savoir ce que le serveur devrait retourner dans le corps.
J'ai souvent fait ce type de réponse:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Je l'ai fait pour deux raisons:
- J'ai écrit des API pour les frameworks frontaux comme angularjs. Dans mon cas particulier, j'utilise des ressources angulaires et j'ai souvent juste besoin de l'ID de la ressource pour la localiser. Si je n'ai pas renvoyé l'ID dans le corps de la réponse, je devrais l'analyser hors de l'en-tête Location.
- Dans un GET de tous les livres, je retourne généralement l'objet entier, pas seulement l'id. En ce sens, mon code client n'a pas à différencier d'où obtenir l'identifiant (en-tête ou corps de l'emplacement).
Maintenant, je sais que je suis vraiment dans la zone grise ici, mais la plupart des gens disent que le retour de la ressource entière est une «mauvaise» pratique. Mais que faire si le serveur modifie / ajoute des informations à la ressource. Il ajoute définitivement l'identifiant, mais pourrait également ajouter d'autres choses comme un horodatage. Dans le cas où je ne renvoie pas la totalité de la ressource, est-il vraiment préférable de faire un POST, de renvoyer l'ID, puis de demander au client d'effectuer un GET pour obtenir la nouvelle ressource.