15 Punkte von GN⁺ 2024-10-20 | 1 Kommentare | Auf WhatsApp teilen
  • JSON Patch ist ein in RFC 6902 definiertes Standardformat, das beschreibt, wie JSON-Dokumente geändert werden können.
    • Es bietet eine einfache und effiziente Möglichkeit, Ressourcen über HTTP teilweise zu aktualisieren.
    • Während bei den bisherigen Methoden PUT und POST die gesamten Daten übertragen werden mussten, erlaubt die Methode PATCH partielle Updates.
  • JSON Patch bietet eine klare und prägnante Darstellung von Änderungen an JSON-Dokumenten, reduziert dadurch die Bandbreitennutzung und verbessert die Performance von Webanwendungen.

Funktionsweise von JSON Patch

  • JSON Patch arbeitet als Folge atomarer Operationen auf einem JSON-Dokument.
  • Jede Operation enthält die Felder op und path und führt eine Aktion an einer bestimmten Stelle im Dokument aus.
  • So fügt etwa die Operation add ein neues Feld hinzu, während replace ein bestehendes Feld ersetzt.

JSON Pointer

  • JSON Patch verwendet JSON Pointer, um bestimmte Teile eines Dokuments zu identifizieren.
  • JSON Pointer ist eine durch Schrägstriche (/) getrennte Token-Zeichenfolge, die die hierarchische Struktur des Dokuments beschreibt.
  • Zum Beispiel identifiziert /user/name das Feld name innerhalb des Objekts user.

Vor- und Nachteile von JSON Patch

Vorteile

  1. Präzision: Einzelne Elemente in komplexen Strukturen lassen sich gezielt und exakt ändern.
  2. Effizienz: Es werden nur Änderungen übertragen, wodurch Datenmenge und Latenz minimiert werden.
  3. Atomarität: Bei einem Fehler kann die gesamte Operation zurückgerollt werden.
  4. Idempotenz: Sichere Wiederholungsversuche sind möglich.
  5. Komplexe Operationen: Elemente können verschoben oder kopiert werden.
  6. Validierung: APIs können eingehende Patches validieren und dadurch fehlerhafte Requests reduzieren.
  7. Standardbasiert: Lässt sich leicht mit verschiedenen Clients und Servern integrieren.
  8. Zugriffskontrolle auf Feldebene: Änderungen können sehr granular eingeschränkt werden.
  9. Batch-Verarbeitung: Mehrere Änderungen können in einer einzigen Anfrage verarbeitet werden.

Nachteile

  1. Komplexität: Der Umgang mit komplexen JSON-Strukturen kann schwierig sein.
  2. Wartungsaufwand: Mit der Weiterentwicklung einer API können Pfade ungültig werden.
  3. Erschwertes Debugging: Wenn mehrere Operationen gemeinsam gebündelt werden, ist die Nachverfolgung schwieriger.
  4. Erhalt der Objektreihenfolge: Verschiebeoperationen garantieren nicht die Reihenfolge von Objekten.
  5. Sicherheitsprobleme: Eine fehlerhafte Verarbeitung von Requests kann zu Schwachstellen führen.

Beispiele für JSON-Patch-Operationen

  • Add: Fügt ein neues Feld hinzu.
  • Remove: Entfernt ein bestehendes Feld.
  • Replace: Ersetzt ein bestehendes Feld durch einen neuen Wert.
  • Move: Verschiebt ein Element an eine andere Position.
  • Copy: Kopiert ein Element an eine andere Position.
  • Test: Prüft, ob an einem bestimmten Pfad ein Wert gesetzt ist.

JSON Patch in Tools und Bibliotheken

  • In verschiedenen Programmiersprachen gibt es Bibliotheken mit Unterstützung für JSON Patch, etwa fast-json-patch, python-json-patch oder die JsonPatch library in .NET.
  • Ein hervorragendes Tool zum Erlernen von JSON Patch ist jsonpatch.me, ein kostenloser Online-Dienst zum Ausführen von JSON-Patch-Befehlen. Eine API gibt es ebenfalls.

Zusammenfassung von GN⁺

  • JSON Patch ist ein leistungsfähiges Werkzeug, um partielle Updates an JSON-Dokumenten effizient durchzuführen.
  • Der Umgang mit komplexen JSON-Strukturen kann zwar schwierig sein, doch mit verschiedenen Bibliotheken und Tools lässt sich das bewältigen.
  • JSON Patch ist nützlich, um die Datenmenge bei der Übertragung zu verringern und die Performance von Webanwendungen zu verbessern.
  • Alternativen wie JSON Merge Patch können ebenfalls in Betracht gezogen werden, und der Einsatz von JSON Patch kann die Effizienz bei der API-Entwicklung steigern.

1 Kommentare

 
GN⁺ 2024-10-20
Hacker-News-Kommentare
  • JSON Patch ist so konzipiert, dass es jedes JSON-Dokument ändern kann, und wirkt dadurch komplex. Wenn man die Datenmenge leicht einschränkt, lassen sich Dokumente viel einfacher patchen. Bei Firebase kann man zum Beispiel keine null-Werte speichern; wenn man einen Wert auf null setzt, bedeutet das Löschen. Solche einfachen Einschränkungen machen PATCH leicht implementierbar. Dass man außer „null bedeutet Löschen“ nichts Neues lernen muss, ist eine großartige Eigenschaft der API.

  • Die Verwendung von / als Trennzeichen in JSON ist eine seltsame Wahl. Da JSON eine Teilmenge von JS ist, hätte ich . als Trennzeichen erwartet. Wenn ich / sehe, wirkt die Spezifikation wie etwas, das Backend-Leute geschrieben haben, vermutlich um Pfade als URLs darzustellen und die Mehrdeutigkeit zwischen relativen und absoluten Pfaden zu lösen.

  • Ich finde, Pfade sollten Arrays und keine Strings sein. Sonst muss man / in Schlüsseln escapen und den Pfad-String parsen. Das macht es unmöglich, beliebige JSON-Dokumente zu verarbeiten.

  • Ich habe JSON Patch einmal verwendet, als Hack, um schnell ein unerwartetes Problem zu lösen. Wir hatten ein Web-Interface gebaut, damit Auftragnehmer im Ausland Textdaten auf Wortebene annotieren konnten. Eigentlich sollten die Daten in kleinen Chunks annotiert werden, wurden dann aber dem gesamten Dokument zugewiesen, wodurch die Annotationen nicht gespeichert wurden. Ich entdeckte JSON Patch und änderte den Upload-Code so, dass nur noch Patches verwendet wurden.

  • Für die Pfadangabe in JSON Patch braucht es eine standardisierte Syntax, mit der sich Elemente in Arrays nicht über ihren Index, sondern über identifizierende Schlüssel-Wert-Paare auswählen lassen. Das ist besonders wichtig, wenn Elemente hinzugefügt werden oder wenn man Unterschiede zu JSON-Elementen aus früheren Versionen analysiert.

  • Eine der Stärken von JSON Patch ist seine Idempotenz. JSON-Patch-Operationen lassen sich sicher wiederholen, ohne unbeabsichtigte Nebenwirkungen. Dass man jedoch keine Elemente zu Arrays hinzufügen kann, hat mich überrascht.

  • Es funktioniert ähnlich wie MongoDB-Update-Queries. Ich frage mich, ob man diese Update-Sprache auch auf lokalen Dateien verwenden kann, ohne dafür eine komplette MongoDB laufen zu lassen.

  • Ein Vergleich zwischen JSONDiffpatch und JSON Patch wäre nötig. JSONDiffpatch funktioniert gut im Browser sowie in Node/Cloudflare Workers.

  • Ich hatte Schwierigkeiten, externe Partner davon zu überzeugen, JSON Patch zu lernen. Wir haben es in einer kundenorientierten API verwendet und viel Aufwand betrieben, damit die Nutzer es verstehen und übernehmen.

  • Die JSON-Pointer-Spezifikation fühlt sich sehr „URL-artig“ an, sodass man eine Meta-JSON-Syntax vielleicht überspringen könnte. „test“ und „copy“ sind Besonderheiten der JSON-Patch-Spezifikation, und auch „Transaktionen“, die mehrere Änderungen auf einmal ausführen, sind möglich.