Ich entwickle eine RESTful API. Dies ist meine erste API, aber auch mein erstes wirklich großes Programmierprojekt. Als solche bin ich immer noch lernen viel über Architektur usw.RESTful API: Wo soll ich meinen Workflow programmieren?
Derzeit habe ich meine api-Setup in den folgenden Schichten:
- HTTP-Layer
- Ressourcen Schicht
- Domain Model/Geschäfts Logic Layer-
- Data Access/Repository-Schicht
- Persistent Storage/DB-Schicht
Das Problem, auf das ich im Moment gestoßen bin, ist wo muss ich Arbeitsablaufobjekte/Manager setzen? Unter Workflows verstehe ich Code, der den nächsten Schritt für den Endbenutzer bewertet. Zum Beispiel ein E-Commerce-Workflow. Der Benutzer fügt Artikel in den Warenkorb ein, checkt dann aus, fügt dann persönliche Daten ein und zahlt dann. Der Workflow wäre verantwortlich für die Entscheidung, welche Schritte als nächstes ausgeführt werden, aber auch welche Schritte NICHT erlaubt sind. Beispielsweise könnte ein Benutzer keine Fehler in der API verursachen, indem er versucht, zu zahlen, bevor er persönliche Daten eingegeben hat (vielleicht rufen sie die URI für Zahlungen zurück und versuchen, einen Schritt zu überspringen). Der Workflow würde prüfen, ob alle vorherigen Schritte abgeschlossen wurden, andernfalls würde die Zahlung nicht möglich sein.
Derzeit befindet sich meine Workflow-Logik in der Ressourcenschicht. Ich verwende Hypermedia-Links, um den Workflow dem Benutzer z. Bereitstellung eines "Next Step" -Links. Das Problem dabei ist, dass die Ressourcenebene eine Ebene der obersten Ebene und mehr mit der Präsentation ausgerichtet ist. Ich denke, dass es zu viel über das zugrundeliegende Domänenmodell wissen muss, um einen Workflow effektiv zu bewerten, d. H. Es müsste wissen, dass es die Einheit personal_detail
prüfen muss, bevor es die Zahlung erlaubt.
Dies führt mich zu der Annahme, dass Workflows in das Domänenmodell gehören. Das macht viel mehr Sinn, da wirklich Workflows Teil der Geschäftslogik sind und ich denke, dass sie daher am besten in der Domänenebene platziert sind. Ersetzen Sie den Ressourcen-Layer durch etwas anderes, und Sie benötigen weiterhin die zugrunde liegenden Workflows.
Nun aber besteht das Problem darin, dass Workflows das Wissen mehrerer Domänenobjekte benötigen, um ihre Logik zu vervollständigen. Es fühlt sich jetzt richtig an, dass es vielleicht in eine eigene Schicht geht? Zwischen Ressourcen- und Domänenebene?
- HTTP-Layer
- Ressourcen Schicht
- Workflow-Schicht
- Domain Model/Business-Logik-Schicht
- Data Access/Repository-Schicht
- Persistent Storage/DB-Schicht
Ich frage mich nur ob Hatte jemand andere Ansichten oder Gedanken dazu? Wie gesagt, ich habe keine Erfahrung in der Vergangenheit, um zu wissen, wo Workflows platziert werden sollten. Ich lerne das wirklich zum ersten Mal und möchte sicherstellen, dass ich den richtigen Weg gehe.
Links zu Artikeln oder Blogs, die dies abdecken, würden sehr geschätzt werden. Liebe, die auf verschiedenen Implementierungen liest.
EDIT
Um zu klären, ich loslassen, dass HATEOAS der Client ermöglicht durch den ‚Workflow‘ zu navigieren, aber es muss etwas in meinem API sein, der weiß, was das heißt es wirklich zu zeigen, verknüpft wird, um den Workflow definiert, ist dürfen. Es stellt Workflow-bezogene Links in der Ressource bereit, validiert jedoch zusätzlich Anforderungen, die mit dem Workflow übereinstimmen. Während ich zustimme, dass ein Kunde wahrscheinlich nur den in der Ressource bereitgestellten Links folgt, ist die Gefahr (und Schönheit) der Ruhe, dass seine URI getrieben wird, so dass nichts einen schelmischen Kunden daran hindert, Schritte im Arbeitsablauf zu "überspringen" eine fundierte Vermutung über die URI machen. Die API muss dies erkennen und eine 302-Antwort zurückgeben.
Ich stimme nicht mit dem überein, was Sie gesagt haben. Eine REST-API verwendet HATEOAS, um dem Benutzer zu ermöglichen, einen "Workflow" über die App zu definieren. Aber was Sie sagen, ist, dass wir dem Benutzer (oder der Client-App) erlauben sollten, die Logik zu definieren und alles zu tun, was sie wollen !! Das ist eindeutig falsch. Worüber ich spreche, ist sicherzustellen, dass der "Workflow", dem der Client folgt, erlaubt ist. Ein Teil der API muss dafür zuständig sein, herauszufinden, welche Links mit einer Ressource (dem Workflow) angezeigt werden dürfen, und auch zu überprüfen, dass Anforderungen nicht außerhalb des Workflows liegen (z. B. Rückgabe 302), siehe Update –
Da der Server ist Wenn der Client dem Client Javascript zur Verfügung stellt, um festzustellen, ob ein Link angezeigt werden soll oder nicht, erweitert der Server seine Logik im Wesentlichen auf den Client und bestimmt somit weiterhin den Arbeitsablauf. Es gibt nichts, was Sie daran hindert, eine Business-Schicht in Ihre Architektur zwischen der Benutzeroberfläche und den REST-Services zu integrieren. Je nachdem, wie Sie es implementieren, kommuniziert Ihre Benutzeroberfläche möglicherweise nicht mehr RESTfully. –
Und wo würde dieser Business-Layer leben? –