Verbunden:
Was sollte ich bei der Entscheidung, ob ein Webdienst mithilfe von SOAP oder REST implementiert werden soll (womit ich HTTP / XML auf RESTful-Weise meine), beachten und woran sollte ich denken? Ich gehe davon aus, dass dies keine Einheitsgröße ist. Wie wähle ich die zu verwendende aus?
web-services
rest
wsdl
Howard May
quelle
quelle
Antworten:
Die beiden Protokolle werden in der realen Welt sehr unterschiedlich verwendet.
SOAP (unter Verwendung von WSDL) ist ein schwerer XML-Standard, der sich auf die Dokumentübergabe konzentriert. Dies hat den Vorteil, dass Ihre Anfragen und Antworten sehr gut strukturiert sein und sogar eine DTD verwenden können. Der Nachteil ist, dass es sich um XML handelt und sehr ausführlich ist. Dies ist jedoch gut, wenn zwei Parteien einen strengen Vertrag benötigen (z. B. für die Kommunikation zwischen Banken). Mit SOAP können Sie auch Dinge wie WS-Sicherheit auf Ihre Dokumente legen. SOAP ist im Allgemeinen transportunabhängig, was bedeutet, dass Sie nicht unbedingt HTTP verwenden müssen.
REST ist sehr leicht und stützt sich bei seiner Arbeit auf den HTTP-Standard. Es ist großartig, einen nützlichen Webdienst schnell zum Laufen zu bringen. Wenn Sie keine strenge API-Definition benötigen, ist dies der richtige Weg. Die meisten Webdienste fallen in diese Kategorie. Sie können Ihre API versionieren, damit Aktualisierungen der API sie nicht für Benutzer beschädigen, die alte Versionen verwenden (sofern sie eine Version angeben). REST erfordert im Wesentlichen HTTP und ist formatunabhängig (dh Sie können XML, JSON, HTML usw. verwenden).
Im Allgemeinen verwende ich REST, da ich keine ausgefallenen WS- * -Funktionen benötige. SOAP ist jedoch gut, wenn Computer Ihren Webservice mithilfe einer WSDL verstehen sollen. REST-Spezifikationen sind im Allgemeinen nur für Menschen lesbar.
quelle
Die folgenden Links enthalten nützliche Informationen zu WSDL und REST, einschließlich Vor- und Nachteile
Ein paar wichtige Punkte sind das
1) SOAP wurde für eine verteilte Computerumgebung entwickelt, während REST für eine Punkt-zu-Punkt-Umgebung entwickelt wurde.
2) Mit WADL kann die Schnittstelle für REST-Services definiert werden.
http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and -wadl
quelle
In Bezug auf WSDL (was "SOAP" bedeutet) als "schwer". Schwere Angelegenheiten wie? Wenn das Toolset das ganze "schwere Heben" für Sie erledigt, warum ist es dann wichtig?
Ich musste noch nie eine komplizierte REST-API verwenden. Wenn ich das tue, erwarte ich mir eine WSDL, die meine Tools gerne in eine Reihe von Proxy-Klassen konvertieren, sodass ich einfach scheinbar Methoden aufrufen kann. Stattdessen vermute ich, dass zum Konsumieren einer nicht trivialen REST-basierten API eine erhebliche Menge an "leichtem" Code von Hand geschrieben werden muss.
Selbst wenn das alles erledigt ist, haben Sie immer noch lesbare Dokumentation in Code übersetzt, mit dem damit verbundenen Risiko, dass die Menschen sie falsch lesen. Da WSDL eine maschinenlesbare Beschreibung des Dienstes ist, ist es viel schwieriger, ihn "falsch zu lesen".
Nur ein Hinweis: seit diesem Post, ich habe die Möglichkeit, die Arbeit mit einem mäßig komplizierte REST - Service hat. Ich wünschte mir tatsächlich eine WSDL oder eine gleichwertige, und ich musste tatsächlich viel Code von Hand schreiben. Tatsächlich wurde ein wesentlicher Teil der Entwicklungszeit damit verbracht, die Codeduplizierung des gesamten Codes zu entfernen, der verschiedene Servicevorgänge "von Hand" nannte.
quelle
Dies gehört wahrscheinlich wirklich als Kommentar in einige der oben genannten Beiträge, aber ich habe noch nicht den Repräsentanten, um das zu tun, also geht es weiter.
Ich finde es interessant, dass viele der häufig für SOAP und REST genannten Vor- und Nachteile (IMO) sehr wenig mit den tatsächlichen Werten oder Grenzen der beiden Technologien zu tun haben. Der wahrscheinlich am häufigsten zitierte Profi für REST ist, dass es "leicht" oder eher "menschlich lesbar" ist. Auf einer Ebene ist dies sicherlich richtig, REST hat eine niedrigere Eintrittsbarriere - es gibt weniger erforderliche Struktur als SOAP (obwohl ich denen zustimme, die gesagt haben, dass gutes Werkzeug hier weitgehend die Antwort ist -, ist ein Großteil des SOAP-Werkzeugs zu schlecht ziemlich schrecklich).
Über diese anfänglichen Eintrittskosten hinaus ergibt sich der REST-Eindruck meiner Meinung nach aus einer Kombination der Form der Anforderungs-URLs und der Komplexität der Daten, die von den meisten REST-Diensten ausgetauscht werden. REST fördert tendenziell einfachere, besser lesbare Anforderungs-URLs, und die Daten sind tendenziell auch besser verdaulich. Inwieweit sind diese jedoch REST inhärent und inwieweit sind sie nur zufällig. Die einfachere URL-Struktur ist ein direktes Ergebnis der Architektur - sie kann jedoch auch auf SOAP-basierte Dienste angewendet werden. Die besser verdaulichen Daten sind eher auf das Fehlen einer definierten Struktur zurückzuführen. Dies bedeutet, dass Sie Ihre Datenformate besser einfach halten sollten, oder dass Sie viel Arbeit haben werden. Also hier die zusätzliche Struktur von SOAP,
Für den Austausch strukturierter Daten zwischen Computersystemen bin ich mir nicht sicher, ob REST von Natur aus besser ist als SOAP (oder umgekehrt), sie sind einfach unterschiedlich. Ich denke, der obige Vergleich von REST vs SOAP mit dynamischer vs. statischer Typisierung ist gut. Wo dyanmische Sprachen dazu neigen, Probleme zu bekommen, ist die langfristige Wartung und Instandhaltung eines Systems (und langfristig spreche ich nicht ein oder zwei Jahre, ich spreche 5 oder 10). Es wird interessant sein zu sehen, ob REST im Laufe der Zeit vor denselben Herausforderungen steht. Ich neige dazu zu glauben, dass ich mich beim Aufbau eines verteilten Informationsverarbeitungssystems für SOAP als Kommunikationsmechanismus interessieren würde (auch aufgrund der Schichtung des Übertragungs- und Anwendungsprotokolls und der Flexibilität, die es bietet, wie oben erwähnt).
An anderen Stellen scheint REST jedoch angemessener zu sein. AJAX zwischen dem Client und seinem Server (unabhängig von der Nutzlast) ist ein wichtiges Beispiel. Die Langlebigkeit dieser Art von Verbindung ist mir nicht besonders wichtig, und Benutzerfreundlichkeit und Flexibilität sind ein Höchstmaß. Ebenso, wenn ich einen schnellen Zugriff auf einen externen Service benötigte und nicht dachte, dass ich mich um die Wartbarkeit der Interaktion im Laufe der Zeit kümmern würde (wieder gehe ich davon aus, dass REST mich hier mehr kosten wird, in eine Richtung oder eine andere), dann könnte ich REST wählen, nur damit ich schnell ein- und aussteigen kann.
Auf jeden Fall handelt es sich um tragfähige Technologien, und je nachdem, welche Kompromisse Sie für eine bestimmte Anwendung eingehen möchten, können sie Ihnen gute (oder schlechte) Dienste leisten.
quelle
REST ist kein Protokoll; Es ist ein architektonischer Stil. Oder ein Paradigma, wenn Sie wollen. Das bedeutet, dass SOAP viel lockerer definiert ist. Für einfaches CRUD können Sie sich auf Standardprotokolle wie Atompub stützen, aber für die meisten Dienste stehen Ihnen mehr Befehle zur Verfügung.
Als Verbraucher kann SOAP je nach Sprachunterstützung ein Segen oder ein Fluch sein. Da SOAP weitgehend einem streng typisierten System nachempfunden ist, funktioniert es am besten mit statisch typisierten Sprachen. Für eine dynamische Sprache kann es leicht mürrisch und überflüssig werden. Darüber hinaus ist die Client-Bibliotheksunterstützung außerhalb der Welt von Java und .NET nicht so gut
quelle
Für mich sollten wir vorsichtig sein, wenn wir das Wort Webdienst verwenden. Wir sollten immer angeben, ob es sich um einen SOAP-Webdienst, einen REST-Webdienst oder eine andere Art von Webdiensten handelt, da wir hier über verschiedene Dinge sprechen und die Leute nicht mehr verstehen, wenn wir alle Webdienste genannt haben.
Grundsätzlich sind SOAP-Webdienste seit Jahren sehr gut etabliert und folgen einer strengen Spezifikation, die beschreibt, wie mit ihnen basierend auf der SOAP-Spezifikation kommuniziert wird. Jetzt sind REST-Webdienste etwas neuer und sehen im Grunde genommen einfacher aus, da sie kein Kommunikationsprotokoll verwenden. Grundsätzlich senden und empfangen Sie bei Verwendung eines REST-Webdienstes einfaches XML. Die Leute mögen es, weil sie die XML-Datei so analysieren können, wie sie es möchten, ohne sich mit einem komplexeren Kommunikationsprotokoll wie SOAP befassen zu müssen.
Für mich sind REST-Services fast so, als würden Sie ein Servlet anstelle eines SOAP-Webdienstes erstellen. Das Servlet empfängt Daten und gibt Daten zurück. Das Format der Daten basiert auf XML. Wir können uns auch vorstellen, etwas anderes als XML zu verwenden, wenn wir wollen. Zum Beispiel könnten Tags anstelle von XML verwendet werden, und das wäre nicht mehr REST, sondern etwas anderes (könnte in Bezug auf das Gewicht sogar noch leichter sein, da XML von Natur aus nicht leicht ist). Würden wir das immer noch einen Webdienst nennen? Ja, wir könnten, aber das wird keinem aktuellen Standard folgen, und dies ist das Hauptproblem hier, wenn wir anfangen, alle Webdienste aufzurufen, aber wir können es so machen, wie wir es wollen, dann verlieren wir auf der Interoperabilitätsseite der Dinge. Das bedeutet, dass das Format der Daten, die mit dem Webdienst ausgetauscht werden, nicht mehr standardisiert ist.
Was die Leute mit SOAP nicht mögen, ist, dass sie es schwer verstehen und die Abfragen nicht manuell generieren können. Computer können dies jedoch sehr gut, daher müssen wir hier klar sein: Sollen Webdienstabfragen und -antworten direkt von den Endbenutzern verwendet werden, oder stimmen wir zu, dass Webdienste unter der API liegen, die von Computersystemen auf der Grundlage einiger normalisierter Systeme aufgerufen wird Standards?
quelle
SEIFE : Es kann auch über SMTP transportiert werden, dh wir können den Dienst auch im einfachen E-Mail-Textformat aufrufen
Es muss ein zusätzliches Framework / eine zusätzliche Engine in einem Webdienst-Consumer-Computer vorhanden sein, um SOAP-Nachrichten in die jeweilige Objektstruktur in verschiedenen Sprachen zu konvertieren.
SICH AUSRUHEN : Jetzt unterstützt WSDL2.0 auch die Beschreibung des REST-Webdienstes
Wir können verwenden, wenn Sie Ihren Dienst als leichtgewichtig gestalten möchten, z. B. Anrufe von Mobilgeräten wie Mobiltelefonen, PDAs usw.
quelle
Für Unternehmenssysteme, in denen Ihr System auf Ihre Unternehmen beschränkt ist, ist es einfacher und angemessen, Seife zu verwenden, da Sie fast die Kontrolle über Kunden haben. Es ist einfacher, da es eine Vielzahl von Tools gibt, die Klassen (Proxys) erstellen und so aussehen, als würden Sie Ihr reguläres OOP ausführen, das Ihrer Java- oder .net-Umgebung entspricht (in der die meisten Unternehmen verwenden).
Ich würde REST für Anwendungen mit Internetverbindung verwenden, um Schnittstellen (wie Twitter-API) verfügbar zu machen, da Clients Javascripts oder HTML oder andere verwenden können, bei denen die Eingabe nicht streng ist. REST liberaler zu sein macht mehr Sinn.
Auch für Kunden mit Internetanschluss (World Wide Web) ist es einfacher, JSON oder XML zu analysieren, die aus einer Rest-Oberfläche stammen, als reine XML-Dateien, die aus einer Seifenschnittstelle stammen. Es ist schwierig, Proxys für Javascript zu verwenden, und Javascript unterstützt natürlich keine Objekte. Wenn Sie REST mit Javascript verwenden, analysieren Sie normalerweise nur den JSON-String und schon sind Sie ausgeschaltet. Internet-Schnittstellen sind normalerweise sehr einfach (daher meistens einfach zu analysieren) und erfordern normalerweise keine Konsistenz, weshalb REST ausreichend ist.
Für Unternehmensanwendungen halte ich REST nicht für angemessen, da Transaktionen, Sicherheit, strenge Typisierung und Schemata bei der Entwicklung von Unternehmensanwendungen eine sehr wichtige Rolle spielen, weshalb SOAP besser für sie geeignet ist.
Mein Fazit ist, dass SOAP für Enterprise-Systeme ist, REST für das Internet oder das WWW. Sie können es austauschbar verwenden, aber es fällt Ihnen möglicherweise schwer, das richtige Werkzeug für den Job nicht zu verwenden.
Entschuldigung für mein schlechtes Englisch.
quelle
Zur Verteidigung von REST folgt es genau den Prinzipien von HTTP und Adressierbarkeit, z. B. Leseoperationen verwenden GET, Aktualisierungsoperationen verwenden POST usw. Ich finde, dass dies ein weitaus saubererer Ansatz ist. Das Oreilly-Buch RESTful Web Services erklärt dies weitaus besser als ich. Wenn Sie es lesen, würden Sie den REST-Ansatz bevorzugen
quelle
Das Toolset auf der Client-Seite wäre eins. Und die Vertrautheit mit SOAP-Diensten die andere. Heutzutage gehen immer mehr Dienste den RESTful-Weg, und das Testen solcher Dienste kann mit einfachen cURL-Beispielen durchgeführt werden. Es ist jedoch nicht allzu schwierig, beide Methoden zu implementieren und die größtmögliche Nutzung durch Clients zu ermöglichen.
Wenn Sie eine auswählen müssen, würde ich REST vorschlagen, es ist einfacher.
quelle
Die vorherigen Antworten enthalten viele Informationen, aber ich denke, es gibt einen philosophischen Unterschied, auf den nicht hingewiesen wurde. SOAP war die Antwort auf "Wie schaffen wir einen modernen, objektorientierten, plattform- und protokollunabhängigen Nachfolger von RPC?". REST entwickelte sich aus der Frage: "Wie können wir die Erkenntnisse, die HTTP für das Web so erfolgreich gemacht haben, für verteiltes Computing nutzen?"
Bei SOAP geht es darum, Ihnen Tools zur Verfügung zu stellen, mit denen verteilte Programmierung wie ... Programmierung aussieht. REST versucht, einen Stil zur Vereinfachung verteilter Schnittstellen festzulegen, sodass verteilte Ressourcen wie verteilte HTML-Seiten aufeinander verweisen können. Ein Weg, dies zu tun, ist der Versuch, Operationen (meistens) auf "CRUD" für Ressourcen zu beschränken (erstellen, lesen, aktualisieren, löschen).
REST ist noch jung - obwohl es auf "von Menschen lesbare" Dienste ausgerichtet ist, schließt es Introspection-Dienste usw. oder die automatische Erstellung von Proxys nicht aus. Diese wurden jedoch nicht standardisiert (wie ich schreibe). SOAP bietet Ihnen diese Dinge, aber (IMHO) gibt Ihnen "nur" diese Dinge, während der von REST auferlegte Stil aufgrund seiner Einfachheit bereits die Verbreitung von Webdiensten fördert. Ich selbst würde Neulinge dazu ermutigen, sich für REST zu entscheiden, es sei denn, es gibt bestimmte SOAP-Funktionen, die sie verwenden müssen.
Wenn Sie also meiner Meinung nach eine "Greenfield" -API implementieren und nicht so viel über mögliche Clients wissen, würde ich REST als den Stil wählen, den es fördert, um Schnittstellen verständlich und einfach zu entwickeln. Wenn Sie viel über Client und Server wissen und es spezielle SOAP-Tools gibt, die beiden das Leben leichter machen, wäre ich in Bezug auf REST jedoch nicht religiös.
quelle
Sie können Ihre WSDL-speienden WCF-Webkomponenten einfach auf andere Verwendungszwecke umstellen, indem Sie einfach Ihre Konfigurationseinstellungen ändern. Sie können über HTTP und dann auch Pipes, TCP, benutzerdefinierte Protokolle usw. benennen, ohne Ihren Code ändern zu müssen. Ich glaube, dass WCF-Komponenten auch einfacher für Dinge wie Sicherheit, bidirektionale Anrufe, Transaktionen, Parallelität usw. eingerichtet werden können.
REST beschränkt Sie so ziemlich auf HTTP (was in vielen Fällen in Ordnung ist).
quelle
Ich weiß, dass diese Diskussion alt ist, aber nachdem ich alle Antworten gelesen und kommentiert habe, glaube ich, dass jeder den wichtigsten Punkt über den Unterschied zwischen den beiden Systemen übersehen hat: SOAP verwendet komplexe Typen, um Ihnen nicht nur die Daten zu geben, sondern auch zu validieren es und halten Sie es in der strengen Typenbezeichnung, für die es definiert wurde. Eine WSDL gibt Auskunft über das Datenformat und den Datentyp, ermöglicht das Hinzufügen von Regeln im Reg-Ex-Musterstil und definiert, wie oft ein Datenelement in einer Anforderung / Antwort zulässig sein darf und darf . Ruhe dagegen hat keinen dieser Mechanismen.
SOAP ist komplex und schwer, da Sie damit komplexe schwere hierarchische Daten senden können. REST ist einfacher Text, wobei der Ursprung und der Endpunkt die Regeln sortieren.
SOAP ist geschäftsunabhängig, da alle Datenregeln in das Dokument eingebettet sind.
Der Unterschied zwischen SOAP und REST besteht darin, dass SOAP ein in sich geschlossenes geschäftsorientiertes Schema ist. REST ist ein Textdokument.
quelle