Ich versuche, eine Reihe von SOAP-basierten Diensten in eine RESTful-API zu konvertieren.
Ich begann mit der Identifizierung von Ressourcen durch Analyse der Operationsnamen und erhielt die Ressource Subscription
.
Wenn ich den Status des Abonnements aktualisieren muss, kann ich nicht einfach eine POST
Anfrage an den Server senden , da ich keinen direkten Zugriff auf die Ressourcen habe, sondern einige Operationen im RPC-Stil aufrufen muss, um deren Eigenschaften zu aktualisieren. Außerdem ist nur und nur dann ein zusätzlicher Anruf bei einem externen Dienst erforderlich, wenn ich den Status des Abonnements auf "aktiv" ändere.
Was ist in diesen Fällen die beste Vorgehensweise für den Umgang mit zugrunde liegenden Vorgängen?
Die Lösung, die ich gefunden habe, besteht darin, Abfrageparameter zu verwenden. Wenn ich den Aktivierungsdienst aufrufen muss, kann ich Folgendes verwenden:
POST /subscriptions/{subscriptionid}/?activate=true
Gibt es eine bewährte Methode für diese Art der Konvertierung, da ich meine Abonnementobjektfelder nicht direkt aktualisieren kann?
Update 1:
Ich kann in den Text meiner POST-Anfrage einige Werte einfügen, zum Beispiel "state": "active"
und überprüfen Sie in meinem Dienst die ordnungsgemäßen Vorgänge, die ausgelöst werden sollen.
quelle
Antworten:
Sie müssen diesen Vortrag von Jim Webber sehen.
Denken Sie "Messaging"; Senden Sie eine Nachricht an Ihre Domain, in der beschrieben wird, was geschehen soll. Der Nebeneffekt der Nachricht besteht darin, dass Ihr Domänenmodell tatsächlich seinen Status ändert. Die "Ressource" ist die Nachrichtenwarteschlange.
Die Schreibweise des Ressourcennamens spielt für die Maschinen keine Rolle. Aber die Leute neigen dazu, pingelig zu werden, wenn die von Ihnen verwendeten Bezeichner von der Konvention abweichen, dass Ressourcen "Substantive" sind.
Außerdem handelt es sich um eine Ressource, die untergeordnet ist. Daher fordert die
/subscriptions/{subscriptionid}
Konvention (siehe RFC 3986 ), diese Beziehung mit einem Pfadsegment auszudrücken, anstatt den Abfrageteil zu verwenden.Diese Schreibweisen könnten also vernünftig sein
quelle
Wenn es ein boolesches Flag zum Aktivieren / Deaktivieren von Inhalten ist, würde ich sagen, dass standardmäßig JSON verwendet wird:
Dies kann leicht erweitert werden, wenn Sie mehr Eigenschaften unterstützen möchten. Ein anderer Ansatz besteht darin, ihm einen eigenen Endpunkt zu geben:
Persönlich würde ich dies nur verwenden, wenn der
active
Status dieses Ereignisses Eigenschaften benötigt / hat, die Sie dann in JSON übergeben / erhalten können, wie eine Benutzer-ID oder eine Einstellung.Wenn es sich nicht um einen booleschen Wert handelt, sondern nur um eine Aktion, die Sie auslösen müssen, für die Sie jedoch keine Statusrückmeldung benötigen / haben (mit Ausnahme eines sofortigen OK von 200), würde ich einen Endpunkt wie diesen verwenden, um ihn ähnlich wie einen RPC auszulösen:
Lesen Sie im Zweifelsfall Folgendes: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful (siehe "Was ist mit Aktionen, die nicht in die Welt der CRUD-Operationen passen? ")
quelle
REST ist nicht funktionsfähig.
Activate
ist ein Verb und kann kein Zustand sein,Active
ist ein Zustand.Da RESTful nicht funktionsfähig ist, können Sie einem RESTful-Dienst nicht mitteilen, was zu tun ist, aber Sie können Arbeit für die Warteschlange eines Dienstes hinzufügen.
Sieh dir das an:
Diese Anfrage ist RESTful und unterstützt alle Vorteile von RESTful (wie Leistung, Säure ...)
quelle