Auf die Implementierung einer RESTful-Ressourcen für eine state-machine oder endliche Automaten

Ich bin ein Rails und REST-Neuling und ich bin dabei, zu überlegen, wie man am besten setzen Sie eine Ressource, die gesichert durch ein domain-Objekt, das über eine state machine (in anderen Worten eine endliche Automaten).

Ich habe gesehen, eine Reihe von Edelsteinen, die für ein Modell der Klasse a state machine, wie aasm, übergänge, workflow -, aber keiner von Ihnen Dokument Beispiele, wie Sie tatsächlich verwendet werden in einem Ressourcen-orientierten Steuerung. Sie alle scheinen zu implizieren, dass die Zustandswechsel werden ausgelöst durch ein "Ereignis" , das ist wirklich ein Aufruf der Methode. Einige Fragen, die ich mit dem, was das impliziert sind:

  1. Die update-Aktion (PUT-Methode) ist nicht geeignet, da LEGEN Sie wohl sein idempotent. Nur wäre dies möglich ist, wenn der Staat gesendet wurde, als Teil der Repräsentation. Dies ist inconsistet mit einem "event". Ist das richtig?
  2. Da, Ereignisse sind nicht idempotent, dann ist das ein POST benutzt werden muss. Aber, auf welche Ressource? Gibt es eine subresource für jedes mögliche Ereignis? Oder gibt es jemanden (/updatestate), dass dauert so seine Darstellung die Ereignis-trigger und alle Parameter, die das Ereignis?
  3. Da der Zustand der Ressource geändert wird, die durch ein Ereignis ausgelöst möglicherweise durch ein anderes Mittel, sollte die create-Aktion akzeptieren Sie änderungen an der state-Attribut (oder andere Attribute, die davon abhängig sind die state machine)?
  4. [Letzte Frage] Was ist ein guter Weg, um zu entlarven, die übergänge in der Benutzeroberfläche? Denn die Ereignisse sind nicht Staaten, es scheint, dass es nicht sinnvoll ist, zu ermöglichen, das state-Attribut (und jedem anderen Attribut abhängig ist Zustandsübergänge) aktualisiert werden. Bedeutet das, dass diese Attribute ignoriert werden sollen, die in der update-Aktion?
  • Mein Rat: fahren Sie nicht selbst verrückt zu versuchen zu befriedigen, der REST der Trolle mit 100% so genannten RESTfulness. REST ist ein praktisches Werkzeug für die Gestaltung einer API, aber die meisten komplexen APIs sind gezwungen, Pause, REST, besonders SETZEN idempotenz.
  • Es gibt viele Ebenen von RESTfulness es scheint, zumindest aber die Einhaltung der Grundregeln: GET/PUT/DELETE für idempotent, POST für nicht-idempotenten HTTP-Fehlercodes für Fehler, Hinweise, subresources beschrieben, die von übergeordneten Ressourcen. Das sind die (relativ) einfache Teile zu.
  • REST troll hier: Wenn Sie nicht Folgen Sie den weiteren Einschränkungen nennen Sie es nicht Erholsamen aber RESTlike 😉
InformationsquelleAutor Galex | 2011-04-08
Schreibe einen Kommentar