wake-up-neo.net

Was ist der Hauptunterschied zwischen PATCH- und PUT-Anforderung?

Ich verwende eine PUT-Anforderung in meiner Rails-Anwendung. Nun wurde ein neues HTTP-Verb, PATCH, von Browsern implementiert. Ich möchte also wissen, was der Hauptunterschied zwischen PATCH- und PUT-Anforderungen ist und wann wir die eine oder andere verwenden sollten. 

139
user3276063

HTTP-Verben sind wahrscheinlich eines der kryptischsten Dinge im HTTP-Protokoll. Sie existieren, und es gibt viele, aber warum gibt es sie?

Rails scheint viele Verben unterstützen zu wollen und einige Verben hinzuzufügen, die von Webbrowsern nicht nativ unterstützt werden.

Hier ist eine vollständige Liste der http-Verben: http://annevankesteren.nl/2007/10/http-methods

Dort der HTTP-Patch vom offiziellen RFC: https://datatracker.ietf.org/doc/rfc5789/?include_text=1

Die Methode PATCH fordert an, dass eine Reihe von Änderungen in .__ beschrieben wird. Die Anforderungsentität muss auf die Ressource angewendet werden, die durch die Anforderung -.__ identifiziert wurde. URI. Die Änderungen werden in einem Format dargestellt, das als "Patch Document" bezeichnet wird und durch einen Medientyp identifiziert wird. Wenn der Request-URI nicht auf eine vorhandene Ressource verweisen, erstellt der Server DARF eine neue Ressource abhängig vom Typ des Patch-Dokuments (ob es sich um eine logische Änderung einer __-Ressource handelt) und Berechtigungen usw.

Der Unterschied zwischen den Anforderungen PUT und PATCH spiegelt sich in der wie der Server die eingeschlossene Entität verarbeitet, um die Ressource zu ändern identifiziert durch die Request-URI. In einer PUT -Anforderung wird die eingeschlossene Entität wird als modifizierte Version der Ressource betrachtet, die in der .__ gespeichert ist. Origin-Server, und der Client fordert an, dass die gespeicherte Version .__ ist. ersetzt Mit PATCH enthält die eingeschlossene Entität jedoch eine Menge von Anweisungen, die beschreiben, wie sich eine Ressource derzeit im .__ befindet. Der Origin-Server sollte geändert werden, um eine neue Version zu erstellen. Das PATCH Die Methode wirkt sich auf die durch Request-URI angegebene Ressource und auch auf .__ aus. KANN Nebenwirkungen auf andere Ressourcen haben; neue Ressourcen können .__ sein. erstellt oder bestehende durch die Anwendung eines PATCH geändert.

Soweit ich weiß, wird das Verb PATCH nicht wie in Rails-Anwendungen verwendet. Wenn ich das verstehe, sollte das RFC-Patch-Verb verwendet werden, um Patch-Anweisungen zu senden, z Unterschied zwischen zwei Dateien. Anstatt die gesamte Entität erneut zu senden, senden Sie einen Patch, der viel kleiner sein könnte, als die gesamte Entität erneut zu senden.

Stellen Sie sich vor, Sie möchten eine riesige Datei bearbeiten. Sie bearbeiten 3 Zeilen. Anstatt die Datei zurückzuschicken, müssen Sie nur das Diff senden. Auf der positiven Seite kann das Senden einer Patch-Anfrage dazu verwendet werden, Dateien asynchron zusammenzuführen. Ein Versionskontrollsystem kann möglicherweise das Verb PATCH verwenden, um Code remote zu aktualisieren.

Ein anderer möglicher Anwendungsfall bezieht sich etwas auf NoSQL-Datenbanken, es ist möglich, Dokumente zu speichern. Angenommen, wir verwenden eine JSON-Struktur, um Daten vom Server zum Client hin und her zu senden. Wenn wir ein Feld löschen wollen, können wir eine ähnliche Syntax wie in mongodb für $ unset verwenden. Tatsächlich könnte die in mongodb zum Aktualisieren von Dokumenten verwendete Methode wahrscheinlich für die Behandlung von Json-Patches verwendet werden. 

Nehmen wir dieses Beispiel:

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

Wir könnten so etwas haben:

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

Zu guter Letzt können die Menschen zu HTTP-Verben sagen, was sie wollen. Es gibt nur eine Wahrheit und die Wahrheit ist in den RFCs. 

114

Ich verbrachte einige Stunden mit Google und fand die Antwort hier

SETZE => Wenn der Benutzer den gesamten Datensatz oder einen Teil davon aktualisieren kann, verwenden Sie PUT (der Benutzer steuert, was aktualisiert wird).

PUT /users/123/email
[email protected]

PATCH => Wenn der Benutzer nur einen Teildatensatz aktualisieren kann, beispielsweise eine E-Mail-Adresse (die Anwendung steuert, was aktualisiert werden kann), verwenden Sie PATCH.

PATCH /users/123
[description of changes]

Warum Patch

Die PUT-Methode benötigt mehr Bandbreite oder behandelt volle Ressourcen statt für teilweise. Daher wurde PATCH eingeführt, um die Bandbreite zu reduzieren.

Erklärung zu PATCH

PATCH ist eine Methode, die weder sicher noch idempotent ist und vollständige und teilweise Updates sowie Nebeneffekte auf andere Ressourcen ermöglicht.

PATCH ist eine Methode, deren eingeschlossene Entität Anweisungen enthält, die beschreiben, wie eine Ressource, die sich derzeit auf dem Origin-Server befindet, geändert werden muss, um eine neue Version zu erstellen.

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

Hier Weitere Informationen zu Put und Patch

83
Selvamani

stellen 
wenn ich meinenfirst name ändern will, dann sende put anfrage für update 

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

aber hier gibt es ein Problem: put-Anfrage, wenn ich put-Anfrage senden möchte, muss ich alle zwei Parameter senden, nämlich first und last.
Es ist daher obligatorisch, alle Werte erneut zu senden 

patch:
patch Anfrage sagt. Senden Sie nur die data, die Sie update verwenden möchten. Andere Daten werden dadurch nicht beeinflusst oder geändert.
Sie müssen also nicht alle Werte erneut senden. Ich möchte nur meinen Vornamen aktualisieren, so dass ich nur first Name zum Aktualisieren senden muss. 

33
Nazmul Hasan

Der PUT-über-PATCH-Befehl weist beim Aktualisieren Einschränkungen auf. Die Verwendung von PUT erfordert, dass wir alle Attribute angeben, auch wenn wir nur ein Attribut ändern möchten ..__ Wenn wir jedoch die PATCH-Methode verwenden, können wir nur die Felder aktualisieren, die wir benötigen, und es ist nicht erforderlich, alle Felder zu erwähnen. PATCH erlaubt uns nicht, einen Wert in einem Array zu ändern oder ein Attribut oder einen Array-Eintrag zu entfernen.

2
Anand Muhale

PUTundPATCHMethoden sind in ihrer Natur ähnlich, es gibt jedoch einen wesentlichen Unterschied. 

PUT- inPUTrequest, würde die eingeschlossene Entität als modifizierte Version einer Ressource betrachtet, die sich auf dem Server befindet, und sie würde durch diese modifizierte Entität ersetzt.

PATCH- inPATCHrequest, umschlossene Entität enthält den Satz von Anweisungen, wie die Entität, die sich auf dem Server befindet, geändert wird, um eine neuere Version zu erzeugen.

1
Neeraj Kumar

Entsprechend den HTTP-Begriffen ist die PUT-Anforderung genau wie eine Datenbank-Aktualisierungsanweisung .PUT - wird zum Ändern vorhandener Ressourcen verwendet (Previously POSTED). Auf der anderen Seite wird die PATCH-Anforderung verwendet, um einen Teil der vorhandenen Ressource zu aktualisieren.

Zum Beispiel: 

Kundendetails:

// This is just a example.

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

Wann möchten wir den gesamten Datensatz aktualisieren? wir müssen HttpPUTverb verwenden.

sowie:

// Customer Details Updated.

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

Wenn Sie dagegen nur den Teil des Datensatzes und nicht den gesamten Datensatz aktualisieren möchten, gehen Sie für HttpPATCHverb.wie:.

   // Only Customer firstName and lastName is Updated.

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

PUT VS POST:

Wenn Sie PUT request verwenden, müssen wir alle Parameter wie firstName, lastName, email, phoneNumber senden. Where as In patch request sendet nur die Parameter, die wir aktualisieren möchten. Andere Daten werden dadurch nicht geändert oder geändert.

Für weitere Informationen besuchen Sie bitte: https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/

0
Rehan Shah

Put und Patch-Methode sind ähnlich. In Rails gibt es jedoch ein anderes metod Wenn Sie den gesamten Datensatz aktualisieren/ersetzen möchten, müssen Sie die Put-Methode . Verwenden. Wenn Sie einen bestimmten Datensatz aktualisieren möchten, verwenden Sie die Patch-Methode.

0

Hier ist der Unterschied zwischen POST-, PUT- und PATCH-Methoden eines HTTP-Protokolls.

POST

Eine HTTP.POST-Methode erstellt immer eine neue Ressource auf dem Server. Es ist eine nicht idempotente Anforderung, d. H. Wenn der Benutzer zweimal auf dieselben Anforderungen trifft, wird eine weitere neue Ressource erstellt, wenn keine Einschränkung besteht.

die http-Post-Methode ähnelt einer INSERT-Abfrage in SQL, die immer einen neuen Datensatz in der Datenbank erstellt.

Beispiel: Verwenden Sie die POST -Methode, um neue Benutzer, Bestellungen usw. zu speichern, wobei der Back-End-Server die Ressourcen-ID für die neue Ressource festlegt.

STELLEN

In der HTTP.PUT-Methode wird die Ressource zuerst anhand der URL identifiziert. Wenn sie vorhanden ist, wird sie aktualisiert, andernfalls wird eine neue Ressource erstellt. Wenn die Zielressource vorhanden ist, überschreibt sie diese Ressource mit einem vollständig neuen Text. Die HTTP.PUT-Methode wird zum ERSTELLEN oder AKTUALISIEREN einer Ressource verwendet.

die http put-Methode ähnelt einer MERGE-Abfrage in SQL, die einen Datensatz einfügt oder aktualisiert, je nachdem, ob der angegebene Datensatz vorhanden ist.

PUT-Anforderung ist idempotent, d. H. Zweimaliges Schlagen derselben Anforderungen würde die vorhandene Aufzeichnung aktualisieren (es wurde kein neuer Datensatz erstellt). Bei der PUT-Methode wird die Ressourcen-ID vom Client festgelegt und in der Anforderungs-URL angegeben.

Beispiel: Verwenden Sie die PUT-Methode, um vorhandene Benutzer oder Aufträge zu aktualisieren.

PATCH

Eine HTTP.PATCH-Methode wird für teilweise Modifikationen an einer Ressource verwendet, d. H. Delta-Aktualisierungen.

die http-Patch-Methode ähnelt einer UPDATE-Abfrage in SQL, mit der nur ausgewählte Spalten und nicht die gesamte Zeile festgelegt oder aktualisiert werden.

Beispiel: Sie können die PATCH-Methode verwenden, um den Auftragsstatus zu aktualisieren.

PATCH/api/users/40450236/order/10234557

Anfragetext: {Status: 'Geliefert'}

0
user8640104