PATCH
Anforderungen beschreiben eine Gruppe von Vorgängen, die auf eine Ressource angewendet werden sollen. Wenn Sie dieselbe Gruppe von Vorgängen zweimal auf dieselbe Ressource anwenden, ist das Ergebnis möglicherweise nicht dasselbe. Dies liegt daran, dass Sie die Operationen selbst definieren können. Mit anderen Worten, Sie müssen die Zusammenführungsregeln definieren .
Denken Sie daran, dass eine PATCH
Anfrage zum Patchen von Ressourcen in vielen verschiedenen Formaten verwendet werden kann, nicht nur für JSON.
Eine PATCH
Anfrage kann also idempotent sein, wenn Sie die Zusammenführungsregeln als idempotent definieren .
Idempotentes Beispiel:
// Original resource
{
name: 'Tito',
age: 32
}
// PATCH request
{
age: 33
}
// New resource
{
name: 'Tito',
age: 33
}
Nicht idempotentes Beispiel:
// Original resource
{
name: 'Tito',
age: 32
}
// PATCH request
{
$increment: 'age'
}
// New resource
{
name: 'Tito',
age: 33
}
Im zweiten Beispiel habe ich eine "Mongo-ähnliche" Syntax verwendet, die ich für das Inkrementieren eines Attributs erfunden habe. Dies ist eindeutig nicht idempotent, da das mehrmalige Senden derselben Anfrage jedes Mal zu unterschiedlichen Ergebnissen führen würde.
Jetzt fragen Sie sich vielleicht, ob die Verwendung einer solchen Syntax gültig ist. Nach Standards ist es:
Der Unterschied zwischen den Anforderungen PUT und PATCH spiegelt sich in der Art und Weise wider, wie der Server die eingeschlossene Entität verarbeitet, um die durch den Anforderungs-URI angegebene Ressource zu ändern. In einer PUT-Anforderung wird die eingeschlossene Entität als geänderte Version der auf dem Ursprungsserver gespeicherten Ressource betrachtet, und der Client fordert das Ersetzen der gespeicherten Version an. Mit PATCH enthält die beigefügte Entität jedoch eine Reihe von Anweisungen, die beschreiben, wie eine Ressource, die sich derzeit auf dem Ursprungsserver befindet, geändert werden sollte, um eine neue Version zu erstellen.
Und vielleicht fragen Sie sich auch, ob es sich lohnt , PATCH
Anfragen auf diese Weise zu verwenden, und viele Leute sind der Meinung , dass dies nicht der Fall ist. Hier finden Sie eine gute Antwort mit vielen Kommentaren zu diesem Problem.
{"name": "bendjamin franklin"}