gute Praxis: REST-API, die als Schnittstelle zwischen dem interface-layer und business layer?
Ich dachte über die Architektur einer web-Anwendung, die ich Plane auf dem Bau und ich fand mich denken, eine Menge über ein core-Teil der Anwendung. Da werde ich erstellen möchten, zum Beispiel eine android-Anwendung darauf zugreifen, dachte ich bereits über eine API.
Angesichts der Tatsache, dass ich möchte, um eine externe API für meine Anwendung aus Tag ein, ist es eine gute Idee zu verwenden, dass die API als Schnittstelle zwischen dem interface-layer (web) und der business-Schicht von meiner Bewerbung? Dies bedeutet, dass auch die wichtigste Schnittstelle meiner Anwendung den Zugriff auf die Daten durch die API. Was sind die Nachteile dieses Ansatzes? Leistung?
Im Allgemeinen, wenn man den Aufbau einer web-Anwendung, die wahrscheinlich benötigt, um in unterschiedlicher Weise zugegriffen, ist es ein gutes architektonisches design haben eine API (web-service) als Schnittstelle zwischen dem interface-layer und business layer? RUHE ist ein gutes "Werkzeug" für?
InformationsquelleAutor Mario Duarte | 2010-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie Sie haben zwei Fragen gibt es, so meine Antwort in zwei Teile.
Erstens, sollten Sie eine API zwischen der interface-Schicht und der business-Schicht? Dies ist sicherlich ein Gültiger Ansatz, eine, die ich verwende in meinem aktuellen Projekt, aber Sie müssen entscheiden, auf die Leistungen selbst, denn nur Sie kennen Ihr Projekt. Vielleicht der größte Faktor zu berücksichtigen ist, ob es genügend verschiedene clients Zugriff auf die business-Schicht zu rechtfertigen, die zusätzlichen Entwicklungsaufwand in die Entwicklung einer API? Oft das bedeutet einfach, mehr als 1 client, als die Vorteile, die eine API wird offensichtlich, wenn Sie kommen, um release-änderungen oder bug fixes. Betrachten Sie auch die zusätzliche Komplexität, die zusätzlichen code, den Wartungsaufwand und die Vorteile, die Ihnen möglicherweise von Trennung von Oberfläche und business-Schichten wie erhöhte Testbarkeit.
Zweitens, wenn Sie implementieren eine API, sollten Sie mit REST? REST ist eine Architektur, die sagt so viel darüber aus, wie der Rest der Anwendung entwickelt wurde, wie es die API. Es ist keine gute Definition von Ressourcen auf API-Ebene, die nicht zu übersetzen, um die Business-Schicht. Rest ist tendenziell ein guter Ansatz, wenn Sie wollen, viele Menschen entwickeln zu können, gegen Ihre API (wie NetFlix zum Beispiel). Bei meinem aktuellen Projekt, haben wir uns für XML über HTTP, da brauchen wir nicht den nutzen, der Rest bietet in der Regel (oder-SEIFE, für diese Angelegenheit).
Im Allgemeinen die Faustregel ist, zu implementieren, die einfachste Lösung, die funktioniert, und ohne Codierung sich in eine Ecke, entwickeln für die heutigen Anforderungen, nicht morgen.
Chris
1) Der Hauptgrund für die Betrachtung der API war die Tatsache, dass mehr als 1 client Zugriff auf die business-Schicht (web-app und android-app). Ich wurde auch gefragt, ob dies war ein Ansatz, der Sinn macht zu nehmen in allgemein, wenn beim Bau einer web-app, die Sie sehen, auf die zugegriffen wird über verschiedene clients (mobile apps, etc), da es könnte sparen Sie eine Menge Zeit später. Ich weiß, das wird viel mehr Aufwand sein, aber das gilt auch für viele gute design-Praktiken.
Absolut, wenn Sie erwarten, zu arbeiten, mit mehr als 1 client, eine API zwischen diesen Schichten ist ein großartiger Ansatz.
InformationsquelleAutor JustABitOfCode
Benötigen Sie auf jeden Fall brauchen Sie eine Web-Service-layer, wenn Sie gehen, um Zugriff über eine native client über das Internet.
Natürlich gibt es viele Ansätze und Lösungen zu erreichen, dies jedoch halte ich für die richtige architektonische Leitlinie zu Folgen, ist eine gut definierte Service-Schnittstelle auf dem Server, auf die zugegriffen wird, durch die Gateway auf dem client. Sie würden dann verwenden POCO DTO ' s (Plain old DTO), um die Kommunikation zwischen den Endpunkten. Die DTO ' s Hauptzweck ist es, eine optimale Darstellung Ihrer web-Dienst über das Kabel, es ermöglicht Ihnen auch, um zu vermeiden, dass befassen sich mit Serialisierung-wie sollte es auch behandelt werden transparent durch den Client-Gateway und Service-Interface-Bibliotheken.
Es hängt wirklich davon ab, wie groß Ihr Projekt /app ob du willst oder nicht wollen, zu gehen durch den Aufwand zur Abbildung der DTO ' s, um die client-und server-Domäne-Modellen. Für große Applikationen der Allgemeine Ansatz wäre, auf dem client Ihre Karte DTO ' s um Ihre UI-Modelle und haben Ihre UI-Ansichten zu binden. Auf dem server würden Sie Ihre Karte DTO ' s um Ihre domain-Modelle und abhängig von der Implementierung des Dienstes bestehen.
REST ist ein architektonisches Muster, das für kleine Projekte, ich halte eine zusätzliche Aufwand/Komplexität, da es nicht so gut programattic fit im Vergleich zu RPC /Document-Centric web-services. In nicht so viele Worte, die Allgemeine Idee der REST ist zu entwickeln, Ihre Dienstleistungen rund um Ressourcen. Diese Ressourcen können mehrere Darstellungen, die Ihre web service sollte in Abhängigkeit der am günstigsten gelegene Content-Type angegeben, indem Sie Ihre HTTP-Client (also im HTTP-ACCEPT-HEADER). Die kanonische URL für Ihre web-services sollte auch logisch gebildet (z.B. /Kunden/Berichte/1 im Gegensatz zu /GetCustomerReports?Id=1) und die web-services-idealerweise zurück in der Liste "gültig Staaten Ihre client geben Sie" mit jeder Antwort. Im Grunde REST ist ein netter Ansatz, die Förderung einer lose gekoppelten Architektur und re-verwenden, erfordert jedoch mehr Aufwand, um zu 'halten', um als standard-RPC - /Dokument-basierte web-services, deren nutzen kaum sichtbar in kleinen Projekten.
Wenn Sie noch zu evaluieren, was web-service-Technologie, die Sie verwenden sollten, möchten Sie vielleicht zu prüfen, mit meinem open-source-web-framework, wie es ist optimiert für diese Aufgabe. Die DTO ' s, die Sie verwenden, um zu definieren, die web-services-Schnittstelle können wieder verwendet werden auf dem client (was normalerweise nicht der Fall ist), um eine stark typisierte Schnittstelle, wo alle die Serialisierung ist für Sie genommen. Es hat auch den zusätzlichen Vorteil, dass jeder web service, die Sie erstellen, genannt SOAP 1.1/1.2, XML, und JSON web-services automatisch und ohne zusätzliche Konfiguration so können Sie den optimalen Endpunkt für jede client-Szenario, D. H. Native Desktop-oder Web-App, etc.
InformationsquelleAutor mythz
Mein letzten Präferenz, basierend auf J2EE6, ist die Implementierung der business Logik in session beans und fügen Sie SOAP-und RESTful-web-services, als erforderlich. Es ist sehr einfach, fügen Sie den Leim zu implementieren, die web services um die session beans. So kann ich den service, dass macht am meisten Sinn für einen bestimmten Benutzer-Anwendung.
InformationsquelleAutor JOTN
Wir haben Glück gehabt, sowas auf ein Projekt. Unsere web-Dienstleistungen, die hauptsächlich standard-content-management, mit einem hohen Anteil an liest (GET) schreibt (PUT, POST, DELETE). Also, wenn Sie Ihre Logik-Ebene ist ähnlich, das ist ein sehr vernünftiger Ansatz zu berücksichtigen.
In einem Fall haben wir eine video-player-app auf Android (Motorola Droid, Droid 2, Droid X, ...), die unterstützt wird durch eine Reihe von REST-web-services aus der cloud. Diese setzen ein Katalog von video-on-demand-Inhalte, aktivieren Sie video-session setup und tear-down, Griff bookmarking und so weiter. REST hat sehr gut funktioniert.
Für uns einer der wichtigsten Vorteile von REST ist die Skalierbarkeit: da RESTful-ERHALTEN Sie Antworten können zwischengespeichert werden, die in der HTTP-Infrastruktur, viele weitere Kunden bedient werden können, von der gleichen web-Anwendung.
Aber REST scheint nicht zu passen, einige Arten von business-Logik-sehr gut. Zum Beispiel in einem Fall, den ich wickelte eine tägliche Wartung, den Betrieb hinter einem web-service-API. Es war nicht klar, was verb zu verwenden, da diese operation zum Lesen von Daten aus einer entfernten Quelle, es zu tun eine Menge erstellt und aktualisiert, um eine lokale Datenbank, dann hast löscht alte Daten, dann ging er off und erzählt einem externen system, um Dinge zu tun. Also ließ ich mich auf, so dass dies ein PFOSTEN, so dass dieser Teil der API nicht Erholsam. Auch so, durch eine web-services-Schicht auf der Oberseite von diesem Betrieb, können wir die daily-Skript auf einem timer, führen Sie es in der Reaktion auf externe Ereignisse und/oder ihn als Teil einer höheren Ebene workflow.
Da Sie mit Android, werfen Sie einen Blick auf die Java -Restlet Framework. Es ist ein Restlet edition die Unterstützung für Android. Der director of engineering bei Overstock.com schwärmte Sie mir vor ein paar Jahren, und alles, was er uns erzählte, war wahr, es ist eine phänomenal-done-framework, das macht die Dinge einfach.
InformationsquelleAutor Jim Ferrans
Sicher, der REST könnte so genutzt werden. Aber zuerst Fragen Sie sich, ob es sinnvoll ist? REST ist ein Werkzeug wie jedes andere, und zwar eine gute, nicht immer der beste hammer für jeden Nagel. Der Vorteil der Aufbau dieser Schnittstelle Erholsam ist, dass, IMO, es macht es einfacher, in der Zukunft schaffen andere Verwendungen für diese Daten - vielleicht etwas, was Sie noch nicht gedacht haben. Wenn Sie sich entscheiden, gehen mit einer REST-API Ihre nächste Frage ist, welche Sprache wird er sprechen? Ich habe festgestellt, AtomPub-ein guter Weg für Prozesse/Anwendungen austauschen info - und es ist sehr erweiterbar, so können Sie eine Menge von benutzerdefinierten Metadaten und noch eaily analysiert, mit einem Atom-Bibliotheken. Microsoft verwendet AtomPub in seiner cloud [Azure] - Plattform zum Gespräch zwischen den Daten der Erzeuger und Verbraucher. Nur so ein Gedanke.
InformationsquelleAutor Gandalf