Je me demandais ce que pensaient les gens d'une opération RESTful PUT
qui ne renvoie rien (null) dans le corps de la réponse.
La spécification HTTP ( RFC 2616 ) contient un certain nombre de recommandations applicables. Voici mon interprétation:
200 OK
pour une mise à jour réussie d'une mise à jour d'une ressource existante. Aucun corps de réponse nécessaire. (Par Section 9.6 , 204 No Content
est encore plus approprié.)201 Created
pour le PUT d'une nouvelle ressource, l'URI le plus spécifique correspondant à la nouvelle ressource étant renvoyé dans le champ d'en-tête Location et tout autre URI et métadonnées pertinents de la ressource en écho dans le corps de la réponse. ( RFC 2616 section 10.2.2 )409 Conflict
pour un PUT qui échoue à cause d'un 3rd-Partie modification, avec une liste des différences entre la tentative de mise à jour et la ressource actuelle dans le corps de la réponse. ( RFC 2616 Section 10.4.1 )400 Bad Request
pour un PUT infructueux, avec un texte en langage naturel (tel que l'anglais) dans le corps de la réponse qui explique l'échec du PUT. ( RFC 2616 section 10.4 )Contrairement à la plupart des réponses ici, je pense en fait que PUT devrait renvoyer la ressource mise à jour (en plus du code HTTP bien sûr).
La raison pour laquelle vous souhaitez renvoyer la ressource en réponse à une opération PUT est que, lorsque vous envoyez une représentation de ressource au serveur, celui-ci peut également appliquer un traitement à cette ressource. Le client souhaite donc savoir comment cette ressource est utilisée. ressembler à après la demande terminée avec succès. (sinon, il devra émettre une autre demande GET).
Je pense qu'il est possible pour le serveur de renvoyer du contenu en réponse à un PUT. Si vous utilisez un format d’enveloppe de réponse qui autorise les données rechargées de manière latérale (telles que le format utilisé par les données de membre), vous pouvez également inclure d’autres objets éventuellement modifiés via des déclencheurs de base de données, etc. # de demandes, et cela semble être un bon endroit pour optimiser.)
Si j'accepte simplement le PUT et que je n'ai rien à signaler, j'utilise le code d'état 204 sans corps. Si j'ai quelque chose à signaler, j'utilise le code d'état 200 et j'inclus un corps.
Le HTTP/1.1 spec (section 9.6) décrit les codes de réponse/d'erreur appropriés. Cependant, cela ne concerne pas le contenu de la réponse.
Qu'attendrais-tu? Un simple code de réponse HTTP (200, etc.) me semble simple et sans ambiguïté.
J'ai utilisé l'API RESTful dans mes services, et voici mon opinion: Tout d'abord, nous devons obtenir une vue commune: PUT
est utilisé pour mettre à jour une ressource non créée ou récupérée.
J'ai défini les ressources avec: Stateless resource
et Stateful resource
:
Ressources sans état Pour ces ressources, il suffit de renvoyer le HttpCode avec un corps vide, c'est suffisant.
Ressources avec état Par exemple: la version de la ressource. Pour ce type de ressources, vous devez fournir la version lorsque vous souhaitez la modifier. Renvoyez donc la ressource complète ou la version au client. Le client n'a donc pas besoin d'envoyer une requête get après l'action de mise à jour.
Mais , pour un service ou un système, conservez-le simple
, clearly
, easy to use and maintain
est la chose la plus importante.
Code de réponse HTTP de 201 pour "Créé" avec un en-tête "Lieu" pour indiquer l'endroit où le client peut trouver la ressource nouvellement créée.
Si le backend de l'API REST est une base de données relationnelle SQL, alors
Si vous ne vous souciez pas des mises à jour perdues, ou si vous voulez forcer vos clients à effectuer une opération GET immédiatement après un PUT, ne renvoyez rien dans PUT.