Donc, rien de nouveau ici, j'essaie simplement d'obtenir des éclaircissements et n'arrive pas à en trouver dans d'autres messages.
Je suis en train de créer une nouvelle ressource, par exemple:
/books (POST)
avec un corps:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
Je sais que je devrais renvoyer 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 personnellement 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'
}
J'ai fait cela pour plusieurs raisons:
Maintenant, je sais que je suis vraiment dans la zone grise, mais la plupart des gens disent que restituer toute la ressource est une "mauvaise" pratique. Mais que se passe-t-il si le serveur modifie/ajoute des informations à la ressource? Il ajoute définitivement l'id, mais pourrait aussi ajouter d'autres choses comme un horodatage. Au cas où je ne renverrais pas la totalité de la ressource, est-il préférable de faire un post, de renvoyer l'ID, puis de demander au client d'effectuer une opération GET pour obtenir la nouvelle ressource.
Renvoyer l'intégralité de l'objet dans une mise à jour ne semblerait pas très pertinent, mais je ne vois pas très bien pourquoi le renvoi de l'intégralité de l'objet à sa création serait une mauvaise pratique dans les cas d'utilisation normale. Cela serait utile au moins pour obtenir facilement l’ID et les horodatages, le cas échéant. C'est en fait le comportement par défaut obtenu lors de l'échafaudage avec Rails.
Je ne vois vraiment aucun avantage à renvoyer uniquement 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’existe pas de méthode correcte pour créer une API REST, imo.
Le renvoi du nouvel objet est conforme au principe REST de "Interface uniforme - Manipulation de ressources via des représentations". L'objet complet est la représentation du nouvel état de l'objet créé.
Il existe une excellente référence pour la conception des 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 devraient renvoyer une représentation de ressource
Ça dit:
Pour éviter qu'un consommateur d'API n'ait à demander à nouveau à l'API une représentation mise à jour, demandez à l'API de renvoyer la représentation mise à jour (ou créée) dans le cadre de la réponse.
Cela me semble bien pragmatique et cela correspond au principe REST que j'ai mentionné ci-dessus.