Hier gibt es einige gute Antworten, aber ich bin nicht sicher, ob sie Ihnen helfen werden, Ihre Mitarbeiter zu überzeugen. Wie viele darauf hingewiesen haben, ist das, was Sie vorschlagen, keine Abkehr vom REST-konformen Design, und ich denke, dies ist der Schlüssel, um sie mit Ihrem Vorschlag in Einklang zu bringen.
Bei REST geht es nicht darum, sicherzustellen, dass Ihre API nur das Speichern und Abrufen von Daten ermöglicht. Es geht vielmehr darum, Aktionen als Ressourcen zu modellieren . Ihre API sollten Maßnahmen ergriffen werden können (es ist ein Application Programming Interface , nachdem alle). Die Frage ist, wie diese Aktionen modelliert werden können.
Anstatt sich einen Begriff auszudenken, sind Beispiele wahrscheinlich die beste Möglichkeit, dies Ihren Mitarbeitern zu erklären . Auf diese Weise können Sie zeigen, wie sie es jetzt tun, welche Probleme dies verursacht, eine Lösung, die das Problem löst, und wie es immer noch RESTful bleibt.
Schauen wir uns Ihr Kundenobjekt an.
Problem:
Die Benutzeroberfläche sendet einen Kunden, nachfolgende Tabellen wurden jedoch noch nicht aktualisiert. Was passiert, wenn einer der nachfolgenden Aufrufe aufgrund eines Fehlers in Ihrem UI-Code (oder eines fehlerhaften Browser-Plugins usw.) fehlschlägt? Jetzt befinden sich Ihre Daten in einem inkonsistenten Zustand. Es könnte sogar ein Zustand sein, der andere Teile Ihrer API oder Benutzeroberfläche zerstört, ganz zu schweigen davon, dass er einfach ungültig ist. Wie erholst du dich? Sie müssten auf jeden möglichen Zustand testen, um sicherzugehen, dass dies nichts kaputt macht, aber es wäre schwierig zu wissen, was möglich ist.
Lösung:
Erstellen Sie einen API-Endpunkt, um Kunden zu erstellen. Sie wissen, dass Sie keinen "/ customer / create" - oder sogar "/ create-customer" -Endpunkt haben möchten, da "create" ein Verb ist und gegen REST verstoßen würde. Also kündige es an. "/ customer-creation" könnte funktionieren. Wenn Sie jetzt Ihr CustomerCreation-Objekt POSTEN, werden alle erforderlichen Felder gesendet, damit ein Kunde vollständig erstellt werden kann. Der Endpunkt stellt sicher, dass die Daten vollständig und gültig sind (z. B. 400 zurückgeben, wenn die Validierung fehlschlägt) und möglicherweise alle innerhalb einer einzelnen DB-Transaktion bestehen bleiben.
Wenn Sie auch einen Endpunkt für GET / customer-Objekte benötigen, ist dies in Ordnung. Sie können beides haben. Der Trick besteht darin, Endpunkte zu erstellen, die den Bedürfnissen der Verbraucher entsprechen.
Vorteile:
- Sie garantieren, dass Sie nicht in einen schlechten Zustand geraten
- Es ist für die Benutzeroberflächenentwickler tatsächlich einfacher, wenn sie die Reihenfolge von Anforderungen, Validierungsproblemen usw. Nicht "kennen" müssen
- Es ist nicht so gesprächig wie eine API und reduziert die Latenz von Netzwerkanforderungen
- Es ist einfacher, Szenarien zu testen und zu konzipieren (fehlende / fehlerhafte Daten von der Benutzeroberfläche sind nicht auf mehrere Anforderungen verteilt, von denen einige möglicherweise fehlschlagen).
- Es ermöglicht eine bessere Kapselung der Geschäftslogik
- Erleichtert im Allgemeinen die Sicherheit (da die Geschäfts- und Orchestrierungslogik in der Benutzeroberfläche von den Benutzern geändert werden kann)
- Vermindert wahrscheinlich die Duplizierung der Logik (mehr als 2 Benutzer einer API als mehr als 2 APIs, die Zugriff auf dieselben Daten gewähren)
- Immer noch 100% RUHIG
Nachteile:
- Es ist möglicherweise mehr Arbeit für den Back-End-Entwickler (aber möglicherweise nicht auf lange Sicht)
Es kann für die Menschen schwierig sein, dieses Paradigma zu verstehen und was daran gut ist, wenn sie es nicht ausprobiert haben. Hoffentlich können Sie ihnen helfen, indem Sie ein Beispiel aus Ihrem eigenen Code verwenden.
Meine eigene Erfahrung ist, dass die Entwickler in meinem Team, als sie mit der Umsetzung dieser Strategie begannen, die Vorteile fast sofort erkannten.
Weitere Studie:
Dieser Artikel von thoughtworks hat mir wirklich geholfen, anhand praktischer Beispiele die Idee zu bekommen, Aktionen als Objekte zu modellieren: https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling
Ich würde auch vorschlagen, sich über CQRS und Event Sourcing zu informieren, da sie genau mit dieser Art von Dingen zu tun haben (dh Ihre API von der eigentlichen Persistenzlogik zu trennen). Ich weiß nicht, wie bereit Ihre Mitarbeiter wären, solche Dinge zu lesen, aber es könnte Ihnen mehr Klarheit verschaffen und Ihnen helfen, sie ihnen zu erklären.