PATCH

Die PATCH HTTP-Methode wendet teilweise Änderungen auf eine Ressource an.

PATCH ist in gewisser Weise analog zum "Update"-Konzept, das in CRUD zu finden ist (im Allgemeinen unterscheidet sich HTTP von CRUD, und die beiden sollten nicht verwechselt werden).

Im Vergleich zu PUT dient ein PATCH als eine Reihe von Anweisungen zur Änderung einer Ressource, während PUT einen vollständigen Ersatz der Ressource darstellt. Eine PUT-Anfrage ist immer idempotent (das wiederholte Ausführen derselben Anfrage führt dazu, dass die Ressource im gleichen Zustand bleibt), während eine PATCH-Anfrage nicht immer idempotent ist. Wenn eine Ressource beispielsweise einen autoinkrementierenden 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 Auswirkungen auf andere Ressourcen haben.

Ein Server kann die Unterstützung für PATCH ankündigen, indem er es der Liste in den Antwort-Headern Allow oder Access-Control-Allow-Methods (für CORS) hinzufügt. Ein weiteres implizites Zeichen dafür, dass PATCH unterstützt wird, ist der Header Accept-Patch (normalerweise nach einer OPTIONS-Anfrage an eine 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
Cache-fähig Nur wenn Frische-Informationen enthalten sind
Erlaubt in HTML-Formularen Nein

Syntax

http
PATCH <request-target>["?"<query>] HTTP/1.1
<request-target>

Identifiziert die Zielressource der Anfrage, wenn sie mit den im Host Header bereitgestellten Informationen kombiniert wird. Dies ist ein absoluter Pfad (z.B. /path/to/file.html) bei Anfragen an einen Ursprungsserver und eine absolute URL bei Anfragen an Proxys (z.B. http://www.example.com/path/to/file.html).

<query> Optional

Eine optionale Abfragekomponente, der ein Fragezeichen ? vorangestellt ist. Häufig verwendet, um identifizierende Informationen in Form von key=value Paaren zu übermitteln.

Beispiele

Erfolgreiche Änderung einer Ressource

Angenommen, es gibt eine Ressource auf dem Server, die einen Benutzer mit einer numerischen ID von 123 im folgenden Format darstellt:

json
{
  "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, ändert ein PATCH nur bestimmte Teile der Ressource. Diese Anfrage aktualisiert das status-Feld:

http
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 einen der erfolgreichen Antwortstatuscodes angezeigt werden. In diesem Beispiel wird ein 204 No Content verwendet, da es nicht notwendig ist, einen Body mit zusätzlichem Kontext zur Operation zu übermitteln. Ein ETag wird bereitgestellt, damit der Anrufer in Zukunft eine bedingte Anfrage durchführen kann:

http
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 trifft "Browser-Kompatibilität" nicht zu. Entwickler können diese Anfragemethode mit fetch() festlegen.

Siehe auch