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.
la source
Réponses:
Renvoyer l'objet entier sur une mise à jour ne semble pas très pertinent, mais je peux difficilement voir pourquoi retourner l'objet entier lorsqu'il est créé serait une mauvaise pratique dans un cas d'utilisation normal. Cela serait utile au moins pour obtenir l'ID facilement et pour obtenir les horodatages lorsque cela est pertinent. Il s'agit en fait du comportement par défaut obtenu lors de l'échafaudage avec Rails.
Je ne vois vraiment aucun avantage à ne renvoyer que l'ID et à faire une demande GET après, pour obtenir les données que vous auriez pu obtenir avec votre POST initial.
Quoi qu'il en soit, tant que votre API est cohérente, je pense que vous devez choisir le modèle qui correspond le mieux à vos besoins. Il n'y a pas de moyen correct de construire une API REST, imo.
la source
Le retour du nouvel objet correspond au principe REST de «Interface uniforme - Manipulation des ressources par le biais des représentations». L'objet complet est la représentation du nouvel état de l'objet qui a été créé.
Il existe une excellente référence pour la conception d'API, ici: Meilleures pratiques pour la conception d'une API RESTful pragmatique
Il comprend une réponse à votre question ici: les mises à jour et la création doivent renvoyer une représentation des ressources
Ça dit:
Cela me semble très pragmatique et cela correspond au principe REST que j'ai mentionné ci-dessus.
la source