Je me demandais ce que les gens pensent d'une PUT
opération RESTful qui ne renvoie rien (nul) dans le corps de la réponse.
Je me demandais ce que les gens pensent d'une PUT
opération RESTful qui ne renvoie rien (nul) dans le corps de la réponse.
Réponses:
La spécification HTTP ( RFC 2616 ) contient un certain nombre de recommandations applicables. Voici mon interprétation:
200 OK
pour un PUT réussi d'une mise à jour d'une ressource existante. Aucun organisme d'intervention n'est nécessaire. (Selon la section 9.6 , 204 No Content
c'est encore plus approprié.)201 Created
pour un PUT réussi d'une nouvelle ressource, avec l'URI le plus spécifique pour la nouvelle ressource retourné dans le champ d'en-tête Location et tout autre URI et métadonnées 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 en raison d'une modification à une troisième partie, 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.10 )400 Bad Request
pour un PUT non réussi, avec du texte en langage naturel (tel que l'anglais) dans le corps de la réponse qui explique pourquoi le PUT a échoué. ( RFC 2616 Section 10.4 )No response body needed
par rapport à un 200. En fait, le corps de réponse n'est pas du tout mentionné par rapport à un PUT. Il déclare seulementIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
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 à l'opération PUT est que lorsque vous envoyez une représentation de ressource au serveur, le serveur peut également appliquer un traitement à cette ressource, de sorte que le client souhaite savoir comment fonctionne cette ressource. ressembler à la fin de la demande. (sinon il devra émettre une autre demande GET).
Je pense qu'il est possible que le serveur renvoie du contenu en réponse à un PUT. Si vous utilisez un format d'enveloppe de réponse qui autorise les données latérales (comme le format consommé par ember-data), vous pouvez également inclure d'autres objets qui peuvent avoir été modifiés via des déclencheurs de base de données, etc. (les données latérales sont explicitement réduites # 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 de statut 200 et j'inclus un corps.
La spécification HTTP / 1.1 (section 9.6) décrit les codes de réponse / d'erreur appropriés. Cependant, il ne traite pas du contenu de la réponse.
Qu'attendriez-vous? Un simple code de réponse HTTP (200, etc.) me semble simple et sans ambiguïté.
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 à faire un GET immédiatement après un PUT, ne retournez rien de PUT.
Code de réponse HTTP de 201 pour "Créé" avec un en-tête "Emplacement" pour indiquer où le client peut trouver la ressource nouvellement créée.
J'ai utilisé l'API RESTful dans mes services, et voici mon opinion: D'abord, nous devons arriver à une vue commune: PUT
est utilisé pour mettre à jour une ressource pas créer ou obtenir.
J'ai défini des ressources avec: Stateless resource
et Stateful resource
:
Ressources sans état Pour ces ressources, renvoyez simplement 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, donc renvoyez la ressource complète ou renvoyez la version au client, afin que le client n'ait pas besoin d'envoyer une demande get après l'action de mise à jour.
Mais , pour un service ou un système, gardezsimple
-leclearly
,easy to use and maintain
c'est la chose la plus importante.
Tout comme un corps de demande vide est conforme à l'objectif d'origine d'une demande GET et un corps de réponse vide est conforme à l'objectif d'origine d'une demande PUT.
semble correct ... même si je pense qu'une indication rudimentaire de réussite / échec / temps affiché / # octets reçus / etc. serait préférable.
modifier: je pensais dans le sens de l'intégrité des données et / ou de la tenue des dossiers; des métadonnées telles qu'un hachage MD5 ou un horodatage pour le temps reçu peuvent être utiles pour les fichiers de données volumineux.
Idéalement, il retournerait une réponse succès / échec.
Il y a une différence entre l'en-tête et le corps d'une réponse HTTP. PUT ne doit jamais renvoyer de corps, mais doit renvoyer un code de réponse dans l'en-tête. Choisissez simplement 200 s'il a réussi, et 4xx sinon. Il n'y a pas de code retour nul. Pourquoi veux-tu faire cela?
200
PUT, DELETE ou de toute autre méthode. Ai-je oublié quelque chose? Tels que Mozilla devenant le patron de W3 et de l'IETF? ;) Ou peut-être qu'ils n'ont tout simplement jamais entendu parler du principe de robustesse de Postel.