web-dev-qa-db-fra.com

Quelle est la principale différence entre les requêtes PATCH et PUT?

J'utilise une requête PUT dans mon application Rails. Un nouveau verbe HTTP, PATCH, a été implémenté par les navigateurs. Je souhaite donc savoir quelle est la principale différence entre les demandes PATCH et PUT et quand nous devrions utiliser l’une ou l’autre. 

139
user3276063

Les verbes HTTP sont probablement l’un des aspects les plus énigmatiques du protocole HTTP. Ils existent et ils sont nombreux, mais pourquoi existent-ils?

Rails semble vouloir prendre en charge de nombreux verbes et ajouter des verbes qui ne sont pas supportés nativement par les navigateurs Web.

Voici une liste exhaustive des verbes http: http://annevankesteren.nl/2007/10/http-methods

Là, le patch HTTP de la RFC officielle: https://datatracker.ietf.org/doc/rfc5789/?include_text=1

La méthode PATCH demande qu'un ensemble de modifications décrites dans le fichier entité de requête être appliquée à la ressource identifiée par Request - URI. L'ensemble de modifications est représenté dans un format appelé "patch Document" identifié par un type de support. Si l'URI de la demande ne le fait pas pointez sur une ressource existante, le serveur PEUT créer une nouvelle ressource, en fonction du type de document correctif (s'il peut logiquement modifier une ressource nulle) et des autorisations, etc.

La différence entre les requêtes PUT _ et PATCH est reflétée dans le manière dont le serveur traite l'entité incluse pour modifier la ressource identifié par l'URI de la demande. Dans une requête PUT, l'entité incluse est considérée comme une version modifiée de la ressource stockée sur le Serveur d'origine et le client demande que la version stockée soit remplacé. Avec PATCH, toutefois, l'entité incluse contient un ensemble de des instructions décrivant comment une ressource résidant actuellement sur le Le serveur d'origine doit être modifié pour produire une nouvelle version. Le PATCH Cette méthode affecte la ressource identifiée par le Request-URI, ainsi que PEUT avoir des effets secondaires sur d'autres ressources; c'est-à-dire de nouvelles ressources peuvent être créés, ou ceux existants, modifiés, par l'application d'un PATCH.

Autant que je sache, le verbe CORRECTIF n'est pas utilisé comme dans les applications Rails ... Si je comprends bien, le verbe correctif RFC devrait être utilisé pour envoyer diff entre deux fichiers. Au lieu d’envoyer à nouveau l’entité entière, vous envoyez un patch qui pourrait être beaucoup plus petit que de renvoyer l’entité entière.

Imaginez que vous vouliez éditer un gros fichier. Vous éditez 3 lignes. Au lieu de renvoyer le fichier, il vous suffit d’envoyer le diff. Du côté positif, l'envoi d'une demande de correctif pourrait être utilisé pour fusionner des fichiers de manière asynchrone. Un système de contrôle de version pourrait potentiellement utiliser le verbe PATCH pour mettre à jour le code à distance.

Un autre cas d'utilisation possible est quelque peu lié aux bases de données NoSQL, il est possible de stocker des documents. Supposons que nous utilisions une structure JSON pour envoyer des données du serveur au client. Si nous voulions supprimer un champ, nous pourrions utiliser une syntaxe similaire à celle de mongodb pour $ unset . En fait, la méthode utilisée par mongodb pour mettre à jour les documents pourrait probablement être utilisée pour gérer les patchs JSON. 

Prenant cet exemple:

db.products.update(
   { sku: "unknown" },
   { $unset: { quantity: "", instock: "" } }
)

Nous pourrions avoir quelque chose comme ça:

PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }

Dernier point, mais non le moindre, les gens peuvent dire ce qu'ils veulent des verbes HTTP. Il n'y a qu'une seule vérité, et la vérité est dans les RFC. 

114
Loïc Faure-Lacroix

J'ai passé quelques heures avec Google et trouvé la réponse ici

PUT => Si l'utilisateur peut mettre à jour tout ou partie de l'enregistrement, utilisez PUT (l'utilisateur contrôle ce qui est mis à jour)

PUT /users/123/email
[email protected]

PATCH => Si l'utilisateur ne peut mettre à jour qu'un enregistrement partiel, dites simplement une adresse électronique (l'application contrôle ce qui peut être mis à jour), utilisez PATCH.

PATCH /users/123
[description of changes]

Pourquoi Patch

La méthode PUT a besoin de plus de bande passante ou gère des ressources complètes au lieu de partielles. Donc PATCH a été introduit pour réduire la bande passante.

Explication sur PATCH

PATCH est une méthode qui n’est ni sûre ni idempotente et qui permet des mises à jour complètes et partielles et des effets secondaires sur d’autres ressources.

PATCH est une méthode dans laquelle l'entité fermée contient un ensemble d'instructions décrivant comment une ressource résidant actuellement sur le serveur Origin doit être modifiée pour produire une nouvelle version.

PATCH /users/123
[
  { "op": "replace", "path": "/email", "value": "[email protected]" }
]

Ici plus d'informations sur put et patch

83
Selvamani

mettre  
si je veux changer mon nom first puis envoyer put request for Update 

{ "first": "Nazmul", "last": "hasan" } 

mais ici, il y a un problème, c'est la demande put qui, lorsque je veux envoyer une demande put, doit envoyer tous les deux paramètres qui est first et last
il est donc obligatoire de renvoyer toutes les valeurs 

patch :
patch demande dit. N'envoyez que data lequel vous voulez update et il ne modifiera pas d'autres données.
donc pas besoin d'envoyer toute la valeur à nouveau. Je veux juste mettre à jour mon prénom, donc je dois envoyer seulement first nom à mettre à jour. 

33
Nazmul Hasan

PUT over PATCH est limité lors de la mise à jour. L'utilisation de PUT nécessite la spécification de tous les attributs, même si nous souhaitons modifier un seul attribut . Mais si nous utilisons la méthode PATCH, nous ne pouvons mettre à jour que les champs nécessaires et il n'est pas nécessaire de les mentionner tous. PATCH ne nous permet pas de modifier une valeur dans un tableau, ni de supprimer un attribut ou une entrée de tableau.

2
Anand Muhale

PUTetPATCHles méthodes sont similaires, mais il existe une différence essentielle. 

PUT- inPUTrequest, l'entité incluse serait considérée comme la version modifiée d'une ressource résidant sur le serveur et elle serait remplacée par cette entité modifiée.

PATCH- dansPATCHrequest, l'entité incluse contient l'ensemble d'instructions indiquant comment l'entité résidant sur le serveur sera modifiée pour produire une version plus récente.

1
Neeraj Kumar

Selon les termes HTTP, la requête PUT est semblable à une instruction de mise à jour de la base de données .PUT - est utilisée pour modifier la ressource existante (Auparavant POSTED). D'autre part, la requête PATCH est utilisée pour mettre à jour une partie de la ressource existante.

Par exemple: 

Détails du client:

// This is just a example.

firstName = "James";
lastName = "Anderson";
email = "[email protected]";
phoneNumber = "+92 1234567890";
//..

Lorsque nous voulons mettre à jour l'intégralité de l'enregistrement? nous devons utiliser HttpPUTverb pour cela.

tel que:

// Customer Details Updated.

firstName = "James++++";
lastName = "Anderson++++";
email = "[email protected]";
phoneNumber = "+92 0987654321";
//..

D'autre part, si nous souhaitons mettre à jour uniquement la partie de l'enregistrement, et non l'intégralité de l'enregistrement, choisissez HttpPATCHverb.tel que:

   // Only Customer firstName and lastName is Updated.

    firstName = "Updated FirstName";
    lastName = "Updated LastName";
   //..

PUT VS POST:

Lors de l'utilisation de la requête PUT, nous devons envoyer tous les paramètres tels que firstName, lastName, email, phoneNumber Où as in La requête patch envoie uniquement les paramètres que nous souhaitons mettre à jour sans que d'autres données soient modifiées.

Pour plus de détails, veuillez visiter: https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/

0
Rehan Shah

Les méthodes Put et Patch sont similaires. Mais dans Rails, il a une méthode différente Si nous voulons mettre à jour/remplacer un enregistrement complet, nous devons utiliser la méthode Put . Si nous voulons mettre à jour un enregistrement particulier, utilisez la méthode Patch.

0
Shael Mittapelli

Voici la différence entre les méthodes POST, PUT et PATCH d'un protocole HTTP.

POST

Une méthode HTTP.POST crée toujours une nouvelle ressource sur le serveur. C’est une requête non idempotente, c’est-à-dire que si l’utilisateur répond deux fois aux mêmes requêtes, il créerait une nouvelle ressource s'il n'y avait pas de contrainte.

la méthode post http est comme une requête INSERT en SQL qui crée toujours un nouvel enregistrement dans la base de données.

Exemple: Utilisez la méthode POST pour enregistrer le nouvel utilisateur, la commande, etc., où le serveur dorsal décide de l'ID de la nouvelle ressource.

PUT

Dans la méthode HTTP.PUT, la ressource est d'abord identifiée à partir de l'URL. Si elle existe, elle est mise à jour, sinon une nouvelle ressource est créée. Lorsque la ressource cible existe, elle est écrasée par un nouveau corps complet. C'est-à-dire que la méthode HTTP.PUT est utilisée pour créer ou mettre à jour une ressource.

la méthode http put est comme une requête MERGE en SQL qui insère ou met à jour un enregistrement selon que cet enregistrement existe ou non.

La requête PUT est idempotente, c’est-à-dire qu’une double demande répétée mettrait à jour l’enregistrement existant (aucun nouvel enregistrement créé). Dans la méthode PUT, l'ID de la ressource est décidé par le client et indiqué dans l'URL de la demande.

Exemple: Utilisez la méthode PUT pour mettre à jour un utilisateur ou une commande existants.

PATCH

Une méthode HTTP.PATCH est utilisée pour les modifications partielles d’une ressource, par exemple les mises à jour delta.

la méthode de correctif http est semblable à une requête UPDATE dans SQL qui définit ou met à jour les colonnes sélectionnées uniquement et non la ligne entière.

Exemple: vous pouvez utiliser la méthode PATCH pour mettre à jour le statut de la commande.

PATCH/api/utilisateurs/40450236/order/10234557

Corps de la demande: {status: 'Delivered'}

0
user8640104