2009-11-17 16 views
5

Ich habe eine clientseitige Schnittstelle, die es dem Benutzer ermöglicht, mehrere Änderungen an einer baumartigen Gliederung vorzunehmen. Ich denke, dass die Gesamtheit der Datensätze, die diesen Datensatz bilden, insgesamt eine einzige Ressource (/ outlines/39) darstellt, obwohl ihre Teile als separate Ressourcen über verschiedene URLs zugänglich sind.Best Practice zum Aktualisieren einer strukturierten Ressource über REST?

Das Problem besteht darin, dass der Benutzer vorhandene Knoten in der Gliederung bearbeiten und neue Knoten zur Gliederung hinzufügen kann. Normalerweise, wenn Sie etwas bearbeiten, PUT seine Änderungen und wenn Sie etwas Neues hinzufügen Sie POST es; In einigen Fällen möchten Sie jedoch alle Änderungen (einschließlich Add-ons und Bearbeitungen) in einer einzigen Transaktion umwandeln. Mit welchen praktischen Mitteln haben die Menschen das gehandhabt?

Obwohl die Umrisse bereits existiert und eine PUT scheint angemessen, fügt die eingebettete die idempotence des PUT verletzen. Ich bin mir nicht sicher, ob POST auch angemessen ist. Für Designzwecke habe ich mich entschieden, nicht jedes diskrete Update zu speichern, das der Benutzer macht, obwohl ich denke, dass dies eine Lösung bietet. Aber es müssen andere da sein, die sich mit meinem Thema beschäftigt haben oder Ideen dazu haben.

Antwort

1

Gibt es eine Möglichkeit, das Add Idempotent zu machen? Z.B. Wenn Knoten einen natürlichen Schlüssel hatten, konnte der Client beim nächsten Versuch, einen Knoten hinzuzufügen, nichts tun.

+0

keine natürlichen Schlüssel, aber dies führt mich zu der Ansicht, dass der Server (oder Client) könnte spreche temporäre Guides aus, während ich neue Knoten erstelle. Auf diese Weise wäre eine Aufzeichnung anhand ihrer ID und Guid identifizierbar. Durch die Verwendung der GUIDs verwende ich keine IDs, wenn der Benutzer nicht die gesamte Transaktion festlegt. In diesem Zusammenhang stellt sich die Frage nach der Verwendung einer GUID als PK anstelle eines Identitäts-Seeds. Ich werde darüber nachdenken. Vielen Dank. – Mario

+0

Interessant! Froh, dass ich helfen konnte. –

+0

Nach weiteren Untersuchungen habe ich entschieden, dass ein PUT immer nur dann richtig ist, wenn Sie die Ressource vollständig putten. Da ich nur das Delta zurücklege (hinzugefügte/aktualisierte/gelöschte Knoten), denke ich, dass es sinnvoller ist, dieses Delta zurück zu einer Sub-Ressourcen-URL zu putten, ähnlich wie bei Ihrem Vorschlag für eine Transaktions-Sub-Ressource. Ich habe die Details noch nicht ausgearbeitet. – Mario

0

Wie wäre es mit: Erstellen Sie eine neue Ressource:/Konturen/39/Transaktionen, und POST Ihre Transaktion an diese Ressource, z.

POST "addNode = node1, addNode = Knoten2, editNode = node3, newName = foobar" zu/umreißt/39/Transaktionen

Verwandte Themen