2. Processing Merge Patch Documents (Verarbeitung von Zusammenführungs-Patch-Dokumenten)
2. Processing Merge Patch Documents (Verarbeitung von Zusammenführungs-Patch-Dokumenten)
JSON-Zusammenführungs-Patch-Dokumente beschreiben beispielhaft eine Reihe von Änderungen, die an einer Zielressource vorgenommen werden sollen. Empfänger von Zusammenführungs-Patch-Dokumenten sind dafür verantwortlich, den Zusammenführungs-Patch mit dem aktuellen Inhalt der Zielressource zu vergleichen, um den spezifischen Satz von Änderungsoperationen zu bestimmen, die auf das Ziel angewendet werden sollen.
Um das Zusammenführungs-Patch-Dokument auf eine Zielressource anzuwenden, realisiert das System die Wirkung der folgenden Funktion, die in Pseudocode beschrieben wird. Für diese Beschreibung heißt die Funktion MergePatch, und sie nimmt zwei Argumente: das Zielressourcendokument und das Zusammenführungs-Patch-Dokument. Das Target-Argument kann ein beliebiger JSON-Wert oder undefined sein. Das Patch-Argument kann ein beliebiger JSON-Wert sein.
define MergePatch(Target, Patch):
if Patch is an Object:
if Target is not an Object:
Target = {} # Ignore the contents and set it to an empty Object
for each Name/Value pair in Patch:
if Value is null:
if Name exists in Target:
remove the Name/Value pair from Target
else:
Target[Name] = MergePatch(Target[Name], Value)
return Target
else:
return Patch
Es gibt einige Dinge zu beachten über die Funktion. Wenn der Patch etwas anderes als ein Objekt ist, wird das Ergebnis immer sein, das gesamte Ziel durch den gesamten Patch zu ersetzen. Außerdem ist es nicht möglich, einen Teil eines Ziels zu patchen, der kein Objekt ist, wie z.B. nur einige der Werte in einem Array zu ersetzen.
Die MergePatch-Operation ist definiert, um auf der Ebene von Datenelementen zu arbeiten, nicht auf der Ebene der textuellen Darstellung. Es wird nicht erwartet, dass die MergePatch-Operation Merkmale auf der Ebene der textuellen Darstellung wie Leerzeichen, Mitgliederreihenfolge, Zahlenpräzision über das hinaus, was in der Implementierung des Ziels verfügbar ist, usw. bewahrt. Darüber hinaus ist, selbst wenn die Zielimplementierung mehrere Name/Wert-Paare mit demselben Namen zulässt, das Ergebnis der MergePatch-Operation auf solchen Objekten nicht definiert.