2012-04-11 14 views
5

Dies ist eine Theorie/beste Frage Praktiken in Bezug auf RESTful und HATEOAS Design ...Nebenwirkungen auf andere Ressourcen

Angesichts der Ressourcen:

/MyResources/(eine Sammlung unserer Ressourcenobjekte)

und

/Transaktionen/(eine Sammlung von Transaktionen, die historischen haben im System) aufgetreten

es eine gültige Praxis ist für:

POST/MyResources/

, nicht nur eine neue Ressource in/MyResources erstellen/sondern auch eine neue Ressource bei/Transaktionen /?

Mit anderen Worten, kann ein POST (oder irgendein Verb) zu einer URL Ressourcen sowohl bei dieser URL als auch anderen bewirken? Gibt es einen anderen Ansatz? Offensichtlich könnten wir zwei POSTs verwenden, aber das erfordert, dass wir dem Benutzer vertrauen, dass er einen gültigen Zustand bei Änderungen mehrerer Ressourcen beibehält.

Antwort

4

Ja, das ist in Ordnung. Stellen Sie sich einen anderen Fall vor, in dem das System einen /myresources/latest URI verfügbar macht. Wenn keine Ressourcen vorhanden sind, wird möglicherweise 404 zurückgegeben. Wenn Sie jedoch POST-Ressourcen starten, geben sowohl der kanonische URI als auch der URI latest den Wert 200 OK zurück. Dieser Ansatz bietet viele nützliche Vorteile.

Denken Sie jedoch an das Caching, während Sie solche Ressourcen entwerfen. Wenn Sie zum Beispiel an die /myresources/ Sammlung POST, werden Sie diese Sammlung in allen Caches auf dem Weg ungültig machen. Sie werden jedoch die /transactions/ Sammlung nicht ungültig machen, und die beiden Indizes könnten nicht mehr synchron sein. Je nach Cachediagramm zwischen mehreren Clients und dem/den Ursprungsserver (n) können sie trotzdem über das gesamte System hinweg nicht synchronisiert sein. Häufig wird jedoch erwartet, dass diese Aktion synchron abläuft und Caching möglich ist frustriere das in solchen Fällen.

+0

Nützliche Gedanken, danke! Wäre das Caching-Problem nicht in fast jeder aktualisierbaren RESTful API vorhanden? Und würde dieses Problem nicht mit den letzten Mod-Headern gemildert werden? – James

+0

Ja; und ja, es kann. – fumanchu

1

Es scheint mir völlig vernünftig. Es gibt keine Möglichkeit, dass die Person, die die neue Ressource erstellt, feststellen kann, ob dies zum Beispiel durch eine andere Clientabfrage für neue Ressourcen implementiert wurde, und injizieren dann die Transaktionsressource, richtig?

Also gibt es kein konzeptionelles Problem auf dieser Ebene, geschweige denn die Ebene "ist es sinnvoll für den Server, neue Ressourcen zu erstellen".

Verwandte Themen