JSON Patch: API Daten intelligent aktualisieren

INEZA Felin-Michel

INEZA Felin-Michel

1 September 2025

JSON Patch: API Daten intelligent aktualisieren

Sie haben eine moderne API entwickelt. GET ruft Daten ab, POST erstellt neue Ressourcen – soweit so gut. Aber wenn es um die Aktualisierung von Daten geht, wird es knifflig.

Angenommen, ein Benutzer möchte nur seine E-Mail-Adresse ändern. Müssen Sie ihn wirklich das gesamte Benutzerprofil erneut senden lassen? Das ist umständlich, ineffizient und fehleranfällig – insbesondere bei langsamen Verbindungen oder widersprüchlichen Updates.

Es gibt einen besseren Weg: JSON Patch.
Anstatt das gesamte Objekt zu senden, senden Sie nur die Änderungen. Stellen Sie es sich so vor, als würden Sie einem Schneider eine Liste von Änderungen geben, anstatt den ganzen Anzug neu anfertigen zu lassen.

Da JSON zur universellen Sprache für APIs geworden ist, bietet JSON Patch eine leichte, elegante Lösung für partielle Updates.

Natürlich erfordert das Entwerfen und Testen von APIs mit JSON Patch die richtigen Tools. Hier kommt Apidog ins Spiel. Es ermöglicht Ihnen, JSON Patch-Anfragen einfach zu erstellen, zu testen und zu validieren – so wissen Sie, dass Ihre Updates wie beabsichtigt funktionieren, bevor Sie eine einzige Zeile Code schreiben. Das Beste daran ist, dass es kostenlos heruntergeladen und noch heute damit experimentiert werden kann.

💡
Möchten Sie ein großartiges API-Testtool, das schöne API-Dokumentation generiert?

Möchten Sie eine integrierte All-in-One-Plattform, damit Ihr Entwicklerteam mit maximaler Produktivität zusammenarbeiten kann?

Apidog erfüllt all Ihre Anforderungen und ersetzt Postman zu einem viel günstigeren Preis!
Button

Als Nächstes wollen wir aufschlüsseln, was JSON Patch ist, wie es funktioniert und warum es Teil Ihres nächsten Projekts sein sollte.

Das Problem: Die „blinde“ PUT-Anfrage

Um zu verstehen, warum JSON Patch so nützlich ist, müssen wir zunächst das Problem verstehen, das es löst. Traditionell erfolgt die Aktualisierung einer Ressource in einer RESTful API mit der HTTP-Methode PUT.

Eine PUT-Anfrage soll idempotent sein (dieselbe Anfrage mehrmals zu stellen hat denselben Effekt wie einmal) und ersetzt typischerweise die gesamte Ressource unter der Ziel-URL durch die neue Darstellung, die im Anfragetext bereitgestellt wird.

Stellen wir uns eine Benutzerprofilressource vor:

GET /users/123

{
  "id": 123,
  "username": "johndoe",
  "email": "john.old@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "age": 30,
  "accountStatus": "active",
  "preferences": {
    "theme": "light",
    "notifications": true
  },
  "signUpDate": "2023-01-15"
}

Wenn John nun nur seine E-Mail-Adresse ändern möchte, würde eine typische PUT-Anfrage so aussehen:

PUT /users/123

{
  "id": 123,
  "username": "johndoe",
  "email": "john.new@example.com", // The changed field
  "firstName": "John",
  "lastName": "Doe",
  "age": 30,
  "accountStatus": "active",
  "preferences": {
    "theme": "light",
    "notifications": true
  },
  "signUpDate": "2023-01-15"
}

Sehen Sie das Problem? Wir mussten jedes einzelne Feld zurücksenden, obwohl sich 99 % der Daten nicht geändert haben. Dieser Ansatz hat mehrere Nachteile:

  1. Erhöhter Bandbreitenverbrauch: Wir senden viele unnötige Daten über das Netz. Bei großen Ressourcen kann dies zu einer erheblichen Leistungseinbuße führen, insbesondere in mobilen Netzwerken.
  2. Höheres Konfliktrisiko: Wenn ein anderer Prozess das Feld age aktualisiert, während John seine email bearbeitet, könnte Johns PUT-Anfrage versehentlich das neue Alter mit dem alten Wert überschreiben, den er gesendet hat.
  3. Komplexität für den Client: Die Client-Anwendung muss zuerst die gesamte Ressource GETen, das spezifische Feld ändern und dann das Ganze wieder PUTen. Dies sind mehrere Schritte und erfordert, dass der Client den gesamten Zustand verwaltet.

Hier kommt die HTTP-Methode PATCH zur Rettung.

Die Lösung: Einführung von HTTP PATCH und JSON Patch

Die HTTP-Methode PATCH wurde eingeführt, um partielle Änderungen an einer Ressource zu ermöglichen. Im Gegensatz zu PUT, das die gesamte Ressource ersetzt, wendet PATCH eine Reihe von Änderungen an der Ressource an.

Aber es gibt einen Haken: Der HTTP-Standard definiert nicht, wie das Format dieser „Änderungen“ aussehen soll. Sie könnten Ihr eigenes erfinden. Sie könnten so etwas senden wie:

{ "op": "change_email", "value": "new@example.com" }

Aber dies wäre benutzerdefiniert, nicht standardisiert, und andere Entwickler müssten Ihre spezifische Sprache lernen.

Diese Lücke füllt JSON Patch. JSON Patch (definiert in RFC 6902) ist ein standardisiertes Format zur Angabe von Änderungen, die auf ein JSON-Dokument angewendet werden sollen. Es bietet eine klare, eindeutige Sprache, um genau zu beschreiben, wie ein JSON-Dokument geändert werden soll.

Wenn Sie die HTTP-Methode PATCH mit einem als JSON Patch-Dokument formatierten Body kombinieren, haben Sie eine leistungsstarke, standardbasierte Methode, um partielle Updates durchzuführen.

Wie JSON Patch funktioniert: Die Grundlagen

Ein JSON Patch-Dokument ist immer ein JSON-Array. Jedes Element im Array ist ein Operationsobjekt. Diese Operationen werden der Reihe nach auf das Zieldokument angewendet, und der gesamte Patch ist atomar, was bedeutet, dass, wenn eine einzelne Operation fehlschlägt, der gesamte Patch abgebrochen wird und das Dokument unverändert bleibt.

Jedes Operationsobjekt hat ein obligatorisches op-Element (kurz für „Operation“), das die auszuführende Aktion angibt. Die gängigsten Operationen sind add, remove, replace, move und copy.

Betrachten wir das vorherige Beispiel, in dem John seine E-Mail-Adresse ändert. Mit JSON Patch wird die Anfrage dramatisch einfacher:

PATCH /users/123

[
  { "op": "replace", "path": "/email", "value": "john.new@example.com" }
]

Das ist alles! Wir senden eine einzige Operation: „Ersetze den Wert unter dem Pfad ‚/email‘ durch diesen neuen Wert.“ Die Anfrage ist klein, klar und absichtsgesteuert. Wir berühren kein anderes Feld.

Verständnis der path-Eigenschaft

Die Eigenschaft path ist ein JSON Pointer (RFC 6901), ein String, der eine Slash-basierte Syntax verwendet, um durch das JSON-Dokument zu dem spezifischen Wert zu navigieren, den Sie manipulieren möchten.

Diese Syntax ist leistungsstark für die Navigation durch verschachtelte JSON-Strukturen.

JSON Patch vs. JSON Merge Patch

Entwickler verwechseln oft JSON Patch (RFC 6902) mit JSON Merge Patch (RFC 7386). Lassen Sie uns das klarstellen.

JSON Patch:

JSON Merge Patch:

Kurz gesagt:

Die JSON Patch-Operationen

Lassen Sie uns die gängigsten Operationen anhand von Beispielen aufschlüsseln. Wir verwenden dasselbe Benutzerprofil als unser Zieldokument.

1. Die add-Operation

Die add-Operation wird verwendet, um einen neuen Wert in ein Objekt oder Array einzufügen.

Eine neue Eigenschaft zu einem Objekt hinzufügen:

{ "op": "add", "path": "/twitterHandle", "value": "@johndoe" }

Dies fügt dem Benutzerobjekt ein neues Feld twitterHandle hinzu.

Ein Element zu einem Array hinzufügen (an einem bestimmten Index):

Stellen Sie sich vor, der Benutzer hat ein "hobbies"-Array: ["reading", "cycling"].

{ "op": "add", "path": "/hobbies/1", "value": "hiking" }

Dies fügt „hiking“ an Index 1 ein, was zu ["reading", "hiking", "cycling"] führt. Um am Ende des Arrays hinzuzufügen, können Sie /- verwenden: { "op": "add", "path": "/hobbies/-", "value": "hiking" }.

2. Die remove-Operation

Die remove-Operation löscht einen Wert an einem angegebenen Speicherort.

Eine Eigenschaft aus einem Objekt entfernen:

{ "op": "remove", "path": "/age" }

Dies entfernt das gesamte Feld age aus dem Benutzerobjekt.

Ein Element aus einem Array entfernen:

{ "op": "remove", "path": "/hobbies/0" }

Dies entfernt das erste Element (Index 0) aus dem hobbies-Array.

3. Die replace-Operation

Die replace-Operation ist im Wesentlichen eine Kombination aus remove und add am selben Pfad. Sie ersetzt den vorhandenen Wert an einem Speicherort durch einen neuen Wert. Unser E-Mail-Beispiel war ein klassisches replace.

Die Theme-Einstellung eines Benutzers ändern:

{ "op": "replace", "path": "/preferences/theme", "value": "dark" }

4. Die move-Operation

Die move-Operation entfernt einen Wert von einem Speicherort und fügt ihn an einem anderen hinzu.

Einen Wert von einer Eigenschaft zu einer anderen verschieben:

{ "op": "move", "from": "/firstName", "path": "/first_name" }

Dies würde den Wert von firstName in eine neue Eigenschaft namens first_name verschieben und die alte Eigenschaft firstName entfernen.

5. Die copy-Operation

Die copy-Operation kopiert einen Wert von einem Speicherort zu einem anderen. Der ursprüngliche Wert bleibt unverändert.

Eine Sicherungskopie einer Einstellung erstellen:

{ "op": "copy", "from": "/preferences/theme", "path": "/backupTheme" }

Dies kopiert den aktuellen Theme-Wert in ein neues Feld backupTheme.

6. Die test-Operation

Dies ist eine Sicherheitsfunktion. Die test-Operation überprüft, ob ein Wert an einem Speicherort einem angegebenen Wert entspricht. Wenn der Test fehlschlägt, wird der gesamte Patch abgebrochen. Dies ist unglaublich nützlich, um Konflikte zu vermeiden (optimistisches Sperren).

Sicherstellen, dass niemand sonst die E-Mail geändert hat, bevor sie aktualisiert wird:

[
  { "op": "test", "path": "/email", "value": "john.old@example.com" },
  { "op": "replace", "path": "/email", "value": "john.new@example.com" }
]

Wenn die aktuelle email nicht "john.old@example.com" ist (vielleicht hat ein anderer Prozess sie bereits geändert), schlägt die test-Operation fehl, und das replace findet niemals statt. Dies stellt sicher, dass Ihr Update auf dem neuesten bekannten Zustand basiert.

Warum JSON Patch verwenden? Die Vorteile

  1. Effizienz: Der offensichtlichste Vorteil. Sie senden nur die Änderungen, wodurch die Nutzlastgröße erheblich reduziert und die Leistung verbessert wird.
  2. Parallelitätskontrolle: Die test-Operation bietet einen integrierten Mechanismus für optimistisches Sperren, der Ihnen hilft, verlorene Updates und Race Conditions zu vermeiden.
  3. Atomarität: Der Alles-oder-Nichts-Charakter einer Patch-Anwendung stellt sicher, dass Ihre Daten konsistent bleiben. Wenn die fünfte Operation in einem Zehn-Operationen-Patch fehlschlägt, werden die ersten vier zurückgesetzt.
  4. Klarheit und Absicht: Der Anfragetext beschreibt klar die Absicht der Änderung („E-Mail ersetzen“, „Hobby hinzufügen“) und nicht nur einen neuen Zustand. Dies macht Protokolle lesbarer und das Debugging einfacher.
  5. Standardisierung: Es ist ein IETF-Standard (RFC 6902). Andere Entwickler werden ihn erkennen, und viele Bibliotheken und Frameworks in verschiedenen Programmiersprachen bieten integrierte Unterstützung für das Parsen und Anwenden von JSON Patch-Dokumenten.

Häufige Fallstricke und Fehler bei JSON Patch

Obwohl JSON Patch leistungsstark ist, stoßen Entwickler oft auf folgende Probleme:

Warum APIs JSON Patch verwenden

APIs lieben JSON Patch, weil es:

Zum Beispiel unterstützt die GitHub-API JSON Patch zum effizienten Bearbeiten von Repository-Metadaten.

JSON Patch in REST APIs

In RESTful APIs wird JSON Patch oft mit der HTTP-PATCH-Methode verwendet.

PATCH vs. PUT:

Bei JSON Patch ist der Content-Type:

application/json-patch+json

Dies teilt dem Server mit, dass der Body ein JSON Patch-Dokument enthält.

JSON Patch in GraphQL und anderen Protokollen

Obwohl JSON Patch hauptsächlich in REST APIs verwendet wird, ist es auch relevant für:

Wie JSON Patch die Effizienz verbessert

Stellen Sie sich eine mobile App vor, die Benutzerprofile synchronisiert. Anstatt für jedes kleine Update eine 2 MB große JSON-Datei erneut hochzuladen, kann die App einfach eine kleine Patch-Anfrage senden.

Das bedeutet:

Herausforderungen und Überlegungen

JSON Patch ist leistungsstark, aber nicht ohne seine Komplexitäten.

  1. Komplexe Implementierung auf dem Server: Das korrekte Anwenden eines Patches auf dem Server ist komplexer als das einfache Akzeptieren eines neuen JSON-Objekts. Sie müssen jede Operation validieren, Zeiger auf nicht existierende Pfade angemessen behandeln und sicherstellen, dass die gesamte Sequenz atomar angewendet wird. Glücklicherweise verfügen die meisten modernen Web-Frameworks über Bibliotheken, die dies für Sie übernehmen (z. B. json-patch für Node.js, jsonpatch für Python, JsonPatchDocument in .NET).
  2. Fehlerpotenzial: Ein fehlerhaftes Patch-Dokument oder ein ungültiger Zeiger (z. B. der Versuch, ein nicht existierendes Feld zu replacen) führt zu einem Fehler. Ihre API muss diese elegant behandeln und klare Fehlermeldungen zurückgeben (üblicherweise ein 422 Unprocessable Entity oder 400 Bad Request).
  3. Keine Patentlösung: Für sehr einfache Ressourcen mag ein PUT immer noch einfacher sein. JSON Patch glänzt, wenn Ihre Ressourcen groß sind oder wenn Sie komplexe, bedingte Updates unterstützen müssen.

JSON Patch Endpunkt mit Apidog testen

Das manuelle Testen von JSON Patch kann frustrierend sein. Hier erweist sich ein ausgeklügeltes API-Tool als unschätzbar wertvoll. Apidog, eine All-in-One-Plattform für die API-Entwicklung, kann hier eine große Hilfe sein:

Button

Beispiel-Workflow in Apidog:

  1. Erstellen Sie eine neue Anfrage.
  2. Setzen Sie die Methode auf PATCH.
  3. Fügen Sie Content-Type: application/json-patch+json hinzu.
  4. Geben Sie Ihr JSON Patch-Array ein.
  5. Senden Sie und überprüfen Sie die Ergebnisse sofort.

Durch die Verwendung von Apidog müssen Sie nicht mehr raten, ob Ihr Patch korrekt ist, sondern wissen, dass er richtig erstellt wurde, sodass Sie JSON Patch APIs selbstbewusst implementieren und nutzen und JSON Patch wie ein Profi testen können.

JSON Patch Bewährte Verfahren

Um JSON Patch effektiv zu nutzen:

  1. Validieren Sie Ihre JSON Patch-Dokumente vor dem Senden.
  2. Verwenden Sie Testoperationen, wenn Konsistenz wichtig ist.
  3. Halten Sie Patches klein für mehr Effizienz.
  4. Dokumentieren Sie Ihre API klar, wenn Sie JSON Patch verwenden.
  5. Verwenden Sie Tools wie Apidog, um das Testen zu optimieren.

Fazit: Eine effizientere API-Standardisierung

Was ist also JSON Patch?

Es ist eine standardisierte Methode, Änderungen an JSON-Dokumenten mithilfe von Operationen wie Hinzufügen, Entfernen und Ersetzen zu beschreiben. Anstatt vollständige Objekte zu senden, können Sie nur die Änderungen senden, wodurch Ihre APIs effizienter, zuverlässiger und flexibler werden.

JSON Patch verändert die Art und Weise, wie wir über die Aktualisierung von Daten über APIs denken. Es führt uns vom stumpfen Instrument des vollständigen Dokumentersatzes zur Präzision chirurgischer Änderungen. Durch die Annahme dieses Standards bauen wir APIs, die effizienter, weniger konfliktträchtig und klarer in ihrer Absicht sind.

Obwohl es auf der Serverseite etwas mehr vorausschauendes Denken erfordert, sind die Vorteile für Client-Anwendungen und die Netzwerkleistung erheblich. Wenn Sie das nächste Mal einen Update-Endpunkt entwerfen, widerstehen Sie dem Standard-PUT und fragen Sie sich: „Könnte dies eine Aufgabe für PATCH sein?“

Für Entwickler ist das Verständnis von JSON Patch der Schlüssel zur Arbeit mit modernen APIs, insbesondere bei der Handhabung partieller Updates. Und mit Tools wie Apidog können Sie JSON Patch-Anfragen problemlos testen, validieren und debuggen.

Button

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen