Kann die REST-API als Business-Schicht verwendet werden?

9

Ich verwende PHP Codeigniter MVC Design Pattern

und ich hatte dieses Projekt mit einer Art spezifischer Geschäftsprozesse

In meiner Anwendung werde ich mich mit 2 vorhandenen REST-APIs befassen:

  1. Google
  2. Trello

Ich hatte die Idee, eine REST-API als Business Logic Layer (BBL) zu erstellen.

Das wiederum greift direkt auf meine Modelle zu, um die erforderlichen Daten zur Formulierung von Geschäftsregeln abzurufen

und Controller mit Kommunikation mit BLL mit REST-Client, Geben Sie hier die Bildbeschreibung ein

Ist das ein schlechter Ansatz für die Leistung?

Ist es besser, zwei Modellebenen zu erstellen, eine als Datenzugriffsschicht (DAL) und eine als Business Logic Layer (BLL)?

Ahmed Samy
quelle
REST wird für die Interaktionen zwischen Komponenten verwendet. Es ist keine architektonische Schicht! Es könnte jedoch in einer Schichtarchitektur verwendet werden.
Dave Hillier
Die Semantik der Frage ist falsch. Es kann nicht als architektonische Ebene verwendet werden, aber es kann als Schnittstelle zu einer Ebene verwendet werden.
Dave Hillier

Antworten:

11

Das Problem, das ich bei Ihrem Ansatz sehe, ist, dass Sie eine REST-API für nur einen Verbraucher, Ihre Controller, erstellen, und das ist übertrieben. Fügen Sie nicht nur eine Ebene hinzu, um Daten von einer Ebene zur anderen zu übertragen. Es macht keinen Sinn, Sie erstellen Arbeit für sich selbst ohne zusätzlichen Nutzen.

Eine (schnelle) Möglichkeit, Ihre API nützlich zu machen, besteht darin, dass dies der einzige Endpunkt ist, den Ihre Controller (dh Ihre Anwendung) jemals benötigen. Bedenken Sie:

Geben Sie hier die Bildbeschreibung ein

Plötzlich hat Ihre REST-API einen Zweck, nämlich eine einheitliche Schnittstelle für Ihre verschiedenen Datenanbieter bereitzustellen. Ihre Anwendung muss nichts über die Google- oder Trello-API oder einen anderen Datenanbieter wissen, den Sie möglicherweise in Zukunft verwenden. Sie muss lediglich über Ihre REST-API Bescheid wissen.

Dieses Design ist zwar etwas nützlicher, aber dennoch übertrieben, wenn Ihre Anwendung der einzige Verbraucher ist. Der springende Punkt beim Erstellen einer REST-API besteht darin, eine öffentlich verfügbare Schnittstelle bereitzustellen, die Ihre Anwendungen gemeinsam nutzen können. Und der Schlüssel hier ist die Belichtung. Ihre REST-API wird der Welt zur Verfügung stehen und muss daher sicher sein. API-Authentifizierung und -Autorisierung sind keine einfachen Aufgaben. Wenn nur eine Anwendung Ihre API verwendet, warum sollten Sie dann alle Probleme lösen? Es sei denn natürlich, Sie möchten experimentieren und lernen. Wenn das der Fall ist, machen Sie es auf jeden Fall.

In jedem Fall sollte die Leistung kein Problem sein. Sie würden eine zusätzliche Ebene hinzufügen, sodass offensichtlich ein gewisser Overhead entsteht. Ob dieser Overhead jedoch erheblich ist oder nicht, hängt ganz von Ihrer Implementierung ab. Wenn Ihre REST-API der einzelne Endpunkt ist, ist es wahrscheinlich eine gute Idee, auch der Ort zu sein, an dem das Caching stattfindet. Und nicht nur das serverseitige Caching, eine REST-API erleichtert das Ausnutzen des Browsers ein wenig. Wenn Sie es richtig machen, kann sich die Gesamtleistung Ihrer Anwendung im Vergleich zu einem Nicht-REST-Ansatz erhöhen.

tl; dr: Baue keine Sachen, die keinen wirklichen Zweck haben (es sei denn, du lernst).

Yannis
quelle
Vielen Dank an Yannis Rizos für Ihre Antwort. Ich mochte Ihre Architektur und ich denke, ich bin dafür, aber eine kleine Frage, was Sie mit "Anwendung" gemeint haben, ist eine ganze MVC oder nur VC (View and Controller), wie ich denke, dass Controller haben werden Eine Menge Code-Handling wie Validierung, XHR ... usw. Ich möchte es nicht mit REST-Aufrufen beenden, auch wenn es nur wenige sind und der Rest von BLL sich um den Rest kümmert
Ahmed Samy
und ist es gut, eine andere REST-API von meiner REST-API aus zu verbinden?
Ahmed Samy
1
@AhmedSamy Ihre REST-API ist im Wesentlichen eine andere Anwendung. Sie kann Daten von jedem beliebigen Ort abrufen, einschließlich Ihrer Modelle und anderer APIs. Sie müssen dafür RESTful-Controller und möglicherweise sogar Ansichten erstellen. Ihre Hauptanwendung kann Ihre REST-API entweder über ihre Controller oder über ihre Ansichten (über Javascript) aufrufen.
Yannis
1

Basierend auf Ihrer Zeichnung sollte es ein Modell geben, das von Ihrem Controller aufgerufen wird und das sich mit dem Gespräch mit Google, dem Zurückholen der Ergebnisse, dem Formatieren für Ihre App und dem sofortigen Senden an den Controller befasst. Mit anderen Worten, alle Google-spezifischen Details befinden sich in diesem Modell. Gleiches gilt für Trello. Auf diese Weise haben Sie alles schön und getrennt gehalten, wenn Sie mehr Apis zum Konsumieren hinzufügen müssen.

Dies ist ein kleines Detail - aber denken Sie daran, dass Sie in Ihrem gesamten App-Design mögliche Verzögerungen beim Senden / Abrufen der Informationen vom API-Server an Ihren Server berücksichtigen müssen. Mit anderen Worten, stellen Sie sicher, dass Ihre App nicht vollständig auflegt, wenn der Trello-Server langsam oder langsam ist.

Apis müssen sich um Sicherheit kümmern, aber sie müssen nicht unbedingt "öffentlich" sein. Viele Apis sind von Geschäft zu Geschäft mit nichts Öffentlichem.

Ich habe den größten Teil dieses Buches gelesen - seine kurze, noch frühe Veröffentlichung und nicht genug Beispiele -, aber es ist sehr aktuell, es ist alles PHP und der Autor erstellt und lehrt aktiv über Apis. http://shop.oreilly.com/product/0636920028291.do

Die Autorin hat PHP Rest API verwandte Beiträge in ihrem Blog. http://www.lornajane.net/blog

und sei sicher und lies die Kommentare für die API-Beiträge! Im Ernst, es wird Ihnen eine sehr wertvolle Perspektive geben.

Schlagen Sie vor, dass Sie "Hypermedia" und API googeln. Vielleicht möchten Sie es nicht verwenden, aber es zeigt Ihnen einige andere Techniken für die API-Erstellung.

Ich bin gerade Programmierern beigetreten - ich würde diese Frage positiv bewerten, wenn ich könnte! Die meisten Unternehmen werden nicht in der Lage sein, völlig neue Anwendungen zum Konsumieren oder Veröffentlichen von APIs zu erstellen. Daher ist es sehr wichtig, Best Practices für die Integration von APIs in vorhandene MVC-Frameworks zu entwickeln.

Cartalot
quelle