Dieser Artikel wurde maschinell übersetzt.
Service Station
Weitere Informationen zu REST
Inhalt
Was ist besser, REST oder SOAP?
Was ist mit Sicherheit? Nicht SOAP-mehr Sicherheit als REST?
Was ist mit Transaktionen?
Was ist Interoperabilität? Sollen ist nicht SOAP über die Interoperabilität werden? Nicht SOAP-Interoperabilität als REST?
Aber was Metadaten? Was geschieht, wenn REST also so interoperable – es gibt keine WSDL mit REST und ohne WSDL, ich kann nicht generiert einen clientseitigen Proxy einen Dienst aufrufen. REST is hard to use.
Was geschieht, wenn ich möchte einen Transport an andere als HTTP verwenden?
Nachdem alle diese Informationen mitteilt sind nicht mir, dass REST gut für Anwendungen mit Internetverbindung und SOAP für Enterprise-Anwendungen ist?
Endergebnis
In den letzten beiden Spalten habe ich beschrieben die Grundlagen der REST und zum Verfügbarmachen und verbraucht Web Feeds erläutert. In dieser Spalte werde ich eine Reihe von Fragen beantworten, die häufig ausdenken, beim Erstellen von Präsentationen oder Durchführen von Schulungen zur Verwendung von REST zum Dienst-basierte Anwendungen erstellen.
Was ist besser, REST oder SOAP?
Dies ist eine der häufigsten Fragen zu REST erhalte, und es ist wahrscheinlich die am wenigsten gerecht. REST und SOAP sind häufig "Web Services," bezeichnet werdenund eine wird häufig verwendet anstelle des anderen, jedoch völlig unterschiedliche Ansätze sind. REST ist ein Architekturstil zum Erstellen von Client / Server-Anwendungen. SOAP ist eine Protokollspezifikation für den Datenaustausch zwischen zwei Endpunkten.
Vergleichen von REST mit dem remote Procedure Call (RPC)-Stil des Client / Server-Anwendungen erstellen werden genauer. RPC ist eine Formatvorlage (anstelle eines Protokolls, ist SOAP) Erstellen von Client / Server-Anwendungen in der ein Proxy (im Allgemeinen aus Metadaten generiert) wird im Adressbereich des Clients verwendet, um mit dem Server zu kommunizieren und die Proxyschnittstelle imitiert Schnittstelle des Servers. Obwohl SOAP-RPC-Format nicht erforderlich ist, werden die meisten modernen SOAP-Toolkits in Richtung ausgerichtet (mindestens diese Standardeinstellung um) mithilfe von RPC.
Im Gegensatz zu RPC, REST verfügt nicht über den Proxy Metadaten generiert (Siehe die nächste Frage Informationen), d. h., die der Client weniger auf den Dienst gekoppelt. Da REST auf die Semantik des HTTP-basiert, können auch Anforderungen für Daten (GET-Anforderungen) zwischengespeichert. RPC-Systeme verfügen im Allgemeinen keine solche Infrastruktur (und sogar bei RPC mit SOAP über HTTP, können nicht SOAP-Antworten zwischengespeichert, da SOAP das Verb HTTP POST verwendet, das als unsicher betrachtet wird). SOAP-eschews absichtlich HTTP, insbesondere damit SOAP, über andere Protokolle zu arbeiten, so dass Sie tatsächlich etwas disingenuous SOAP-basierte Dienste Webdienste aufrufen.
Meiner Sicht ist, dass REST und SOAP verwendet werden, können um ähnliche Funktionalität implementieren, aber im Allgemeinen SOAP verwendet, wenn ein bestimmtes Feature von SOAP erforderlich ist und die Vorteile von REST Sie in der Regel die beste Option andernfalls können.
Was ist mit Sicherheit? Nicht SOAP-mehr Sicherheit als REST?
Diese Frage berührt eine eigene Haustier Peeves ist die Antwort offensichtlich keine. Es ist nur als einfach ein REST-Diensts sichere vornehmen, wie er einen SOAP-basierten Dienst sicher. In den meisten Fällen REST oder SOAP ist das Sicherheitssystem identisch: eine Art von HTTP-basierte Authentifizierung und SSL (Secure Sockets Layer). Zwar technisch die Technologie für sichere Konversationen über HTTP jetzt TLS (Transport Layer Security) aufgerufen wird, ist SSL immer noch der Name am häufigsten verwendet.
Was true ist, dass ein SOAP-basierten Dienst, aufgrund der zusätzlichen Protokolle in verschiedenen WS-angegeben * Spezifikationen, ist Unterstützung End-to-End-Nachrichtensicherheit. Dies bedeutet, dass wenn Sie SOAP-Nachrichten von Endpunkt zu Endpunkt zu Endpunkt, über die Protokolle dieselben oder unterschiedliche übergeben die Nachricht sicheren ist. Wenn Ihre Anwendung diese bestimmte Funktion, SOAP und WS-* ist definitiv die Möglichkeit, zu wechseln. REST wahrscheinlich wäre eine Option hier wegen ihrer Abhängigkeit von HTTP nicht und grundsätzlich Sie würden werden Entwerfen einer Multiprotokoll-Anwendung. Ich glaube, dass die Tatsache, die mit WS-SOAP * ermöglicht End-to-End Nachrichtenebenensicherheit ist die Quelle der Missverständnis, dass SOAP-basierte Dienste sicherer als Rest-Dienste sind.
Einen anderen Bereich in dem der WS-* Leute haben viel Zeit damit verbracht und Aufwand ist vor kurzem Verbundsicherheit. Einfache Idee Verbundidentität wird Vertrauensstellung zwischen zwei Unternehmen, erstellt, wobei authentifizierte Benutzer von einem Unternehmen vertrauenswürdige und betrachtet werden können von einem anderen Unternehmen ohne das zweite Unternehmen muss die Authentifizierungsinformationen authentifiziert (Benutzername und Kennwort in der Regel). Verschiedene WS-* Spezifikationen sind die wichtigsten Kreditoren-Implementierungen und Microsoft ist die Ideen in Active Directory über Active Directory Federation Services (ADFS) integrieren.
In den Bereich der Verbundsicherheit, WS-* Bereich hat sicherlich weitere Standards als Rest Bereich (und dies wird wahrscheinlich immer weiterhin der Fall sein), aber es Bemühungen gibt um Verbundsicherheit in die Welt der REST zu unterstützen. OpenID ist eine solche Aufwand. Der .NET Service Bus (Bestandteil von Windows Azure) enthält auch einen Verbundidentität-Dienst, welche funktioniert mit HTTP (und daher REST) als es mit SOAP-basierte Dienste ebenso einfach ist.
Was ist mit Transaktionen?
Hier ist ein weiterer Bereich in der SOAP und WS-* bieten explizite Unterstützung für einen "erweiterten"Funktion und der REST hat keine. WS-atomaren Transaktionen unterstützt verteilte, Zweiphasen-Commit-Transaktionssemantik über SOAP-basierte Dienste. REST bietet keine Unterstützung für verteilte Transaktionen.
Wenn Sie etwa Transaktionen in einem Rest System möchten, erstellen Sie im Allgemeinen eine neue Ressource. (Eine neue Ressource erstellen, wenn Sie ein Problem mit einem Rest System, i. d. r. ausführen die meisten Probleme behoben.) Sie können eine Ressource Transaktion aufgerufen haben. Wenn der Client muss etwas Transaktionsnachrichten (z. B. Geld zwischen zwei Bankkonten übertragen), erstellt der Client eine Transaktion-Ressource, die alle erforderlichen Ressourcen betroffen (in meinem Beispiel zwei Bankkonten) auf diese Weise einer POST an der Transaktion Factory URI angibt. Der Client kann dann Aktualisierungen durch Senden einer PUT an der Transaktion URI durchführen und schließen Sie die Transaktion durch Senden einer DELETE an den URI.
Natürlich erfordert, einige Menge Hand Codieren und explizite Kontrolle über Ihr System, während das System WS atomaren Transaktionen mehr automatische ist, da (im Fall von Windows Communication Foundation), die Common Language Runtime Sanitär-gebunden ist.
Wenn Ihr System über verschiedene Systeme hinweg absolut atomaren Transaktionssemantik benötigt, ist WS atomaren Transaktionen wahrscheinlich die Möglichkeit zu wechseln. Mithilfe von verteilte Transaktionen auf diese Weise kann oder nicht smart da die Kopplung zwischen den beiden Systemen erhöht und potenzielle Probleme erstellt, wenn Sie den Code an beiden Enden steuern werden nicht. Aber am wichtigsten ist das Verwenden des richtigen Tools für die richtige Auftrag, (sobald Sie heraus, welche Rechte Auftrag ermitteln haben).
Verteidigung von REST denke ich es Messe zu sagen, dass bestimmte heutigen verteilt, serviceorientierte Architekturen, zwei Endpunkten Kopplung eng mithilfe einer verteilten Transaktion den optimalen Entwurf möglicherweise nicht ist. Andererseits, Situationen rufen Sie für diese Art von Funktionalität, und wenn Sie es verwenden, SOAP und WS-atomaren Transaktionen.
Was ist Interoperabilität? Sollen ist nicht SOAP über die Interoperabilität werden? Nicht SOAP-Interoperabilität als REST?
Wenn Sie die technische Möglichkeit, die Kommunikation zwischen zwei Endpunkten Divergente Interoperabilität definieren, assert ich, dass REST die Interoperabilität kämpfen hands unten wins.
Seit einen der treibenden Punkte hinter die SOAP-Spezifikation erstellen eine interoperable Möglichkeit zur Kommunikation zwischen verschiedenen Plattformen und andere Sprachen erstellen, werden viele Personen durch diese Assertion überrascht. Aber ein lustiges auf dem Weg zu weit verbreiteten Interoperabilität: Die WS-* Spezifikationen (und KreditorenImplementierungen der besagte Spezifikationen) vorgenommen SOAP-Dienste mehr interoperable statt weniger Interoperabilität.
Das Problem in SOAP und WS-* Bereich ist, große Anzahl unterschiedlicher Standards (und Versionen dieser Standards) aus. Und wenn ein bestimmter Kreditor ein bestimmtes Standard-implementieren möchte, häufig bietet eine Implementierung, die sich nur geringfügig von anderen unterscheidet, Kreditor des Kreditors (oder alle anderen). Dies führt zu Problemen, wenn cross-Kreditor-Grenzen (Sprachen und Betriebssystem).
Natürlich müssen auch SOAP verwenden Sie eine SOAP-Toolkit auf Ihrer Plattform die meisten (aber nicht alle) Plattformen heute haben. Und zum Umgang mit unzähligen WS-* Spezifikationen und Abbildung, welche verwenden (oder nicht zu verwenden), die Auswirkungen der Interoperabilität. Um ehrlich zu sein, ist es Art von ein Chaos draußen.
REST hat hinsichtlich der Plattformen den Vorteil, da müssen Sie den REST Verwenden eines HTTP-Protokollstapel (entweder auf dem Client oder Server) ist. Da fast jeder Plattform und Gerät, die heute hat, würde ich argumentieren, dass REST die breiteste Interoperabilität hat. Angegebenen, mobile Geräte, Haushalt Geräte, POS-Geräte, DVD-Playern und Fernseher alle Internet-Konnektivität verfügen, gibt es mehr und mehr Plattformen, für welche, die müssen einen vollständigen SOAP-Toolkit unmöglich oder unwahrscheinlich ist. Und selbst wenn Sie eine SOAP-Toolkit für eine bestimmte Plattform verfügen, die Wahrscheinlichkeit es die Arbeit mit einer anderen Plattform Implementierung ist nicht 100 %.
Aber was Metadaten? Was geschieht, wenn REST also so interoperable – es gibt keine WSDL mit REST und ohne WSDL, ich kann nicht generiert einen clientseitigen Proxy einen Dienst aufrufen. REST ist schwierig, verwenden.
Es ist WAHR, dass in der Welt von REST, es keine direkte Unterstützung für Generieren von einen Client aus Server-Seite generiert Metadaten ist wie in der Welt der SOAP mit WSDL (Web Service Description Language). Eine Reihe von Maßnahmen werden vorgenommen wird, um solche Supportinformationen in REST, eine eine parallele Spezifikation als WADL (Web Application Description Language) bezeichnet wird. Der andere ist ein Push mit WSDL 2.0 um Rest-Endpunkten zu beschreiben. Ich sage häufig, dass REST einfach ist, jedoch einfach nicht immer einfach bedeutet. SOAP ist einfach (aufgrund der WSDL), aber einfach immer bedeutet nicht einfach.
Ja, wird mithilfe von WSDL einen Proxy für einen SOAP-basierten Dienst einfacher als das Schreiben von Code zum Aufrufen eines REST-Diensts generiert. Aber sobald Sie diesen Proxy generieren, Sie weiterhin um die API erfahren. Nichts in der WSDL teilt Ihnen mit die Methode, um ersten oder zweiten Aufruf oder, ob Sie überhaupt die Methoden in einer bestimmten Reihenfolge aufrufen müssen. Dies sind alle Dinge, die Sie müssen herausfinden, nachdem Sie den Proxy zu generieren und Prototypen der Code, den Dienst zu verwenden sind.
Erstellen einen Client anhand eines REST-Diensts bedeutet, dass Sie Lernressourcen sind, den Dienst und wie es funktioniert, wie Sie den Client erstellen. Sobald Sie abgeschlossen haben, haben Sie ein vollständiges Verständnis der Dienst, dessen Ressourcen und die Interaktion, die Sie mit diesen Ressourcen verfügen können. Für mich ist dies ein großer Vorteil. Da Rest-Dienste führen Sie die Einschränkungen von REST (mindestens diese sollen), ist eine Konvention, die Sie leicht folgen können, wie Sie die verschiedenen Teile des Dienstes ermitteln.
Darüber hinaus sind out in Wilds der Entwickler-Land, die meisten Dienste in etwas häufig bezeichnet einen „ Dienst-Agenten,"eingeschlosseneine weitere Schicht der Dereferenzierung zum Schutz von Clients von Änderungen in der Dienstschicht ist. Dies kann in REST oder SOAP-benötigt.
Ein weiterer Punkt ist, dass Metadaten generierte Proxys Teil Was soll SOAP im RPC-Zeitraum, nämlich Local Remote Transparenz verlassen wurde. Wurde das Konzept der müssen einer API auf dem Client, der die API auf dem Server entspricht betrachtet eine schlechte Idee, aber das ist genau was in den meisten SOAP-basierte Dienste geschieht. Über einen Proxy Metadaten generiert in REST verringert außerdem die Chancen Hyperlinking nutzen. Mithilfe von Hypertext als das Datenbankmodul des Anwendungszustands (HATEOAS) ist eine der Einschränkungen von REST und verwenden es erfordert eine lose Client-API.
Der letzte Punkt ich werde, ist, dass als Unterstützung für REST mehr weit verbreitete wird Clients Erstellen einfacher erhalten und einfacher. Wenn Sie die Windows Communication Foundation (WCF) REST Starter Kit betrachten, enthält Funktionen, Head in diese Richtung. Mithilfe von HTTP viel einfacher als mit der .NET WebRequest/WebResponse-API neue HttpClient-API-erleichtert. Ist auch eine neue einfügen als Serializable XML-Tool, wodurch Sie einen Teil der XML (beispielsweise aus der Dokumentation einen REST-Endpunkt) kopieren und generiert einen .NET Typ, der die XML-Instanz in der Anwendung darstellen kann. Dies ähnelt dem Vorgehen WCF-Tools automatisch für den gesamten Dienst mit WSDL. Im Laufe der Zeit werden diese Tools viel komplexere, die Clienterfahrung in WCF weiter zu vereinfachen, wenn Rest-Dienste verwenden.
Was geschieht, wenn ich möchte einen Transport an andere als HTTP verwenden?
Die allgemeine (etwas Sarkastisches) Antwort aus der REST-Community ist, "Gehe im voraus, etwas beenden Sie es nicht." Realistisch, jedoch REST ist zurzeit an gebunden HTTP, wenn nur, da die meisten Entwickler und Teams von Entwicklern nicht die Zeit für den engineering Aufwand erforderlich, die Semantik von REST erhalten, arbeiten verfügen z. B. TCP/IP.
Die häufige Antwort ist technisch korrekt, da nichts ist verhindern Sie die Konzepte von REST über andere Protokolle implementieren, aber bis Hersteller die Unterstützung für diese hinzufügen, es eine zweifelhafte Angelegenheit für die meisten finde.
Nachdem alle diese Informationen mitteilt sind nicht mir, dass REST gut für Anwendungen mit Internetverbindung und SOAP für Enterprise-Anwendungen ist?
Wenn Sie den Rest dieses Artikels gelesen haben, können Sie wahrscheinlich vorstellen, dass ich denke diese Anweisung verallgemeinerte und false ist. Häufig hören Sie diese Gefühlslage nach erörtern den Mangel an explizite verteilte Transaktionsunterstützung in REST gegenüber explizite Unterstützung in WS-atomaren Transaktionen. Meine Retort ist im Allgemeinen etwa "nun, XML-Webdienste Unterstützung für verteilte Transaktionen, jedoch unterstützt, die bedeuten keinen XML-Webdienste ist nicht für Unternehmen nützlich?"
Meine Punkt ist, dass nicht jeder Technologie jedes Problem löst und vorhanden sind, sind trotzdem unglaublich nützlich für Unternehmen jedoch viel Technologien, die die Personen typischen Features nicht unterstützen diese Unternehmen denken vorstellen.
Wenn ich von Unternehmensanwendungen denken, ich glaube sogar häufig dass Geschwindigkeit und Skalierbarkeit – Skalierbarkeit wird eines der wichtigsten Unterschiede zwischen REST und SOAP. SOAP-Dienste sind viel schwerer zu skalieren als Rest-Dienste, die natürlich ist einer der Gründe, die REST häufig als die Architektur für Dienste ausgewählt ist, die über das Internet (wie Facebook, MySpace, Twitter und usw.) verfügbar gemacht werden.
In Unternehmen müssen Anwendungen häufig auch als gut skalieren. Verwendung von REST bedeutet, dass Sie Vorteil von HTTP-Zwischenspeicherung und andere Features, wie bedingte GET, die Skalierung Dienste unterstützen nutzen können. Viele dieser Techniken können nicht mit SOAP verwendet werden, da SOAP nur über HTTP POST verwendet.
Endergebnis
Ich hoffe, nachdem Sie diese Spalte gelesen, Meinung wird die Antwort "der ist besser, REST oder SOAP-?"ist "Es hängt." Sowohl der REST-Architekturstil und SOAP und die WS-* Protokolle haben vor- und Nachteile beim Erstellen von Diensten. Jene von uns in RESTafarian Ferienlager (Ja, muss ich hier vollständige Offenlegung erteilen: Ich bin definitiv in die Ferienlager) glauben, dass für die meisten Service-Situationen REST mehr Vorteile als SOAP- oder WS-bietet *. Auf der Hand SOAP und WS-* verfügen über einige Features, die einfach (und mögliche) sind, Verwendung von REST zu implementieren. Wenn Sie diese spezifischen Features benötigen, möchten Sie definitiv verwenden, Laufzeiten und Toolkits, die diese Features bereitstellen kann. Obwohl war nicht in dieser Spalte insbesondere über WCF ein nützliches Feature der Übernahme von WCF ist dass REST und SOAP-WS unterstützt-*. Hin und her Verschieben zwischen beiden Welten wird vereinfacht, wenn Sie eine Programmierung und Laufzeitmodell erhalten haben.
Senden Sie Ihre Fragen und Kommentare zu sstation@microsoft.com.
Jon Flanders ist unabhängiger Berater, Referent und Trainer für Pluralsight. Er spezialisiert sich auf in BizTalk Server, Windows Workflow Foundation und Windows Communication Foundation. Sie können Jon unter masteringbiztalk.com/blogs/jon Kontakt.