Die Implementierung eines Universal Web Service Architecture mit AjaxDieser Artikel konzentriert sich auf den Aufbau AWeb Service-Architektur. Im vorhergehenden Artikel haben Sie gelernt, wie man eine globale Architektur, dass die Grundlagen, wie man AWeb Service zu konstruieren und ihre entsprechenden URLs enthalten schaffen. Allerdings konnte er sich nicht erklären, was im Detail für AWeb Dienst tut und warum AWeb Dienst tun sollten, was sie tut. Dieser Artikel beschreibt die Richtlinien, wie man eine Representational State Transfer (REST)-basierte Web-Service zu entwickeln. Im Einzelnen umfasst sie folgende Punkte: • Strukturierung AWeb Service zur Lösung einer bestimmten Aufgabe • Die Kombination von Web-Services zum Filtern und Ändern von Daten • Die Kombination von Web-Services zu erstellen MashupsProblemSchauen wir uns ein Problem innerhalb eines Bestands-Trading-Applikation als Beispiel für ein Problem in die Erstellung von Web Services. Das Problem ist, dass eine Reihe von Kunden den Zugang zu Echtzeit-und historischen, um Informationen benötigen. AWeb Hinzufügen von Service-Frontend können Sie die Middleware-Socket-Server, ohne Änderungen vorzunehmen, um es zu nutzen. Obwohl es wie eine Verschwendung von Ressourcen könnte auf einen Front-End für einen Dienst in einer umfassenden Web-Service-Rahmen hinzufügen, ist es sinnvoll, hier. Dieser Artikel wird untersuchen, warum.
Lösung Teil 1 Die Umsetzung der Lösung besteht darin, unter einer der bereits vorhandene Steckdose Technologien und die Verwendung dieser Technologie, um AWeb Service aufzubauen. Zur Veranschaulichung verwendet dieser Artikel eine einzelne Technologie Java. Sie können wählen. NET oder C + + die eigentliche Technologie ist nicht wichtig, weil die exponierten Web Service kann von jeder Technologie verbraucht werden, die Web-Service-fähig. Der erste Ansatz zum Aufbau der Web-Service ist es, thegeneral Operationen definieren und dann die allgemeinen Operationen mit einigen Technologie zu implementieren. In der High-Level-Ansicht des Trading-Architektur, eine Klasse Typ namens TradeServlet, dass ein Java-Servlet implementiert, bietet die Web-Service. Für diejenigen, die nicht versiert in Java-Technologien, ein Java-Servlet ist eine Möglichkeit der Einführung eines HTTP-Handler. TradeServlet führt die historische Zugriffe, Echtzeit-Daten-Anforderungen und um Zugriffe über eine Schnittstelle mit dem Namen iTrader. Aus Sicht des Programmierers über eine Schnittstelle ist der richtige Ansatz, weil es Ihnen erlaubt, die Brücken-Muster zu verwenden. Die Brücken-Muster können Sie entkoppeln die Absicht des Handels aus der Umsetzung von Handelsstrategien. In der High-Level-Sicht des Web-Services-Architektur implementiert ProviderTrader1 die Art der Einberufung der entsprechende Funktionalität über die Socket-Layer. Die Brücke Muster Theorie ermöglicht es Ihnen, eine Socket-Aufruf heute als eine Notlösung, aber morgen ersetzen ProviderTrader1 mit einer neuen Implementierung (z. B. anstelle der Middleware mit dem Web-Service), ohne dass die Durchführung der TradeServlet oder die Schnittstelle iTrader ändern. Die Klasse ProviderTrader1 iTrader implementiert die Schnittstelle und bietet eine Brücke von dem Händler-neutral-Subsystem auf den Socket-basierte Handelssystem. Ein weiterer Anbieter konnte verwendet, um Legacy-Datenbank zugreifen zu können. Unabhängig von der Anzahl der Anbieter, interagiert das Web-Service mit dem Händler-neutral-Subsystem. Und die Händler-neutral-Subsystem interagiert mit dem Socket-basierte Handelssystem. In der Theorie ist dieser Ansatz klingen, aber es leidet darunter, zu komplex. Das Problem dieses Ansatzes ist eine Frage der Konzentration. In dem Beispiel des Händlers Teilsystems, liegt der Schwerpunkt des Subsystems und der Web Service-Schicht ist ein Add-on an den Händler-Subsystem. In der Theorie, fügen Sie die Web-Service-on ist noch nicht mal nötig, weil der Händler-Subsystem alles verwaltet. Im Rahmen einer Ajax-Web-Service-Anwendungen, ist dies der falsche Ansatz, denn der Schwerpunkt liegt in der Web-Service, und es sollte nicht ein Add-on. Lösung Teil 2 Die Lösung für den Händler-Subsystem ist weder definiert noch eine neutrale Händler-Subsystem einführen und mit einer bestimmten Technologie. Der Händler Teilsystem in eine Reihe von Web-Dienstleistungen umgesetzt, die Sie in ein Teilsystem zu versammeln. AWeb Service-Händler mit Sitz in Subsystem erfordert noch eine Schnittstelle, aber die Schnittstelle ist in der HTTP-Web-Service-Level definiert. In architektonischer Hinsicht, die iTrader Implementierungen in Web-Services umgewandelt. Die Architektur stützt sich auf die Wiederverwendung der bereits bestehenden Implementierungen ProviderTrader1 und ProviderTrader2 direkt aus der Klasse TradeServlet. Jede Implementierung bietet eine Reihe von Methoden, Eigenschaften und Ergebnismengen, dass der Händler-neutral-Subsystem definiert. Mit AWeb Service, die Methoden, Eigenschaften und Ergebnis-Sets sind in etwas, das Web-Service-kompatibel ist, umgewandelt. Dann auf einem höheren Niveau, montiert eine andere Technologie der Web Services in einem Händler-Subsystem. Die Umsetzung der Trader-Universal-Web-ServiceDer Handel mit Web-Service ist ein Beispiel dafür, was Sie erwartet, wenn die Durchführung einer kompletten Web-Service-Lösung. Dieser Artikel deckt diese verbleibenden Stück: • Definition der URLs • Identifizierung der Formate, die gesendet und empfangen werden sollen • Wie relative URLs unterstützt Definieren die URLs für die Anwendung TraderLassen Sie uns mit der Entwicklung des Web-Service-Händler weiter, und stellen Sie die wichtige Stücke, nämlich die URLs und unterstützten Datenformate. Der Händler Anwendung macht die folgenden Basis-URLs:
/ services / Controller ist die Basis-URL verwendet, um den Motor auf dem Server zu verwalten. Der Controller URL können Sie den Reset-Code hinter den Web-Dienst manuell. Zum Beispiel im Fall des Händlers Anwendung / services / Controller würde die Web Service-Implementierung in die Buchse, dass die Handels-Schnittstelle ermöglicht in Verbindung zu treten. Sie können die URL / services / Controller / use Start in den Server-Code zu starten, und man konnte verwenden Sie die URL / services / Controller / Stop-Code auf den Server zu stoppen. Allerdings würde dieser Ansatz nicht brauchbar sind, weil es den Anschein, dass die Kennungen starten und stoppen Ressourcen, die sie nicht sind. Vergleichen Sie ihn mit einem Lichtschalter. Ein Lichtschalter ist eine einzige Ressource, die zwei Zustände: Ein-und Ausschalten hat. Es ist nicht haben zwei Ressourcen, eine für jeden Staat. Sie die Abfrage-Parameter zu starten und die Server-Code zu stoppen. Um den Server-Code zu starten, führen Sie das Verb POST auf die URL / services / Controller mit der Computer-Grafik-Interface (CGI) Parameter action = starten. Um den Server-Code zu stoppen, bleibt die URL die gleiche, ebenso wie das Verb, aber die CGI-Parameter ändern action = stoppen. Das Verb POST ist angebracht, weil man einige serverseitigen Prozess ausgeführt sind, und was der Prozess sollte, hängt von der übermittelten Daten. Der Aufruf der Verb GET auf die URL / services / Controller gibt den Status der Server-Code. Wenn Sie möchten, mehrere Teile von Server-Code in Ihrer Anwendung, dann erstellen Kind URLs wie die folgende: / services/controller/code1 und / services/controller/code2 Kontrolle. Die Leitlinien zum Starten, Stoppen und die Abfrage des Status der einzelnen Server-Code Stücke bleiben unverändert. Oft serverseitigen Code Stück Konfiguration Richtlinien, wie etwa die Lage der Basis-Verzeichnis, wie viele Threads zu beginnen, und so weiter. Diese Konfigurationseinstellungen werden in der Regel in einer Konfigurationsdatei gespeichert. Sie sollten in der Lage, diese Richtlinien festlegen, wenn der Server-Code beginnt oder beendet. Zum Beispiel, wenn Sie einen Thread-Zahl angeben, dann können Sie die CGI-Parameter action = start & ThreadCount = 12 für den Start des Server-Code zu verwenden. Wenn Sie die Möglichkeit haben, Konfiguration Richtlinien zu definieren, dann können sie abgefragt und abgerufen werden, wenn der Status des Servers beantragt wird. Wenn Sie die einzelnen Wert einer Server-Variable abfragen, können Sie sie mit Filter-Abfrage Parameter wie / services / Controller? Status = ThreadCount + uptime. Verwenden Sie das Basis-URL / services / Echtzeit an die Echtzeit-Lager-Verwaltung Ticker-Daten. Zum Beispiel, wenn Sie im Ticker GM interessiert sind, würden Sie die URL / Dienste / realtime / GM auf die Informationen in Echtzeit abzurufen. Es scheint, dass dieser Basis-URL ist die einfachste, aber die Einfachheit ist irreführend. Zum Beispiel, wenn die Benutzer ausführen auf die URL GET / services / Echtzeit, was zurück? Dies ist eine schwierige Frage, denn Sie nähern sind die Grenzen ein Stück Software. Aus theoretischer Sicht fordern GET Ergebnisse bei der Rückkehr von Echtzeit-Daten für alle Ticker. Das klingt in der Theorie gut, aber es ist völlig unmöglich. Es gibt buchstäblich Tausende von Aktien an mehreren Börsen. Die Einbindung aller-Ticker in einer Anfrage in Echtzeit mit Hilfe einer GET-Anfrage ist praktisch nicht machbar. Dies ist ein Beispiel für eine URL, über die Theorie und Praxis in Konflikt. Die Lösung unterstützt nicht die Root-URL als Verweis auf Echtzeit-Daten. Die Root-URL wird verwendet, um eine Liste aller verfügbaren Echtzeit-Links zurückzukehren. Die Wurzel-URL ist nicht benutzt, um anzuzeigen, was die Echtzeit-Informationen, denn dies würde nach Tausenden von Tickern. Die Wurzel-URL wird wieder links, wo Sie abrufen können Echtzeit-Daten. Dies könnte bedeuten, wieder links auf Tausende von Börsenticker. Sie können auch die Root-URL, um sowohl den Link, um den Ticker und eine verkürzte unternehmensbeschreibung zurückzukehren. Dies würde den Aufbau einer Suchmaschine zu helfen, als die meisten Menschen nicht den Ticker nicht kennen, wissen aber den Namen des Unternehmens. Delegieren die Root-URL für einzelne URLs schafft das Problem, dass der Webdienst nicht in Echtzeit verwalten können RSS-Feeds für Alle Börsenticker für alle Börsen. Um es einfach auszudrücken, können Sie nicht nachverfolgen, alle Bestände auf einem einzigen Computer. Tracking aller Bestände erfordert große Mengen an PS die sich dieser Artikel wird nicht in zu bekommen. Die einzige Lösung besteht darin, eine Spur, wenn gestellte Lösung. In einem Track-if-Lösung gebeten, keine Aktien sind zunächst für die Echtzeit-Daten erfasst werden. Echtzeit-Daten erfasst werden, wenn ein HTTP-GET auf eine bestimmte Aktie ausgeführt wird. Ein HTTP-POST-oder PUT-oder DELETE macht keinen Sinn, auf die Echtzeit-Feed, weil ein Echtzeit-Daten-Feed geht vom Server an den Client enthält. Der Server ist nicht in den Informationen von dem Client andere als die Ticker in Echtzeit Daten zu generieren interessiert. Wenn ein Verb andere als GET ausgeführt wird, wird der Server einen HTTP 500-Fehlermeldung. / services / Bestellungen gibt die Root-URL für die Auftragsabwicklung. Im Rahmen der Bestände, macht Auftragsabwicklung Einsatz aller HTTP-Verben. Sie verwenden HTTP POST an eine Bestellung aufgeben, HTTP PUT legt eine Bestellung aufgeben, HTTP GET, um den Status einer Bestellung abrufen zu ändern, und HTTP-ENTF, um einen Auftrag zu löschen. Jede Bestellung wird als eindeutige Kennung zum Beispiel dargestellt werden, macht / services/orders/1232445. Die eindeutige Kennung nicht numerisch sein, aber es kann alphanumerisch oder sogar global kompliziert amore Unique Identifier (GUID). Die Wurzel-URL kann als Host für viele Aufträge, die buchstäblich Millionen von Aufträgen bedeuten könnte. Für die Bestellung URL, ist es wichtig, dass Sie die Möglichkeit, Filter Aufträge nach einem bestimmten Status haben. Sie könnten versucht sein, Aufträge nach, um ein Datum zu organisieren, aber ich würde gegen diese zu beraten. Wenn Sie schaffen sind ein Root-URL, die Daten in der Sammlung sollte in seiner natürlichen Form zugänglich sein. In einem Blog-Anwendung, ist es natürlich, nach Datum zu organisieren. Allerdings ist die natürliche Ordnung der eine Aktie Antrag nicht nach Datum, sondern von Bestell-ID. So wird die Root-Bestellungen URL wird buchstäblich Millionen von Aufträgen zugeordnet. Wenn eine Anwendung geschieht für alle Bestellungen, fragen, wird der Server müssen alle diese Befehle zu geben. Im Falle einer SQL-Datenbank, wenn eine Tabelle hat Millionen und Abermillionen von Datensätzen, und jemand führt die Abfrage SELECT * FROM table, die Datenbank wird nicht fragen: "Sind Sie sicher?" Die Datenbank wird fortgesetzt, und wählen Sie alle Datensätze, auch wenn es vielleicht nicht effizient sein. Sie Filter erstellen, optimieren, um Zugang zu den Bestellungen. Zum Beispiel, wenn Sie alle Aufträge in 2006 zu finden, können Sie die URL ausführen / services / Bestellungen /? Year = 2006. Konvertieren Sie die Suchparameter in Hinblick URL, z. B. / services/orders/2006. Ob Sie die Suchparameter oder die Ansicht URL Ansatz, hängt von Ihren Vorlieben. Es ist ein Filter, der sich als problematisch erweisen wird, und es bezieht sich auf Nutzer. In beliebiger Reihenfolge installieren, müssen Sie mehrere Benutzer. A-Aktien-Trading-Applikation ist das nicht anders. Was macht eine Bestandsaufnahme, um den Handel Anwendung komplizierter ist, dass ein Auftrag nicht automatisch erfüllt ist. Es ist vielleicht nicht immer erfüllt werden, und es könnte sogar abgebrochen werden. Wird ein Auftrag System nicht die Möglichkeit haben, zu filtern pro Händler, könnten Sie möglicherweise in einer Situation, in denen ein Händler eine Position zu eröffnen könnten, und einen anderen Unternehmer schließt eine Position. Theoretisch könnte man kaufen und verkaufen eine Zukunft hat zur gleichen Zeit (so genannte waschen Handel). Durch den Kauf und Verkauf zur gleichen Zeit, werden Sie weder gewinnen noch verlieren, zumindest andere als Ihre Courtage. Diese Technik des Kaufens und Verkaufens zur gleichen Zeit durch zwei verschiedene Broker ist illegal, denn sie macht es den Anschein, als gäbe es Maßnahmen auf eine Position, wenn in der Tat gibt es nicht. Daher werden die Händler ihre Bestellungen gebunden, und die Aufträge sind, ihre Händler gebunden. Eine logische Weiterentwicklung der Bestellungen URL wäre / services / Bestellungen / [Händler]. Diese raffinierte URL zeigt, dass manchmal müssen Sie URLs, die andere Bedürfnisse zu erfüllen, wie in diesem Fall zu schaffen, der Rechtsabteilung Bedürfnisse. Mit dieser Ausgestaltung der URL, wird die Root-URL / services / Bestellungen überholt? Alles, einschließlich der Suchparameter und der Blick URLs, gilt weiterhin. Der Unterschied ist, dass die URL der Zugang zu Informationen, um dann die eindeutige Kennung des Gewerbetreibenden enthalten. Angenommen, Sie gehen auf die Verfeinerung der URL verwenden wir durch das, was die einzelnen Verben werden auf den verschiedenen Ebenen URL gehen. An der Wurzel URL-Ebene (/ services / Bestellungen), nur die HTTP-GET gilt. Auf dieser Ebene können Sie nur filtern die Aufträge, die Sie sehen wollen. Sie können keine Beiträge, weil der Stamm-URL des Händlers fehlt ID, und Sie können nicht stellen, weil die Root-URL ist eine Sammlung URL. Schließlich können Sie nicht löschen, denn das würde die Streichung aller Aufträge und der Händler führen. Eine Ebene tiefer, würden Sie das Root-URL für einen einzelnen Händler haben (/ services / Aufträge / Händler-ABC). An der Wurzel-URL für einen einzelnen Händler, nur die HTTP-GET und POST gelten. Sie würden GET verwenden, um abzurufen und möglicherweise alle Gewerke, dass ein Gewerbetreibender hat Filter. Zum Beispiel können Sie Filter für Handwerks in einem bestimmten Monat, Jahr oder Tag. Sie könnten die URLs / services/orders/trader-abc/2006 oder / services / Aufträge / Händler-abc? Year = 2006. Der HTTP-POST Verb gilt, weil es erlaubt den Benutzern, eine Bestellung ohne eine Bestellung ID. Die Abgabe der Bestellung gibt die URL wo Sie den Status einer Bestellung abrufen können. Wenn ein HTTP-POST an die URL / services / Aufträge / Händler-abc gesendet wird, die URL / services / Aufträge / trader-abc/123456 könnten zurückgegeben werden. Die Anwendung des Verbs DELETE an der Wurzel-URL ist ein bisschen schwierig, weil von dem, was das Verb bedeutet. Wenn man die DELETE gelten, wäre es löschen Sie alle Aufträge an die Root-URL. Praktisch gesprochen, das ist sehr schlecht beraten. Ein Grund, die DELETE-Unterstützung ist in der Lage sein, Elemente wahlweise über eine Abfrage Parameter löschen, wirkt wie ein Filter. Um zum Beispiel alle Bestellungen in einem Jahr zu löschen, können Sie die URL / services / Bestellungen Verwendung / Händler-abc? Year = 2006. Beachten Sie die URL verwendet, um selektiv zu löschen ist die gleiche wie die URL verwendet, um gezielt auszuwählen. Der Unterschied ist, das Verb (DELETE vs GET). Es ist eine allgemeine Erscheinung, die URLs, sondern Match wird zeigen ein anderes Verhalten in Abhängigkeit von der verb. Im Rahmen des Handelssystems würde, Löschen von Aufträgen gibt es Einschränkungen. Wird ein Auftrag ausgeführt wird, können Sie nicht löschen, die Reihenfolge. Die restlichen Verb PUT ist zum größten Teil nicht für die Wurzel URL-Ebene. Sie verwenden das Verb PUT an eine lückenlose Darstellung der Ressource an den Server senden. Im Falle des Root-URL, bedeutet dies den Versand sämtlicher Aufträge an den Server. Das Problem mit dem Senden von Aufträgen an den Server ist, dass Sie nicht vollständig Bestellungen senden können. Die Bestellung ist abgeschlossen, aber die Reihenfolge Kennung (zu der Zeit eine Bestellung gebucht wird berechnet) fehlt. So können Sie nicht verwenden, PUT, um eine neue, um den Server zu senden. Ein weiterer Grund für den Einsatz von Put-Option wäre, eine bestehende Ordnung zu ändern. In der Regel ist dies eine legitime Nutzung, aber es ist im Rahmen des Handelssystems falsch. Was passiert, wenn Sie eine Bestellung ausführen, die derzeit versuchen zu ändern? Es gibt keine einfache zurückgreifen, und damit im Rahmen des Auftrages System, Änderung einer Bestellung kann mehr Probleme als Lösungen bringen. Der entsprechende Trading-Lösung ist es, die Bestellung zu löschen und eine neue zu erstellen. / Services/orders/trader123/order345 stellt eine URL verweisen, um die Ressource. In der Regel können Sie alle HTTP-Methoden anzuwenden, aber Sie müssten Grenzen zu schaffen, um Geschäftsprozesse widerspiegeln. Im Fall des Händlers Anwendung, können Sie nicht verwenden PUT auf eine neue Ordnung, weil die Reihenfolge Anwendung nicht ermöglichen es Ihnen, ein, um festzustellen ID vor der Zeit. Sie können auch nicht zu einer bestehenden Ordnung, denn das würde bedeuten, Änderung der Ordnung und im Rahmen eines Trading-Systems, kann ein Auftrag entweder ausgeführt oder abgebrochen. Sie könnten Anwendung und Nutzung der DELETE zu einer Stornierung des Auftrages definieren. Ein POST einen Auftrag nur dann sinnvoll, wenn die POST ein, damit ist eine Stornierung darstellt. Ein GET würde genutzt, um die Ausführung Status einer Bestellung abzurufen. / services / historische stellt einen Root-URL verwendet, um die historischen Daten von der Middleware abzurufen. Erste historische Futtermittel ist einzigartig, es gibt nur eine Anwendung Verb GET nämlich. Das Wort historischen bedeutet, etwas, was bereits geschehen ist, und Sie können die Geschichte nicht umschreiben. Umschreiben von Geschichte würde auftreten, wenn Sie die Verwendung der PUT-oder DELETE versuchen. EIN AMT würde gelten, wenn Sie die POST verwenden, um eine anspruchsvolle Abfrage zu erstellen. Zum Beispiel können Sie verwenden, um eine POST-Scan-und Filter historischen Daten anhand einer Reihe von Kriterien. Zu den historischen Web Service so effektiv wie möglich zu machen, benötigen Sie die Möglichkeit, anspruchsvolle Anfragen zu definieren. REST nicht dafür ausgerüstet ist zu tun, da REST basiert auf dem HTTP-Protokoll. Dies ist nicht zu sagen, dass Sie nicht REST verwenden können, um die Daten abzufragen, aber das müssen Sie die Sanitär-schreiben. Angenommen, Sie möchten alle Aktien, die in einem bestimmten Bereich für fünf Tage gehandelt von 10 zu finden. Sie müssten diese Art der Abfrage in Form einer REST-Aufruf, dass die Delegierten auf eine relationale Abfrage der Annahme, dass die Daten in einer relationalen Datenbank gespeichert wird. Ein weiterer Ansatz ist die Verwendung eines XML-basierten Datenbank-Code, wenn Sie benötigen würde zu entscheiden, dies rechtzeitig. Der Vorteil der Speicherung Ihrer Daten in einer XML-basierten Datenbank ist, dass Sie den HTTP-Karte können Anfragen an die XML-Hierarchie. Die Verwendung von XML Query Language (XQL) und XPath für die XML-Datenbank, können Sie problemlos ausführen, ohne anspruchsvolle Anfragen zum Installateur zu schreiben. Sie müssen sich daran erinnern, dass die Macht eines historischen Web-Service, wie Sie bei der Umsetzung der Anfragen liegt. In welchem Format der Daten zu senden?Bisher wurden alle dem Beispiel Web-Services in Form von URLs erklärt, aber nicht in Bezug auf den Inhalt, der angenommen wird, und erzeugt. Im Falle des Blogging Anwendung des Artikels 4 eingeführt wurde, erzielte das Web-Service-Atom-Daten mit dem MIME-Typ application / atom + xml. Beim Bau REST Web Services, den MIME-Typ ist wichtig, weil es bestimmt, wie die Daten empfangen und gesendet werden. Im Falle der Blogging-Anwendung, wenn die Atom-URL aufgerufen wird, wird es ein XML-Stream zu erzeugen. In der Theorie, der Rest ist Strategie zu entwickeln, AWeb Service, technologyneutral schaffen und die richtigen Inhalte für die richtige Abfrage zu generieren. Ein Artikel eingereicht von Sonja Lande Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Die Implementierung eines Universal Web Service Architecture mit Ajax" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 355 users browsing the articles directory |
|
|