Frage

Das AGAVI -Framework verwendet die Put -Anfrage zum Erstellen und Beitrag zum Aktualisieren von Informationen. Normalerweise wird dies in Ruhe umgekehrt verwendet (häufig bezieht sich auf das Hinzufügen von Informationen, während der gesamte Datensatz ersetzt wird).

Wenn ich es richtig verstehe, ist das wichtige Problem, dass Put idempotent sein muss, während der Beitrag diese Anforderung nicht hat. Daher verwundete ich, wie das Erstellen eines neuen Datensatzes idempotent sein kann (dh mehrere Anforderungen führen nicht zu mehreren Kreationen eines Datensatzes), insbesondere wenn der ORM normalerweise eine ID als Primärschlüssel verwendet und die ID eines neuen Datensatzes nicht bekannt wäre Für den Client (da er in der Datenbank autokriert ist) kann dies daher nicht Teil der Anfrage sein. Wie behält Agavi die Erfordernis der Idempotenz in Anbetracht der Put -Anfrage bei.

Vielen Dank.

War es hilfreich?

Lösung

Put kann sowohl für die Erstellung als auch für die Aktualisierung vollständiger Datensätze verwendet werden. Beitrag wird normalerweise für teilweise Updates und verwandte Vorgänge sowie für das Erstellen eines neuen Datensatztyps auf dem Server verwendet, ohne eine URL für die Ressource anzugeben (z. /23/Kommentare/283136 Header). In Ihrem Fall (mit einer Sequenz-/Autoinkrement -ID) würden Sie diesen Ansatz verwenden.

HTML (und damit Webformen) ist jedoch unterschiedlich. Es weiß nur, dass er Get und Post, nicht löschen und versetzt hat. Für das Löschen und Aktualisieren von Vorgängen überlastet es die Post -Methode.

Deshalb posten Agavi standardmäßig Karten, um zu "schreiben" und zu "lesen" - es ist der häufigste Anwendungsfall, und "lesen" und "schreiben" wurden ausgewählt, weil sie relativ neutral sind und in gewisser Weise auch die Sicherheit darstellen Aspekte von Get vs Post (Sicherheit wie in "Get können ohne Nebenwirkungen aufgerufen werden" und bla).

Sie können die Zuordnung von Verben für die AgaviwebRequest -Implementierung in fabriken.xml ändern. Siehe die Mailingliste der Agavi -Benutzer oder den IRC -Kanal, wenn Sie Hilfe benötigen (oder hier wegfragen). Viele Leute auf dem IRC -Kanal sind auch mit URL -Schema -Design ziemlich erfahren, falls Sie mehr Hilfe bei der Ermessen Ihrer API benötigen.

Andere Tipps

Anstatt daran zu denken PUT Betrachten Sie es als "Putschen". Sie legen eine Ressource auf einen URI (dh eine ganze Ressource an einen URI).

PUT http://example.com/articles/1

Wenn Sie dies wiederholen (senden Sie dieselbe Ressource an denselben URI), erhalten Sie das gleiche Ergebnis und Sie haben die Ressource bei diesem URI nicht geändert. Dies macht es idempotent.

Wenn Agavis Umsetzung von PUT ist idempotent dann implementiert es PUT korrekt. Sonst ist es nicht.

Put kann verwendet werden, um eine Ressource zu erstellen, außer dass die Ressource bereits vorhanden ist (oder bereits durch einen früheren Put erstellt wurde), wird sie einfach aktualisiert. Post sollte jedoch keine Ressourcen aktualisieren, wenn dies einfach CRUD ist. Beachten Sie, dass die HTTP -Verben nicht unbedingt eine definierte Zuordnung auf bestimmte Aktionen haben, da sie für viel mehr als nur CRUD nützlich sind.

Beachten Sie auch, dass diese Frage nichts mit Ruhe zu tun hat - nur die richtige HTTP -Verwendung. Also bitte entfernen Sie den Rest -Tag.

Ich hatte dieses Problem schon einmal. Dies kann durch gelöst werden Ändern der Fabriken.xml

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top