PATCH
Die PATCH
HTTP-Methode wendet partielle Änderungen auf eine Ressource an.
PATCH
ist in gewisser Weise analog zum Konzept des "Update", das im CRUD zu finden ist (im Allgemeinen ist HTTP anders als CRUD, und die beiden sollten nicht verwechselt werden).
Im Vergleich zur PUT
dient ein PATCH
als Satz von Anweisungen zur Modifizierung einer Ressource, während PUT
einen vollständigen Ersatz der Ressource darstellt.
Eine PUT
-Anfrage ist immer idempotent (wiederholtes Senden derselben Anfrage führt dazu, dass die Ressource im gleichen Zustand bleibt), während eine PATCH
-Anfrage nicht immer idempotent sein muss.
Beispielsweise, wenn eine Ressource einen automatisch inkrementierenden Zähler enthält, überschreibt eine PUT
-Anfrage den Zähler (da sie die gesamte Ressource ersetzt), aber eine PATCH
-Anfrage möglicherweise nicht.
Wie POST
kann eine PATCH
-Anfrage potenziell Nebeneffekte auf andere Ressourcen haben.
Ein Server kann die Unterstützung für PATCH
anzeigen, indem er es der Liste in den Antwort-Headern Allow
oder Access-Control-Allow-Methods
(für CORS) hinzufügt.
Ein weiteres implizites Indiz dafür, dass PATCH
unterstützt wird, ist der Accept-Patch
-Header (normalerweise nach einer OPTIONS
-Anfrage zu einer Ressource), der die Medientypen auflistet, die der Server in einer PATCH
-Anfrage für eine Ressource verstehen kann.
Anfrage hat einen Body | Ja |
---|---|
Erfolgreiche Antwort hat einen Body | Kann |
Sicher | Nein |
Idempotent | Nein |
Cachefähig | Nur, wenn Frischeinformationen enthalten sind |
Erlaubt in HTML-Formularen | Nein |
Syntax
PATCH <request-target>["?"<query>] HTTP/1.1
<request-target>
-
Identifiziert die Zielressource der Anfrage, wenn kombiniert mit den Informationen, die im
Host
-Header bereitgestellt werden. Dies ist ein absoluter Pfad (z.B./path/to/file.html
) in Anfragen an einen Ursprungsserver und eine absolute URL in Anfragen an Proxys (z.B.http://www.example.com/path/to/file.html
). <query>
Optional-
Eine optionale Abfragekomponente, die durch ein Fragezeichen
?
eingeleitet wird. Wird häufig verwendet, um identifizierende Informationen in Form vonkey=value
-Paaren zu tragen.
Beispiele
Erfolgreiches Modifizieren einer Ressource
Nehmen Sie an, es gibt eine Ressource auf dem Server, die einen Benutzer mit einer numerischen ID von 123
im folgenden Format darstellt:
{
"firstName": "Example",
"LastName": "User",
"userId": 123,
"signupDate": "2024-09-09T21:48:58Z",
"status": "active",
"registeredDevice": {
"id": 1,
"name": "personal",
"manufacturer": {
"name": "Hardware corp"
}
}
}
Anstatt ein JSON-Objekt zu senden, um eine Ressource vollständig zu überschreiben, modifiziert PATCH
nur bestimmte Teile der Ressource.
Diese Anfrage aktualisiert das status
-Feld:
PATCH /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27
Authorization: Bearer ABC123
{
"status": "suspended"
}
Die Interpretation und Authentifizierung der PATCH
-Anfrage hängen von der Implementierung ab.
Der Erfolg kann durch jeden der erfolgreichen Antwortstatuscodes angezeigt werden.
In diesem Beispiel wird ein 204 No Content
verwendet, da es nicht nötig ist, einen Body mit zusätzlichem Kontext über die Operation zu übertragen.
Ein ETag
wird bereitgestellt, damit der Anrufer in Zukunft eine konditionale Anfrage durchführen kann:
HTTP/1.1 204 No Content
Content-Location: /users/123
ETag: "e0023aa4f"
Spezifikationen
Specification |
---|
RFC 5789 |
Browser-Kompatibilität
Der Browser verwendet die PATCH
-Methode nicht für vom Benutzer initiierte Aktionen, daher gilt die "Browser-Kompatibilität" nicht.
Entwickler können diese Anfragemethode mit fetch()
setzen.
Siehe auch
- HTTP-Anfragemethoden
- HTTP-Antwortstatuscodes
- HTTP-Header
204
Allow
,Access-Control-Allow-Methods
HeaderAccept-Patch
– spezifiziert die Patch-Dokumentformate, die vom Server akzeptiert werden