SOAP oder REST für Web Services? [geschlossen]


384

Ist REST ein besserer Ansatz für Web Services oder SOAP? Oder sind sie unterschiedliche Werkzeuge für unterschiedliche Probleme? Oder handelt es sich um ein nuanciertes Problem - das heißt, ist eines in bestimmten Bereichen etwas besser als das andere usw.?

Ich würde mich besonders über Informationen über diese Konzepte und ihre Beziehung zum PHP-Universum sowie über moderne High-End-Webanwendungen freuen.


6
In der heutigen Welt betrachten Sie JSON-basierten REST-Prozess
ErstwhileIII

Ein verwandter, aber nicht duplizierter Thread: stackoverflow.com/questions/34624813/…
smwikipedia


Antworten:


561

Als ich bei Hewlett-Packard arbeitete, baute ich einen der ersten SOAP-Server, einschließlich Codegenerierung und WSDL-Generierung, aus der ursprünglichen Spezifikation, die gerade entwickelt wurde. Ich empfehle NICHT, SOAP für irgendetwas zu verwenden.

Das Akronym "SOAP" ist eine Lüge. Es ist nicht einfach, es ist nicht objektorientiert, es definiert keine Zugriffsregeln. Es ist wohl ein Protokoll. Es ist Don Box 'schlechteste Spezifikation aller Zeiten, und das ist eine ziemliche Leistung, da er der Mann ist, der "COM" begangen hat.

In SOAP gibt es nichts Nützliches, was mit REST für den Transport und JSON, XML oder sogar einfachem Text für die Datendarstellung nicht möglich ist. Für die Transportsicherheit können Sie https verwenden. Zur Authentifizierung wird die Basisauthentifizierung verwendet. Für Sitzungen gibt es Cookies. Die REST-Version wird einfacher, übersichtlicher, schneller ausgeführt und benötigt weniger Bandbreite.

XML-RPC definiert die Anforderungs-, Antwort- und Fehlerprotokolle klar und es gibt gute Bibliotheken für die meisten Sprachen. XML ist jedoch schwerer als Sie für viele Aufgaben benötigen.


51
Sie haben es versäumt zu erwähnen, dass das Schreiben eines Service-Wrappers für einen REST-Webdienst 100000x länger dauert als das sofortige Generieren von Klassen aus einer SOAP-Webdienst-WSDL. IMO REST ist gut geeignet, um einen Datenblock zu erhalten, mit dem Sie nicht arbeiten müssen. Wenn Sie jedoch ein Objekt erhalten möchten, ist SOAP viel schneller und einfacher zu implementieren. Weitere Informationen finden Sie in meinem Beitrag hier: stackoverflow.com/questions/3285704/…
Josh M.

40
Wenn Sie einen Wrapper generieren möchten, sollten Sie stattdessen einen JSON-Decoder verwenden. Lass SOAP in Frieden ruhen.
Ivo Danihelka

67
Es ist enttäuschend zu sehen, dass diese Antwort so viele positive Stimmen und ein Kopfgeld erhält. Es ist keine hilfreiche Antwort. "In SOAP gibt es nichts Nützliches, was mit REST nicht möglich ist." Dieser Typ hat also jedes mögliche Problem untersucht, das jemand lösen muss, und kann mit Sicherheit sagen, dass Ihr Webdienst kein SOAP verwenden sollte (WS- * scheint hier impliziert zu sein)? Ja, genau. Ich bin es leid, starke Schreie von REST> WS- * oder SOAP zu hören. Es ist kaum vergleichbar.
fade

33
Leser sollten beachten, dass die Erfahrung, dass das OP einen Server für die erste Version von SOAP geschrieben hat, wenig Einfluss auf moderne Versionen von SOAP und die zugehörigen Protokolle hat.
John Saunders

10
Ich habe einen der ersten SOAP-Webdienste erstellt (2002; Google Search API). Nur um zu bestätigen, was mdhughes sagt, war SOAP keine gute Technologie. Glücklicherweise ist es jetzt Vergangenheitsform und niemand erwägt ernsthaft, es außerhalb seltsamer Unternehmenskontexte zu verwenden.
Nelson

198

REST ist eine Architektur, SOAP ist ein Protokoll.

Das ist das erste Problem.

Sie können SOAP-Umschläge in einer REST-Anwendung senden.

SOAP selbst ist eigentlich ziemlich einfach und einfach, es sind die WSS- * Standards darüber hinaus, die es sehr komplex machen.

Wenn es sich bei Ihren Kunden um andere Anwendungen und andere Server handelt, wird das SOAP-Protokoll heute weitgehend unterstützt, und die Grundlagen für das Verschieben von Daten sind in modernen IDEs im Wesentlichen ein Mausklick.

Wenn es sich bei Ihren Verbrauchern eher um RIAs oder Ajax-Clients handelt, möchten Sie wahrscheinlich etwas Einfacheres als SOAP, das für den Client (insbesondere JSON) nativer ist.

Über HTTP gesendete JSON-Pakete sind nicht unbedingt eine REST-Architektur, sondern nur Nachrichten an URLs. Alles perfekt funktioniert, aber die REST-Sprache enthält Schlüsselkomponenten. Es ist jedoch leicht, die beiden zu verwechseln. Nur weil Sie über HTTP-Anforderungen sprechen, bedeutet dies nicht unbedingt, dass Sie über eine REST-Architektur verfügen. Sie können eine REST-Anwendung ohne HTTP haben (dies ist jedoch selten).

Wenn Sie also Server und Konsumenten haben, die mit SOAP "vertraut" sind, können SOAP- und WSS-Stack Ihnen gute Dienste leisten. Wenn Sie mehr Ad-hoc-Aufgaben ausführen und eine bessere Schnittstelle zu Webbrowsern wünschen, kann auch ein leichteres Protokoll über HTTP gut funktionieren.


7
In diesem Fall handelt es sich meiner Meinung nach um zwei Architekturen über ein Protokoll. REST ist wirklich eine Architektur, während SOAP versucht, ein neues Protokoll für das vorhandene Protokoll zu definieren, auf das Sie eine RPC-Architektur anwenden müssen. Dumme-OAP.

2
Dies ist eindeutig eine viel bessere Antwort als die Schimpfe , die auf dieser Seite erscheint
MickyD

102

REST ist ein grundlegend anderes Paradigma als SOAP. Eine gute Lektüre zu REST finden Sie hier: Wie ich meiner Frau REST erklärt habe .

Wenn Sie keine Zeit zum Lesen haben, finden Sie hier die Kurzversion: REST ist ein Paradigmenwechsel, indem Sie sich auf "Substantive" konzentrieren und die Anzahl der "Verben", die Sie auf diese Substantive anwenden können, beschränken. Die einzigen erlaubten Verben sind "get", "put", "post" und "delete". Dies unterscheidet sich von SOAP, wo viele verschiedene Verben auf viele verschiedene Substantive angewendet werden können (dh viele verschiedene Funktionen).

Bei REST werden die vier Verben den entsprechenden HTTP-Anforderungen zugeordnet, während die Substantive durch URLs identifiziert werden. Dies macht die Statusverwaltung viel transparenter als in SOAP, wo häufig unklar ist, welcher Status sich auf dem Server und welcher auf dem Client befindet.

In der Praxis fällt das meiste davon jedoch weg, und REST bezieht sich normalerweise nur auf einfache HTTP-Anforderungen, die Ergebnisse in JSON zurückgeben , während SOAP eine komplexere API ist, die durch Weitergabe von XML kommuniziert. Beide haben ihre Vor- und Nachteile, aber ich habe festgestellt, dass REST meiner Erfahrung nach normalerweise die bessere Wahl ist, da Sie selten oder nie die volle Funktionalität benötigen, die Sie von SOAP erhalten.


5
Die einzigen erlaubten Verben sind "get", "put" und "delete"? Was ist mit POST und OPTIONEN?
Andrew Swan

2
Entschuldigung, ich habe vergessen, POST zu erwähnen. OPTIONEN (und KOPF) werden jedoch nicht als Teil der REST-Spezifikation betrachtet.
Toluju

8
@ Toluju Mir war nicht bewusst, dass REST eine Spezifikation hatte. Es ist ein architektonischer Stil, und obwohl es wahr sein mag, dass OPTIONEN selten verwendet werden, kann man nicht dasselbe über HEAD sagen.
leer

6
HEAD, OPTIONS und TRACE sind Methoden, die sich eher nach Server-Metainformationen als nach dem Inhalt der URL selbst erkundigen. Als solche sind sie für REST-Anwendungen von geringem Nutzen. Ich stehe in einer Spezifikation korrigiert. Die für REST wichtige Hauptspezifikation ist die HTTP-Spezifikation selbst.
Toluju

10
Hinweis: "Ruhe normalerweise ... bezieht sich auf ... Anforderungen, die zu JSON führen" - ist nicht korrekt. Der zurückgegebene Medientyp ist nicht auf ein Format beschränkt oder standardmäßig festgelegt. In der Tat geben viele REST-Services Anwendungs- / XML-, Video- oder andere Medientypen zurück. Nach meiner Erfahrung, beispielsweise in Unternehmen, geben REST-basierte Webdienste XML zugunsten von JSON zurück. In jedem Fall ist es Sache des Dienstes, was zurückgegeben wird, und der Client kann über den HTTP-Header "Accept" an dieser Aushandlung des Inhaltstyps teilnehmen.
Darrell Teague

59

Kurzer Überblick für die Frage 2012:

Bereiche, für die REST wirklich gut funktioniert, sind:

  • Begrenzte Bandbreite und Ressourcen. Denken Sie daran, dass die Rückgabestruktur wirklich in jedem Format vorliegt (vom Entwickler definiert). Außerdem kann jeder Browser verwendet werden, da der REST-Ansatz die Standardverben GET, PUT, POST und DELETE verwendet. Denken Sie auch hier daran, dass REST auch das XMLHttpRequest-Objekt verwenden kann, das die meisten modernen Browser heute unterstützen, wodurch ein zusätzlicher Bonus von AJAX hinzugefügt wird.

  • Völlig staatenlose Operationen.  Wenn eine Operation fortgesetzt werden muss, ist REST nicht der beste Ansatz, und SOAP passt möglicherweise besser dazu. Wenn Sie jedoch zustandslose CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren und Löschen) benötigen, ist REST genau das Richtige.

  • Caching-Situationen.  Wenn die Informationen aufgrund des völlig zustandslosen Betriebs des REST-Ansatzes zwischengespeichert werden können, ist dies perfekt. Dies deckt viele der oben genannten drei Lösungen ab.

Warum sollte ich überhaupt über SOAP nachdenken? Auch hier ist SOAP ziemlich ausgereift und gut definiert und wird mit einer vollständigen Spezifikation geliefert. Der REST-Ansatz ist genau das, ein Ansatz, der für die Entwicklung weit offen ist. Wenn Sie also Folgendes haben, ist SOAP eine großartige Lösung:

  • Asynchrone Verarbeitung und Aufruf. Wenn Ihre Anwendung ein garantiertes Maß an Zuverlässigkeit und Sicherheit benötigt, bietet SOAP 1.2 zusätzliche Standards, um diese Art von Betrieb sicherzustellen. Dinge wie WSRM - WS-Reliable Messaging.

  • Formelle Verträge. Wenn sich beide Seiten (Anbieter und Verbraucher) auf das Austauschformat einigen müssen, gibt SOAP 1.2 die starren Spezifikationen für diese Art der Interaktion an.

  • Stateful Operationen.Wenn die Anwendung Kontextinformationen und die Verwaltung des Konversationsstatus benötigt, verfügt SOAP 1.2 über die zusätzliche Spezifikation in der WS * -Struktur, um diese Dinge zu unterstützen (Sicherheit, Transaktionen, Koordination usw.). Im Vergleich dazu würde der REST-Ansatz die Entwickler dazu bringen, diese benutzerdefinierte Installation zu erstellen.

http://www.infoq.com/articles/rest-soap-when-to-use-each


44

SEIFE bietet derzeit den Vorteil besserer Tools, mit denen ein Großteil des Boilerplate-Codes sowohl für die Service-Schicht als auch für die Generierung von Clients aus einer bestimmten WSDL generiert wird.

REST ist einfacher, kann daher einfacher zu warten sein, liegt im Herzen der Webarchitektur, ermöglicht eine bessere Protokollsichtbarkeit und ist nachweislich auf die Größe des WWW selbst skalierbar. Einige Frameworks wie Ruby on Rails helfen Ihnen beim Erstellen von REST-Diensten, andere sogar beim Schreiben von Clients wie ADO.NET Data Services. Zum größten Teil fehlt jedoch die Werkzeugunterstützung.


32
REST ist einfacher zu warten. Sie müssen lediglich die API-Dokumentation auf kleinste Änderungen an der Struktur der REST-Methoden oder der Struktur der zurückgegebenen Daten überwachen. Wenn Sie eine Änderung sehen, müssen Sie die Änderung nur manuell in Ihrem handgeschriebenen Code vornehmen, der die Antwort der Methode analysiert. Mit SOAP müssen Sie mit der rechten Maustaste auf Ihre Referenz klicken, "Aktualisieren" auswählen und dann einige Kompilierungsfehler beheben. (Sarkasmus kostenlos enthalten.)
Josh M.

10
@JoshM: Wenn Sie handgeschriebenen Code zum Analysieren der Antwort einer generierten Antwort basierend auf einer weichen und flexiblen Spezifikation haben, verwenden Sie REST nicht. Sie haben einen Ressourcenbaum fest codiert. Dies entspricht der Codierung in c: \ windows \ temp oder was auch immer, im Gegensatz zur Abfrage nach dem richtigen Speicherort. Da es eine Weile funktioniert, ist es weder das Richtige noch eine gute Codierungspraxis.
Paul Sonier

1
@PaulSonier: Wie kann die Antwort anhand einer häufig weichen und flexiblen Spezifikation richtig analysiert werden? Ich verstehe, dass hartcodierter spröder Code nicht großartig ist, aber ich suche nach Ratschlägen oder Beispielen auf der Client-Seite von RESTful-APIs und komme bisher zu kurz. Ich denke, das ist es, worauf Josh hinaus will - SOAP benötigt eine Menge Code, aber dafür erhalten Sie einen sichtbaren und durchsetzbaren Vertrag über Dokumentformat und Typensicherheit. RESTful-APIs lassen den Vertrag und das Boilerplate weg und sehen oft einfach genug aus, es spielt keine Rolle, aber ... wie können Sie den Ressourcenbaum nicht fest codieren?
Metamatt

(Ich verstehe das HATEOAS-Argument, verwende jedoch beispielsweise martinfowler.com/articles/richardsonMaturityModel.html als Beispiel. Nach dem Parsen des XML ist noch eine Menge semantischer Interpretation erforderlich, bevor Sie zu den Verknüpfungselementen gelangen, die es sind die "Hypermedia-Kontrollen".)
Metamatt

5
Wenn Sie sich mit den erweiterten Funktionen von SOAP (all dem WS- *) beschäftigen, werden Sie schnell feststellen, dass Tools diese nicht so gut unterstützen (einschließlich EAI- und ESB-Produkte) und dass sich Frameworks je nach Metro unterschiedlich verhalten können (wie Metro vs C #) ) für Feinheiten wie "" und null. Und der generierte Boilerplate-Code dient normalerweise nur dazu, die durch SOAP selbst verursachte Belastung zu umgehen.
22.

40

SOAP ist aus Tooling-Sicht nützlich, da die WSDL so leicht von Tools verwendet werden kann. So können Sie Web Service-Clients in Ihrer Lieblingssprache für Sie generieren lassen.

REST spielt gut mit AJAX'y-Webseiten. Wenn Sie Ihre Anfragen einfach halten, können Sie Serviceanrufe direkt von Ihrem JavaScript aus tätigen, und das ist sehr praktisch. Versuchen Sie, keine Namespaces in Ihrem Antwort-XML zu haben. Ich habe gesehen, dass Browser daran ersticken. Also, xsi: type wird wahrscheinlich nicht für Sie funktionieren, keine übermäßig komplexen XML-Schemas.

REST weist tendenziell auch eine bessere Leistung auf. Die CPU-Anforderungen des Codes, der REST-Antworten generiert, sind tendenziell niedriger als die von SOAP-Frameworks. Und wenn Ihre Enten der XML-Generierung auf der Serverseite aufgereiht sind, können Sie XML effektiv an den Client streamen. Stellen Sie sich vor, Sie lesen Zeilen des Datenbankcursors. Wenn Sie eine Zeile lesen, formatieren Sie sie als XML-Element und schreiben sie direkt an den Service-Consumer. Auf diese Weise müssen Sie nicht alle Datenbankzeilen im Speicher erfassen, bevor Sie mit dem Schreiben Ihrer XML-Ausgabe beginnen - Sie lesen und schreiben gleichzeitig. Schauen Sie sich neuartige Template-Engines oder XSLT an, damit das Streaming für REST funktioniert.

SOAP hingegen wird in der Regel von Tool-generierten Diensten als großer Blob generiert und erst dann geschrieben. Dies ist keine absolute Wahrheit, wohlgemerkt, es gibt Möglichkeiten, Streaming-Eigenschaften aus SOAP herauszuholen, beispielsweise mithilfe von Anhängen.

Mein Entscheidungsprozess ist wie folgt: Wenn ich möchte, dass mein Service von Verbrauchern problemlos bearbeitet werden kann und die von mir geschriebenen Nachrichten mittel bis klein (10 MB oder weniger) sind und es mir nichts ausmacht, zusätzliche CPU zu brennen Zyklen auf dem Server gehe ich mit SOAP. Wenn ich AJAX in Webbrowsern bedienen muss oder wenn ich das Ding zum Streamen brauche oder meine Antworten gigantisch sind, gehe ich REST.

Schließlich gibt es viele großartige Standards rund um SOAP, wie WS-Sicherheit und das Erhalten von Stateful Web Services, an die Sie sich anschließen können, wenn Sie die richtigen Tools verwenden. Diese Art von Sachen macht wirklich einen Unterschied und kann Ihnen helfen, einige haarige Anforderungen zu erfüllen.


29

Ich weiß, dass dies eine alte Frage ist, aber ich muss meine Antwort posten - vielleicht findet es jemand nützlich. Ich kann nicht glauben, wie viele Leute REST über SOAP empfehlen. Ich kann nur davon ausgehen, dass diese Personen keine Entwickler sind oder noch nie einen REST-Service von angemessener Größe implementiert haben. Das Implementieren eines REST-Service dauert viel länger als das Implementieren eines SOAP-Service. Und am Ende kommt es auch viel chaotischer heraus. Hier sind die Gründe, warum ich 99% der Zeit SOAP wählen würde:

1) Die Implementierung eines REST-Service dauert unendlich länger als die Implementierung eines SOAP-Service. Es gibt Tools für alle modernen Sprachen / Frameworks / Plattformen zum Einlesen einer WSDL und zum Ausgeben von Proxy-Klassen und Clients. Die Implementierung eines REST-Service erfolgt von Hand und - erhalten Sie dies - durch Lesen der Dokumentation. Darüber hinaus müssen Sie bei der Implementierung dieser beiden Dienste "Vermutungen" anstellen, was über die Pipe zurückkommt, da es kein echtes Schema oder Referenzdokument gibt.

2) Warum einen REST-Service schreiben, der trotzdem XML zurückgibt? Der einzige Unterschied besteht darin, dass Sie mit REST nicht wissen, welche Typen jedes Element / Attribut darstellt. Sie müssen es selbst implementieren und hoffen, dass eines Tages eine Zeichenfolge nicht in einem Feld vorkommt, von dem Sie dachten, es sei immer ein int. SOAP definiert die Datenstruktur mithilfe der WSDL, sodass dies ein Kinderspiel ist.

3) Ich habe die Beschwerde gehört, dass Sie mit SOAP den "Overhead" des SOAP-Umschlags haben. Müssen wir uns heutzutage wirklich um eine Handvoll Bytes sorgen?

4) Ich habe das Argument gehört, dass Sie mit REST einfach die URL in den Browser einfügen und die Daten anzeigen können. Sicher, wenn Ihr REST-Service eine einfache oder keine Authentifizierung verwendet. Der Netflix-Dienst verwendet beispielsweise OAuth, bei dem Sie Dinge signieren und verschlüsseln müssen, bevor Sie Ihre Anfrage überhaupt senden können.

5) Warum benötigen wir für jede Ressource eine "lesbare" URL? Wenn wir ein Tool zur Implementierung des Dienstes verwendet haben, ist uns dann die tatsächliche URL wirklich wichtig?

Muss ich weitermachen?


23
Das ist eine schöne Antwort, aber ehrlich gesagt verstehen Sie nicht, was REST ist. Sie können die 2 besten Antworten in dieser Frage lesen, um es herauszufinden. Sie vergleichen sie als ähnliche Architekturen, während REST nur ein Paradigma ist. Es ist das gleiche wie "Restaurantetikette" mit "Pizza" zu vergleichen. Ist es besser, mit einer Gabel und einem Messer zu essen oder Pizza zu essen? "Ich würde mit Pizza gehen" - sagen Sie. Und wie die erste Antwort schon sagt, können Sie problemlos beides verwenden - essen Sie Pizza mit einer Gabel und einem Messer.
Bezmax

3
"Müssen wir uns heutzutage wirklich um eine Handvoll Bytes sorgen?" Ähm, ja, das tun wir! Von meinem Standort aus kann ich viele Online-Computerspiele spielen, aber die World of Warcraft-Entwickler von Blizzard haben Ihre Ansicht abonniert und sich nie die Mühe gemacht, den Netzwerkverkehr zu optimieren. Daher ist dies das einzige Spiel, von dem ich ständig getrennt werde. DaWW ein so altes Spiel ist, hat es sehr viel Netzwerkverkehr. Das ist heutzutage nicht gut, denn es wird immer solche mit marginalen Verbindungen geben, bei denen ein verschwenderischer Ansatz, um Ihnen Entwicklungszeit zu sparen, dies nur zunichte macht.
Tsais

11
Kurz gesagt, Sie scheinen zu sagen: "SOAP ist besser, weil es mehr Tools gibt, die Ihnen dabei helfen." Dies ist zwar ein gültiger Punkt, achten Sie jedoch darauf, REST nicht nur aus diesem Grund abzuschreiben. Es ist einfacher, eine Webseite in einem WYSIWYG-Editor zu erstellen, als HTML von Hand zu codieren, aber das bedeutet nicht, dass es immer die richtige Antwort ist. Der Wert von REST besteht darin, dass es die in den frühen 90er Jahren erstellte HTTP-Spezifikation erkennt, die bereits viele der Probleme gelöst hat, die SOAP erneut zu lösen versucht.
Keithjgrant

@JoshM Ihre obige Antwort entspricht also Ihrer Frage von " stackoverflow.com/questions/3285704/… "?
Mukus

@ Mukus - schuldig wie angeklagt ...?
Josh M.

19

Die meisten Anwendungen, die ich schreibe, sind serverseitiges C # oder Java oder Desktop-Anwendungen in WinForms oder WPF. Diese Anwendungen benötigen in der Regel eine umfangreichere Service-API, als REST bereitstellen kann. Außerdem möchte ich nicht länger als ein paar Minuten damit verbringen, meinen Webdienst-Client zu erstellen. Mit den WSDL-Tools zur Clientgenerierung kann ich meinen Client implementieren und den geschäftlichen Mehrwert steigern.

Wenn ich jetzt einen Webdienst explizit für einige Javascript-Ajax-Aufrufe schreiben würde, wäre er wahrscheinlich in REST. Nur um die Client-Technologie zu kennen und JSON zu nutzen. Meiner Meinung nach sollten Webdienst-APIs, die aus Javascript verwendet werden, wahrscheinlich nicht sehr komplex sein, da diese Art von Komplexität serverseitig besser gehandhabt zu werden scheint.

Vor diesem Hintergrund gibt es einige SOAP-Clients für Javascript. Ich weiß, dass jQuery eine hat. So SOAP kann von JavaScript genutzt werden; Nur nicht so gut wie ein REST-Service, der JSON-Strings zurückgibt. Wenn ich also einen Webdienst hätte, der so komplex sein sollte, dass er für eine beliebige Anzahl von Clienttechnologien und -anwendungen flexibel ist, würde ich mich für SOAP entscheiden.


17

Ich würde empfehlen, zuerst REST zu verwenden. Wenn Sie Java verwenden, schauen Sie sich JAX-RS und die Jersey- Implementierung an. REST ist in vielen Sprachen viel einfacher und einfacher zu interopieren.

Wie andere in diesem Thread gesagt haben, besteht das Problem mit SOAP in seiner Komplexität, wenn die anderen WS- * -Spezifikationen eingehen, und es gibt unzählige Interop-Probleme, wenn Sie in die falschen Teile von WSDL, XSDs, SOAP, WS-Adressierung usw. geraten.

Der beste Weg, um die REST-gegen-SOAP-Debatte zu beurteilen, ist ein Blick ins Internet - so ziemlich alle großen Player im Webspace, bei Google, Amazon, eBay, Twitter und anderen - verwenden und bevorzugen RESTful-APIs gegenüber den SOAP-APIs.

Der andere gute Ansatz für REST ist, dass Sie viel Code und Infrastruktur zwischen einer Webanwendung und einem REST-Frontend wiederverwenden können. Zum Beispiel ist das Rendern von HTML im Vergleich zu XML im Vergleich zu JSON Ihrer Ressourcen mit Frameworks wie JAX-RS und impliziten Ansichten normalerweise recht einfach. Außerdem ist es einfach, mit RESTful-Ressourcen über einen Webbrowser zu arbeiten


1
+1 zu "Der beste Weg, um zu beurteilen ..." Ein gutes Beispiel ist die Javascript-API von Google. Ursprünglich in SOAP, dann als Reaktion auf Entwicklerbeschwerden, in REST umgerüstet. Kurz nachdem es zur Google # 1 API wurde (aufgrund der Anzahl der Anfragen) - überrascht, dass es die Karten-API übertrifft, aber anscheinend (laut dem Hauptentwickler der JS-API).
Doug

16

Ich bin sicher, Don Box hat SOAP als Scherz erschaffen - schauen Sie, Sie können RPC-Methoden über das Web aufrufen" und stöhnt heute, als er merkt, was für ein aufgeblähter Albtraum von Webstandards es geworden ist :-)

REST ist gut, einfach und überall schnell und einfach zu implementieren (also eher ein "Standard" als die Standards). Verwenden Sie REST.


5
"Ich bin sicher, Don Box hat SOAP als Witz erstellt - 'Sieh mal, du kannst RPC-Methoden über das Web aufrufen'", wahrscheinlich wahr. +1
Mukus

15

Ich denke, dass beide ihren eigenen Platz haben. Meiner Meinung nach:

SOAP : Eine bessere Wahl für die Integration zwischen älteren / kritischen Systemen und einem Web / Web-Service-System auf der Basisebene, wo WS- * sinnvoll ist (Sicherheit, Richtlinien usw.).

RESTful : Eine bessere Wahl für die Integration zwischen Websites mit öffentlicher API auf der obersten Ebene (VIEW, dh Javascripts, die Anrufe an URIs entgegennehmen).


13

Eine Sache, die nicht erwähnt wurde, ist, dass ein SOAP-Umschlag sowohl Überschriften als auch Körperteile enthalten kann. Auf diese Weise können Sie die volle Ausdruckskraft von XML nutzen, um Out-of-Band-Informationen zu senden und zu empfangen. Soweit ich weiß, beschränkt REST Sie auf HTTP-Header und Ergebniscodes.

(otoh, können Sie Cookies mit einem REST-Service verwenden, um Out-of-Band-Daten vom Typ "Header" zu senden?)


6
Wahrscheinlich, weil du falsch liegst? REST kann alle vordefinierten oder benutzerdefinierten HTTP-Header sowie den Anforderungshauptteil verwenden.
Chris Broski

Vielleicht nicht. Sehen Sie sich an, was Sie in einen SOAP-Header einfügen können und was Sie in einen HTTP-Header einfügen können. Wie lang kann die eine Zeile sein?
John Saunders

1
Die HTTP-Spezifikation begrenzt die in Headern enthaltenen Daten nicht und jeder Headerfeldwert kann mehrere Zeilen umfassen. Einzelne Webserver können moderate Beschränkungen auferlegen, aber Ihre Implikation, dass Sie keine signifikanten Informationen in HTTP-Header aufnehmen können, ist nachweislich falsch.
Chris Broski

@protonfish: Ich habe nicht impliziert, dass Sie keine signifikanten Informationen in HTTP-Header einfügen können. Ich habe mich gefragt, ob Sie so viele Informationen in HTTP-Header einfügen können, wie in SOAP-Header eingefügt werden können. Als ich gefragt habe, wie lang eine Zeile sein kann, wollte ich die Antwort wissen.
John Saunders

@protonfish: Ich dachte auch, dass die Unterscheidung zwischen "der vollen Ausdruckskraft von XML" einerseits und "HTTP-Headern und Ergebniscodes" andererseits klar war. Vielleicht ist das nicht so klar wie ich dachte.
John Saunders

10

Übersehen Sie nicht XML-RPC. Wenn Sie nur nach einer einfachen Lösung suchen, gibt es viel zu sagen für ein Protokoll, das in ein paar Textseiten definiert und in einer minimalen Menge Code implementiert werden kann. XML-RPC gibt es schon seit Jahren, ist aber für eine Weile aus der Mode gekommen - aber der minimalistische Reiz scheint ihm in letzter Zeit eine Art Wiederbelebung zu verleihen.


10

Beantwortung der 2012 aktualisierten Frage (durch das zweite Kopfgeld) und Überprüfung der heutigen Ergebnisse (andere Antworten).


SOAP, Vor- und Nachteile

Über SOAP 1.2, Vor- und Nachteile im Vergleich zu "REST" ... Nun, seit 2007 können Sie REST-Webdienste mit WSDL und unter Verwendung des SOAP-Protokolls beschreiben ... Das heißt, wenn Sie etwas härter arbeiten, alle W3C-Standards von Der Webdienst-Protokollstapel kann REST sein !

Es ist ein guter Ausgangspunkt, denn wir können uns ein Szenario vorstellen, in dem alle philosophischen und methodischen Diskussionen vorübergehend vermieden werden. Wir können technisch "SOAP-REST" mit "NON-SOAP-REST" in ähnlichen Diensten vergleichen,

  • SOAP-REST (= "REST-SOAP"): Wie von L.Mandel gezeigt , kann WSDL2 einen REST-Webservice beschreiben. Wenn wir annehmen, dass beispielhaftes XML in SOAP eingeschlossen werden kann, lautet die gesamte Implementierung "SOAP-REST". .

  • NON-SOAP-REST : Jeder REST-Webdienst, der nicht SOAP sein kann ... Das sind "90%" der bekannten REST-Beispiele. Einige verwenden kein XML (z. B. typische AJAX-RESTs verwenden stattdessen JSON), andere verwenden andere XML-Strukturen ohne die SOAP-Header oder -Regeln. PS: Um Informalität zu vermeiden, können wir in den Vergleichen REST Level 2 annehmen .

Um konzeptioneller zu vergleichen, vergleichen Sie "NON-REST-SOAP" mit "NON-SOAP-REST" als unterschiedliche Modellierungsansätze. Vervollständigen Sie diese Taxonomie von Webdiensten:

  • NON-REST-SOAP : Jeder SOAP-Webdienst, der nicht REST sein kann ... Das sind "90%" der bekannten SOAP-Beispiele.

  • NON-REST-NEITHER-SOAP : Ja, das Universum der "Web-Service-Modellierung" umfasst andere Dinge (z. B. XML-RPC ).

Seife in den REST-Bedingungen

Vergleich vergleichbarer Dinge: SOAP-REST mit NON-SOAP-REST .

PROS

Einige Begriffe erklären,

  • Vertragsstabilität : für alle Arten von Verträgen (als "schriftliche Vereinbarungen"),

    • Durch die Verwendung von Standards : Alle Ebenen des W3C-Stacks sind gegenseitig kompatibel. REST hingegen ist kein W3C- oder ISO-Standard und enthält keine normierten Details zu den Peripheriegeräten des Dienstes. Also, wie ich , @ DaveWoldrich (20 Stimmen), @cynicalman (5), @Exitos (0) zuvor sagte, in einem Kontext, in dem STANDARDS NOTWENDIG sind, brauchen Sie SOAP.

    • Durch die Verwendung von Best Practices : Der "ausführliche Aspekt" der W3C-Stack- Implementierungen übersetzt relevante menschliche / rechtliche / juristische Vereinbarungen.

  • Robustheit : Die Sicherheit der SOAP-Struktur und der Header. Mit der Metada-Kommunikation (mit der vollen Ausdruckskraft von XML) und der Überprüfung haben Sie eine "Versicherungspolice" gegen Änderungen oder Lärm.
    SOAP hat "Transaktionszuverlässigkeit (...) bei Kommunikationsfehlern. SOAP verfügt über mehr Kontrollen in Bezug auf Wiederholungslogik und kann somit mehr End-to-End-Zuverlässigkeit und Servicegarantien bieten", E. Terman .

Profis nach Beliebtheit sortieren,

  • Bessere Tools (~ 70 Stimmen): SOAP hat derzeit den Vorteil besserer Tools seit 2007 und noch 2012, da es sich um einen klar definierten und allgemein akzeptierten Standard handelt. Siehe @MarkCidade (27 Stimmen), @DaveWoldrich (20), @JoshM (13), @TravisHeseman (9).

  • Standardkonformität (25 Stimmen): Wie ich , @DaveWoldrich (20 Stimmen), @cynicalman (5), @Exitos (0) zuvor sagte, benötigen Sie in einem Kontext, in dem STANDARDS erforderlich sind, SOAP.

  • Robustheit : Versicherung von SOAP-Headern, @JohnSaunders (8 Stimmen).

Nachteile

  • Die SOAP-Struktur ist komplexer (mehr als 300 Stimmen): Alle Antworten hier und Quellen zu "SOAP vs REST" zeigen eine gewisse Abneigung gegen die Redundanz und Komplexität von SOAP. Dies ist eine natürliche Folge der Anforderungen an die formale Überprüfung (siehe unten) und an die Robustheit (siehe oben). "REST NON-SOAP" (und XML-RPC, der SOAP-Urheber ) kann einfacher und informeller sein.

  • Die "einzige XML" -Einschränkung ist ein Leistungshindernis bei der Verwendung winziger Dienste (~ 50 Stimmen): siehe json.org/xml und diese oder diese andere Frage . Dieser Punkt wird von @toluju (41) und anderen gezeigt.
    PS: Da JSON kein IETF-Standard ist, können wir einen De-facto-Standard für die Web-Software-Community in Betracht ziehen .


Modellierungsdienste mit SOAP

Jetzt können wir SOAP-NON-REST mit NON-SOAP-REST- Vergleichen hinzufügen und erklären, wann SOAP besser zu verwenden ist :

  • Bedarf an Standards und stabilen Verträgen (siehe Abschnitt "PROS"). PS: Siehe einen typischen "B2B-Bedarf an Standards", der von @saille beschrieben wird .

  • Bedarf an Werkzeugen (siehe Abschnitt "PROS"). PS: Standards und das Vorhandensein formaler Überprüfungen (siehe unten) sind wichtige Themen für die Werkzeugautomatisierung.

  • Parallele schwere Verarbeitung (siehe Abschnitt "Kontext / Grundlagen" weiter unten): Bei größeren und / oder langsameren Prozessen, unabhängig von der etwas komplexeren SOAP, sind Zuverlässigkeit und Stabilität die besten Investitionen.

  • Benötigen Sie mehr Sicherheit : Wenn mehr als HTTPS erforderlich ist und Sie wirklich zusätzliche Schutzfunktionen benötigen, ist SOAP die bessere Wahl ( siehe @Bell , 32 Stimmen). "Senden der Nachricht entlang eines Pfades, der komplizierter ist als eine Anforderung / Antwort oder über einen Transport, der kein HTTP beinhaltet", S. Seely . XML ist ein zentrales Thema, das Standards für XML-Verschlüsselung , XML-Signatur und XML-Kanonisierung bietet. Nur mit SOAP können Sie diese Mechanismen durch einen allgemein anerkannten Standard wie WS-Security in eine Nachricht einbetten .

  • Benötigen Sie mehr Flexibilität (weniger Einschränkungen): SOAP benötigt keine exakte Korrespondenz mit einer URI. nicht auf HTTP beschränkt; muss nicht auf 4 Verben beschränkt werden. Wie @TravisHeseman (9 Stimmen) sagt, verwenden Sie SOAP, wenn Sie etwas "Flexibles für eine beliebige Anzahl von Client-Technologien und -Verwendungen" möchten.
    PS: Denken Sie daran, dass XML universeller / ausdrucksvoller ist als JSON (et al.).

  • Notwendigkeit für formale Überprüfungen : wichtig zu verstehen , dass W3C - Stack nutzt formale Methoden und REST ist eher informell. Ihre WSDL- Dienstbeschreibung (eine formale Sprache ) ist eine formale Spezifikation Ihrer Webdienstschnittstellen, und SOAP ist ein robustes Protokoll, das alle möglichen WSDL-Vorschriften akzeptiert.

KONTEXT

Historisch

Zur Beurteilung von Trends ist eine historische Perspektive erforderlich. Für dieses Thema eine 10 oder 15 Jahre Perspektive ...

Vor der W3C-Standardisierung gibt es eine gewisse Anarchie. Es war schwierig, interoperable Dienste mit unterschiedlichen Frameworks zu implementieren, und es war schwieriger, kostspieliger und zeitaufwendiger, etwas Interoperables zwischen Unternehmen zu implementieren. Die W3C-Stack- Standards waren ein Licht, ein Norden für das Zusammenspiel komplexer Webdienste.

Für alltägliche Aufgaben wie die Implementierung von AJAX ist SOAP sehr umfangreich ... Die Notwendigkeit einfacher Ansätze muss daher ein neues theoretisches Framework wählen ... Und große "Web-Software-Player" wie Google, Amazon, Yahoo et al. Haben die beste Alternative gewählt, nämlich den REST-Ansatz. War in diesem Zusammenhang das REST-Konzept als "konkurrierendes Framework" angekommen, und heute (2012) ist diese Alternative ein De-facto-Standard für Programmierer.

Stiftungen

Im Kontext von Parallel Computing stellen die Webdienste parallele Unteraufgaben bereit. Protokolle wie SOAP sorgen für eine gute Synchronisation und Kommunikation. Keine "Aufgabe": Webdienste können als
grobkörnige und peinliche Parallelität eingestuft werden .

Wenn die Aufgabe größer wird, wird die "Komplexitätsdebatte" weniger bedeutsam und die Robustheit der Kommunikation und die Solidität der Verträge werden relevanter.


Ich denke nicht, dass dies etwas hinzufügt. Die ursprüngliche Frage oder die drei Fragen in meinem Kopfgeld werden nicht beantwortet: Welche Merkmale eines Problems machen SOAP zur besseren Wahl? Was macht SOAP einfacher / schwieriger? Was können Sie mit SOAP tun, was Sie mit REST nicht tun können?
Sam Hasler

Danke für die Warnung! ... Nun, ich versuche nur ein "2012's UPDATE" (!), Das die Hauptsache ist, weil nicht alle Argumente über "Features" wiederholt werden müssen ... SOAP die bessere Wahl ... einfacher / schwieriger machen. .. kann nicht mit REST machen ". Sie sehen bei den anderen Antworten nicht? Ich habe mehr als 5 Tage Zeit, vielleicht brauchen Sie eine Schlussfolgerung / Zusammenfassung "um einen Kontrapunkt zu @mdhughes Antwort zu sehen", ist es nur so? PS: Ich werde diesen Kommentar nach der Bearbeitung löschen.
Peter Krauss

Ich möchte wissen, ob SOAP für irgendetwas nützlich ist oder ob Sie immer Ruhe verwenden sollten. Wenn jemand einen vernünftigen Grund für die Verwendung von SOAP anstelle von REST veröffentlicht, gebe ich dieser Antwort das Kopfgeld. Wenn jemand erklären kann, warum und wie REST alles kann, was SOAP kann, würde ich ihm das Kopfgeld geben. Andernfalls vergebe ich das Kopfgeld nicht für eine Antwort und füge der Frage einen Kommentar hinzu, in dem darauf hingewiesen wird, dass ich das Kopfgeld veröffentlicht habe und keine Antwort auf meine Fragen gegeben wurde. (Wie ich denke, ist es nützlich zu wissen, was nicht bekannt ist.)
Sam Hasler

Das will ich nicht. Und ich sehe nicht, wie relevant WSDL ist. WSDL kann SOAP- oder REST-Webdienste beschreiben, Sie scheinen sich selbst zu widersprechen.
Sam Hasler

Für eine ähnliche Diskussion in "REST vs JSON-RPC" siehe stackoverflow.com/a/41686155/287948
Peter Krauss

9

Es ist nuanciert.

Wenn Sie eine andere Systemschnittstelle für Ihre Dienste benötigen, sind viele Clients mit SOAP zufriedener, da Sie mit den Verträgen, der WSDL und dem SOAP-Standard über eine "Überprüfungsebene" verfügen.

Für alltägliche Systeme, die in Systeme aufrufen, ist SOAP meiner Meinung nach ein unnötiger Aufwand, wenn ein einfacher HTML-Aufruf ausreicht.


9

Ich sehe das gleiche und ich denke, sie sind verschiedene Werkzeuge für verschiedene Probleme .

SOAP-Standard (Simple Object Access Protocol), eine XML-Sprache, die eine Nachrichtenarchitektur und Nachrichtenformate definiert, wird von Webdiensten verwendet und enthält eine Beschreibung der Vorgänge. WSDL ist eine XML-basierte Sprache zur Beschreibung von Webdiensten und deren Zugriff. Läuft auf SMTP, HTTP, FTP usw. Erfordert Middleware-Unterstützung, gut definierte Mechanismen zum Definieren von Diensten wie WSDL + XSD. WS-Policy SOAP gibt XML-basierte Daten zurück. SOAP bietet Standards für Sicherheit und Zuverlässigkeit

RESTful-Webdienste (Representational State Transfer). Sie sind Webdienste der zweiten Generation. RESTful-Webdienste kommunizieren über HTTP als SOAP-basierte Dienste und erfordern keine XML-Nachrichten oder WSDL-Dienst-API-Definitionen. Für REST ist keine Middleware erforderlich, nur HTTP-Unterstützung ist erforderlich. WADL-Standard, REST kann XML, Nur-Text, JSON, HTML usw. zurückgeben

Für viele Arten von Clients ist es einfacher, RESTful-Webdienste zu nutzen, während sich die Serverseite weiterentwickeln und skalieren kann. Kunden können einige oder alle Aspekte des Dienstes nutzen und mit anderen webbasierten Diensten kombinieren.

  1. REST verwendet Standard-HTTP, um das Erstellen von Clients und das Entwickeln von APIs zu vereinfachen
  2. REST erlaubt viele verschiedene Datenformate wie XML, Nur-Text, JSON, HTML, wobei SOAP nur XML erlaubt.
  3. REST bietet eine bessere Leistung und Skalierbarkeit.
  4. Ruhe dich aus und kann zwischengespeichert werden und SOAP kann nicht
  5. Integrierte Fehlerbehandlung, bei der SOAP keine Fehlerbehandlung hat
  6. REST ist besonders nützlich für PDAs und andere mobile Geräte.

REST ist, dass Services einfach in vorhandene Websites integriert werden können.

SOAP verfügt über eine Reihe von Protokollen, die unter anderem Standards für Sicherheit und Zuverlässigkeit bieten und mit anderen WS-konformen Clients und Servern zusammenarbeiten. SOAP-Webdienste (wie JAX-WS) sind nützlich für die asynchrone Verarbeitung und den asynchronen Aufruf.

Für komplexe APIs ist SOAP nützlicher.


8

REST ist eine Architektur, die von Roy Fielding erfunden und in seiner Dissertation Architectural Styles und Design of Network-based Software Architectures beschrieben wurde . Roy ist auch der Hauptautor von HTTP - dem Protokoll, das die Übertragung von Dokumenten über das World Wide Web definiert. HTTP ist ein RESTful-Protokoll. Wenn Entwickler über "Verwenden von REST-Webdiensten" sprechen, ist es wahrscheinlich genauer, "Verwenden von HTTP" zu sagen.

SOAP ist ein XML-basiertes Protokoll, das innerhalb einer HTTP-Anforderung / -Antwort tunnelt. Selbst wenn Sie SOAP verwenden, verwenden Sie auch REST. Es gibt einige Debatten darüber, ob SOAP dem grundlegenden HTTP signifikante Funktionen hinzufügt.

Vor dem Erstellen eines Webdienstes würde ich empfehlen, HTTP zu studieren. Wahrscheinlich können Ihre Anforderungen mit Funktionen implementiert werden, die bereits in der Spezifikation definiert sind, sodass andere Protokolle nicht benötigt werden.


7

Ich betrachte das gleiche Problem. Mir scheint, dass REST schnell und einfach ist und sich gut für einfache Anrufe und Antworten sowie zum Debuggen eignet (was könnte besser sein, als eine URL in einen Browser zu pumpen und die Antwort zu sehen).

Wo REST jedoch zu fallen scheint, hat damit zu tun, dass es kein Standard ist (obwohl es aus Standards besteht). Die meisten Programmierbibliotheken haben die Möglichkeit, eine WSDL zu überprüfen, um automatisch den Clientcode zu generieren, der zum Konsumieren von SOAP-basierten Diensten erforderlich ist. Bisher scheint der Konsum von REST-basierten Webdiensten ein ad-hocer Ansatz zu sein, eine Schnittstelle zu schreiben, die den möglichen Aufrufen entspricht. Erstellen Sie eine manuelle http-Anfrage und analysieren Sie dann die Antwort. Dies kann an sich gefährlich sein.

Das Schöne an SOAP ist, dass Unternehmen nach der Ausgabe einer WSDL ihre Logik so strukturieren können, dass bei jeder Änderung der Schnittstelle die WSDL geändert wird. Es gibt keinen Raum für Manöver. Sie können alle Anforderungen anhand dieser WSDL überprüfen. Da eine WSDL einen REST-Service jedoch nicht richtig beschreibt, haben Sie keine definierte Möglichkeit, sich auf die Schnittstelle für die Kommunikation zu einigen.

Aus geschäftlicher Sicht scheint dies die Kommunikation offen für Interpretationen und Veränderungen zu lassen, was eine schlechte Idee zu sein scheint.

Die oberste 'Antwort' in diesem Thread scheint zu sagen, dass SOAP für Simple Object-Oriented Access Protocol steht. Im Wiki bedeutet O jedoch Objekt nicht objektorientiert. Sie sind verschiedene Dinge.

Ich weiß, dass dieser Beitrag sehr alt ist, dachte aber, ich sollte mit meinen eigenen Erkenntnissen antworten.


6

Es ist eine gute Frage ... Ich möchte Sie nicht in die Irre führen, deshalb bin ich genauso offen für die Antworten anderer wie Sie. Für mich kommt es wirklich auf die Gemeinkosten und die Verwendung der API an. Ich bevorzuge es, Webdienste beim Erstellen von Client-Software zu verwenden, aber das Gewicht von SOAP gefällt mir nicht. Ich glaube, REST ist leichter, aber ich arbeite aus Kundensicht nicht so gerne damit.

Ich bin gespannt, was andere denken.


6

Hören Sie sich diesen Podcast an, um es herauszufinden. Wenn Sie die Antwort wissen möchten, ohne zuzuhören, dann ist OK, es ist REST. Aber ich empfehle wirklich zuzuhören.


6

Meine allgemeine Regel lautet: Wenn Sie möchten, dass ein Browser-Webclient eine direkte Verbindung zu einem Dienst herstellt, sollten Sie wahrscheinlich REST verwenden. Wenn Sie strukturierte Daten zwischen Back-End-Diensten übertragen möchten, verwenden Sie SOAP.

Das Einrichten von SOAP kann manchmal sehr schwierig sein und ist für den einfachen Datenaustausch zwischen Webclients und Servern oft zu viel des Guten. Leider verstärken die meisten einfachen Programmierbeispiele, die ich gesehen (und aus denen ich gelernt habe), diese Wahrnehmung etwas.

Das heißt, SOAP glänzt wirklich, wenn Sie beginnen, mehrere SOAP-Dienste als Teil eines größeren Prozesses zu kombinieren, der von einem Datenworkflow gesteuert wird (denken Sie an Unternehmenssoftware). Dies ist etwas, das viele der SOAP-Programmierbeispiele nicht vermitteln, weil eine einfache SOAP-Operation, um etwas zu tun, wie das Abrufen des Preises einer Aktie, im Allgemeinen für das, was sie selbst tut, überkompliziert ist, es sei denn, sie wird im Zusammenhang mit der Bereitstellung einer Maschine dargestellt lesbare API, die bestimmte Funktionen mit festgelegten Datenformaten für Ein- und Ausgaben detailliert beschreibt, die wiederum von einem größeren Prozess skriptiert werden.

Dies ist in gewisser Weise traurig, da es SOAP wirklich einen schlechten Ruf verleiht, da es schwierig ist, die Vorteile von SOAP aufzuzeigen, ohne es im vollständigen Kontext der Verwendung des Endprodukts darzustellen.


4

SOAP verkörpert einen serviceorientierten Ansatz für Webdienste - einen, bei dem Methoden (oder Verben) die primäre Art sind, wie Sie mit dem Dienst interagieren. REST verfolgt einen ressourcenorientierten Ansatz, bei dem das Objekt (oder das Substantiv) im Mittelpunkt steht.



4

In gewissem Sinne mit "PHP-Universum" saugt die PHP-Unterstützung für jede fortgeschrittene SOAP große Zeit. Sie werden am Ende so etwas wie http://wso2.com/products/web-services-framework/php/ verwenden , sobald Sie die Grundanforderungen überschreiten, selbst um WS-Security oder WS-RM ohne integrierte Unterstützung zu aktivieren.

Die Erstellung von SOAP-Umschlägen ist in PHP meiner Meinung nach sehr chaotisch, da sie Namespaces, xsd: nil, xsd: anytype und alte Seifendienste erstellt, die SOAP-Codierung (Gott weiß, wie anders das ist) in SOAP-Nachrichten verwenden.

Vermeiden Sie all dieses Durcheinander, indem Sie sich an REST halten. REST ist nichts wirklich Großes, das wir seit Beginn des WWW verwenden. Erst als dieses http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm-Papier herauskam, wurde uns klar , wie wir HTTP-Funktionen zur Implementierung von RESTFul Services verwenden können. HTTP ist von Natur aus REST. Das bedeutet nicht, dass nur die Verwendung von HTTP Ihre Dienste RESTFul macht.

SOAP vernachlässigt die Kernfunktionen von HTTP und betrachtet HTTP nur als Transportprotokoll. Daher ist es theoretisch unabhängig vom Transportprotokoll (in der Praxis ist es nicht der Fall, dass Sie von SOAP Action Header gehört haben? Wenn Sie es jetzt nicht googeln!).

Mit zunehmender JSON-Anpassung und HTML5 mit Javascript-Reifung ist REST mit JSON die häufigste Art des Umgangs mit Diensten geworden. Das JSON-Schema wurde ebenfalls definiert und kann bei Bedarf zusammen mit WADL für Lösungen auf Unternehmensebene (noch in einem frühen Stadium) verwendet werden.

Die PHP-Unterstützung für REST und JSON ist definitiv besser als die vorhandene integrierte SOAP-Unterstützung.

Hinzufügen einiger weiterer BUZZ-Wörter hier SOA, WOA, ROA

http://blog.dhananjaynene.com/2009/06/rest-soa-woa-or-roa/

http://www.scribd.com/doc/15657444/REST-White-Paper

Übrigens, ich liebe SOAP besonders für die WS-Security-Spezifikation, dies ist eine gute Spezifikation, und wenn jemand, der an eine Enterprise-JSON-Anpassung denkt, definitiv etwas Ähnliches für JSON mitbringen muss, wie Verschlüsselung auf Feldebene usw.


3

Ein schneller Punkt - Übertragungsprotokoll und Orchestrierung;

Ich verwende SOAP über TCP aus Gründen der Geschwindigkeit, Zuverlässigkeit und Sicherheit, einschließlich orchestrierter Machine-to-Machine-Services (ESB) und externer Services. Ändern Sie die Dienstdefinition, die Orchestrierung löst einen Fehler aus der WSDL-Änderung aus und ist sofort offensichtlich und kann neu erstellt / bereitgestellt werden.

Ich bin mir nicht sicher, ob Sie dasselbe mit REST tun können - ich warte darauf, korrigiert zu werden oder natürlich! Ändern Sie mit REST die Service-Definition - nichts weiß davon, bis 400 (oder was auch immer) zurückgegeben wird.


2

Wenn Sie nach Interoperabilität zwischen verschiedenen Systemen und Sprachen suchen, würde ich mich definitiv für REST entscheiden. Ich hatte zum Beispiel viele Probleme damit, SOAP zwischen .NET und Java zum Laufen zu bringen.


2

Ich erstelle einen Benchmark, um herauszufinden, welche davon schneller sind! Ich sehe dieses Ergebnis:

für 1000 Anfragen:

  • REST dauerte 3 Sekunden
  • SOAP dauerte 7 Sekunden

für 10.000 Anfragen:

  • REST dauerte 33 Sekunden
  • SOAP dauerte 69 Sekunden

für 1.000.000 Anfragen:

  • REST dauerte 62 Sekunden
  • SOAP dauerte 114 Sekunden

0

Eine alte Frage, die aber heute noch relevant ist ... da sie von so vielen Entwicklern im Unternehmensbereich noch verwendet wird.

Meine Arbeit umfasst das Entwerfen und Entwickeln von IoT-Lösungen (Internet of Things). Dazu gehört die Entwicklung von Code für kleine eingebettete Geräte, die mit der Cloud kommunizieren.

Es ist klar, dass REST mittlerweile weithin akzeptiert und nützlich ist und so ziemlich der Defacto-Standard für das Web ist. Selbst Microsoft bietet REST-Unterstützung in Azure. Wenn ich mich auf SOAP verlassen müsste, könnte ich nicht das tun, was ich tun muss, da es für kleine eingebettete Geräte einfach zu groß, sperrig und nervig ist.

REST ist einfach und sauber und klein. Ideal für kleine eingebettete Geräte. Ich schreie immer, wenn ich mit einem Webentwickler zusammenarbeite, der mir WSDLs sendet. Da muss ich eine Aufklärungskampagne darüber starten, warum dies einfach nicht funktioniert und warum sie REST lernen müssen.


0

1. Aus meiner Erfahrung. Ich würde sagen, REST bietet Ihnen die Möglichkeit, auf die bereits erstellte URL zuzugreifen. zB-> eine Wortsuche in Google. Diese URL kann als Webservice für REST verwendet werden. In SOAP können Sie Ihren eigenen Webdienst erstellen und über den SOAP-Client darauf zugreifen.

  1. REST unterstützt das Text-, JSON- und XML-Format. Daher vielseitiger für die Kommunikation zwischen zwei Anwendungen. Während SOAP nur das XML-Format für die Nachrichtenkommunikation unterstützt.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.