Warum sollte man REST anstelle von SOAP-basierten Diensten verwenden? [geschlossen]

153

Ich habe heute an einer interessanten Demo zu REST teilgenommen, konnte mir jedoch keinen einzigen Grund vorstellen (noch wurde einer vorgestellt), warum REST ohnehin besser oder einfacher zu verwenden und zu implementieren ist als ein SOAP-basierter Services-Stack.

Was sind einige der Gründe, warum jemand in der "realen Welt" REST anstelle der SOAP-basierten Dienste verwendet?

AngryHacker
quelle
37
Beziehen Sie sich mit Webdiensten auf Webdienste im SOAP-Stil? Denn soweit ich weiß, können Sie auch RESTful-Webdienste haben.
James McMahon

Antworten:

160

Weniger Overhead (kein SOAP-Umschlag zum Einwickeln jedes Anrufs)

Weniger Duplizierung (HTTP repräsentiert bereits Vorgänge wie DELETE, PUT, GET usw., die ansonsten in einem SOAP-Umschlag dargestellt werden müssen).

Standardisierter - HTTP-Vorgänge sind gut verstanden und funktionieren konsistent. Einige SOAP-Implementierungen können schwierig werden.

Besser lesbar und testbar (schwieriger, SOAP mit nur einem Browser zu testen).

Sie müssen kein XML verwenden (für SOAP müssen Sie das auch nicht, aber es macht kaum Sinn, da Sie bereits den Umschlag analysieren).

Bibliotheken haben SOAP (irgendwie) einfach gemacht. Aber Sie abstrahieren viel Redundanz darunter, wie ich bemerkt habe. Ja, theoretisch kann SOAP andere Transporte durchlaufen, um zu vermeiden, dass auf einer Ebene ähnliche Dinge ausgeführt werden. In Wirklichkeit erfolgt jedoch fast jede SOAP-Arbeit, die Sie jemals ausführen werden, über HTTP.

Kendall Helmstetter Gelner
quelle
1
Ich möchte hinzufügen, dass plattformübergreifende SOAP-Kommunikation auch eine PITA sein kann (war das nicht Teil des Punktes von SOAP?!?).
Justin Bozonier
7
Funktioniert auch hervorragend mit der HTTP-Infrastruktur - z. B. werden GETs zusammen mit der Verwendung der zuletzt geänderten und etags aggressiv zwischengespeichert
James Strachan,
Es hilft auch, gut mit Webbrowsern zusammenzuarbeiten, um Ihren Diensten einen universellen Client zur Verfügung zu stellen :)
James Strachan
2
Ich würde argumentieren, dass SOAP gut standardisiert ist. Wenn Sie meinen, dass Implementierungen unausgereift sind, ist es möglicherweise gut, dies klarer zu machen. Ich würde einige Beweise für diese Ansicht schätzen, falls Sie dies vorschlagen. Ich würde auch fragen, ob REST besser lesbar ist. Dies hängt ganz davon ab, wie Sie Ihre Inhalte formatieren. Denken Sie auch daran, dass XML so konzipiert ist, dass es von Menschen gelesen werden kann, obwohl es bekanntlich ausführlich ist.
Howard 11.
6
HTTP ist genauso standardisiert wie SOAP und gibt es schon länger, sodass Implementierungen auf der ganzen Linie wirklich stabil und wirklich interoperabel sind. SOAP wird auch bei identischem Inhalt aufgrund des Umschlags, in den der Inhalt eingewickelt ist, von Natur aus weniger lesbar sein. In der Praxis habe ich in den letzten Jahren festgestellt, dass JSON über HTTP die beste Kombination ist, die gerade lesbar genug ist noch kompakter.
Kendall Helmstetter Gelner
36

RESTful- Services sind viel einfacher zu nutzen als SOAP- basierte (reguläre) Services. Der Grund dafür ist, dass REST auf normalen HTTP-Anforderungen basiert, wodurch die Absicht aus dem Typ der gestellten Anforderung abgeleitet werden kann (GET = Retrive, POST = Write, DELETE = Remove, etc ...) und vollständig zustandslos ist. Auf der anderen Seite könnte man argumentieren, dass es weniger flexibel ist, da es das Konzept eines Nachrichtenumschlags, der den Anforderungskontext enthält, aufhebt.

Nach meiner Erfahrung wurde SOAP für Dienste innerhalb des Unternehmens bevorzugt, und REST wurde für Dienste bevorzugt, die als öffentliche APIs verfügbar gemacht werden.

Mit Tools wie WCF im .NET Framework ist es sehr trivial, einen Service als REST oder SOAP zu implementieren.

Einige relevante Lektüre:

Eric Schoonover
quelle
9
Nach meinem Verständnis können WSDL-Dateien zum Generieren von Klassen verwendet werden, um die Webdienstmethoden verfügbar zu machen. Dies macht den Verbrauch der Dienste sicherlich so einfach wie das Aufrufen einer Funktion? Können Sie bitte Ihre Ansicht näher erläutern?
Howard 11.
1
Howard May: Angenommen, Sie rufen Funktionen nur mit primitiven Datentypen auf, ist dies sicherlich richtig. Aber in diesem Fall kann man nicht genau argumentieren, dass SOAP einfacher ist als Ruhe. Wenn Sie komplexe Datentypen haben, funktioniert die WSDL-Verarbeitung möglicherweise problemlos zwischen zwei Computern mit denselben WS-Stapeln. Aber Sie werden unweigerlich Probleme haben, sobald Sie Stapel mischen. Es ist nicht mehr so ​​einfach, wenn Sie sich manuell mit WSDL befassen müssen, um Inkompatibilitäten zu beheben.
Joseph Holsten
1
Im Jahr 2014 unterstützen fast alle Plattformen, auch alte, WSDL. Proxy-Klassen machen die Verwendung der API extrem einfach. Wir implementieren einen Push-Service und ich denke über REST nach, aber ich habe wirklich Probleme, einen Nutzen zu erkennen.
JohnOpincar
13

Ich gehe davon aus, dass Sie mit "Web Services" SOAP und die WS- * -Standards meinen. (Sonst könnte ich argumentieren , dass REST - Service ist "Web - Service") .

Das kanonische Argument ist, dass REST-Services dem Design des Webs, dh dem Design von HTTP und der zugehörigen Infrastruktur, besser entsprechen. Die Verwendung eines REST-Service ist daher besser mit vorhandenen Web-Tools und -Techniken kompatibel.

Wenn Sie sich mit Einzelheiten befassen, stellen Sie natürlich fest, dass beide Ansätze in unterschiedlichen Szenarien Stärken haben. Sind es diese Besonderheiten, die Sie interessieren?

Bruce
quelle
10

Der Overhead ist nicht so wichtig wie eine gute Architektur.

REST ist kein Protokoll, sondern eine Architektur, die ein gutes skalierbares Design fördert. Es wird oft gewählt, weil zu viel Freiheit in RPC leicht zu einem schlechten Design führen kann.

Der andere Grund sind die vorhersehbaren Kosten für RESTful-Protokolle über HTTP, da vorhandene Technologien (hauptsächlich Proxys) genutzt werden können. Die anfänglichen RPC-Kosten sind recht niedrig, steigen jedoch mit zunehmender Lastintensivierung tendenziell erheblich an.

Piotr Czapla
quelle
7

REST ist implementierungsunabhängig und viel transparenter. Dies macht es ideal für öffentliche APIs, insbesondere für große Websites wie Flickr, Amazon oder Digg, die ihre APIs als Marketing-Tools verwenden und wirklich möchten, dass Benutzer ihre Daten konsumieren. Sie möchten nicht 1000 unerfahrene Entwickler in der Hand halten, die versuchen, die fehlerhafte SOAP-Bibliothek ihrer Skriptsprache ihrer Wahl zu debuggen.

Im Vergleich zu SOAP und WSDL, die besser für interne Anwendungen geeignet sind, bei denen Sie an beiden Enden Drop-In-Bibliotheken und bekannte Hinweise haben. (Und Sie müssen sich möglicherweise nicht um Dinge wie Lastausgleich im Internet-Maßstab, HTTP-Caching usw. kümmern.) Dann erhalten Sie APIs, die selbst dokumentiert sind, Typen usw. ohne Arbeit beibehalten.

joelhardi
quelle
Eine gute Antwort, aber ich würde nicht zustimmen, dass SOAP bedeutet, dass Sie keinen Lastausgleich im Internet-Maßstab haben können.
HDave
7

Ich muss Roy Fieldings hervorragendste Dissertation zu diesem Thema lesen . Er ist ein ausgezeichneter Fall und war auf jeden Fall WAY seiner Zeit voraus , als er es schrieb (2000).

Piko
quelle
5

Mit REST können Ihre nicht mutierenden Operationen (die im Allgemeinen das GET-Verb verwenden) zwischengespeichert werden . Das heißt, vom Client zwischengespeichert und / oder von Proxys zwischengespeichert. Dies kann ein großer Gewinn sein!

David
quelle
8
Das ist einfach "HTTP richtig verwenden" und nicht REST.
Aehlke
0

Es ist super einfach und schlank. Sie können dies mit dem Browser über http verb: GET tun. Ich habe keinen Browser gefunden, der generische http POST-Anfragen einfach manuell ausführen kann

Ray Lu
quelle
1
Kasse Geiger. Es ist kein Browser, aber es ist eine großartige Möglichkeit, HTTP-POSTs ohne Code zu erstellen. fiddler2.com/fiddler2
Eric Schoonover
Normalerweise ändere ich bestehende Anfragen mit Charles. Ich habe auch Fiddler.
Ray Lu
0

Hier ist ein Datenpunkt: Amazon bietet seine APIs sowohl im REST- als auch im SOAP-Format an und 85% der Nutzung erfolgt über REST.

REST ist einfacher zu implementieren, leichter zu verstehen und bietet eine höhere Leistung.

pbreitenbach
quelle
7
Haben Sie Referenzen für Ihre Aussage "höhere Leistung"?
James McMahon
3
Woher haben Sie die 85% Auslastung? Das ist sehr gut zu wissen (wenn ich Beweise sehen kann)
schmoopy
3
Das manuelle Lesen einer API-Spezifikation, das Drucken von Seiten usw. ist einfacher zu implementieren als "Rechtsklick, Servicereferenz hinzufügen"? (VS2010)
BlueChippy
@schmoopy Von Amazon Blog: aws.typepad.com/aws/2005/09/rest_vs_soap.html
Joerage