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.
xml
web-services
rest
soap
user13276
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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
quelle
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.
quelle
null
. Und der generierte Boilerplate-Code dient normalerweise nur dazu, die durch SOAP selbst verursachte Belastung zu umgehen.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.
quelle
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?
quelle
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.
quelle
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
quelle
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.
quelle
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).
quelle
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?)
quelle
Ü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.
quelle
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.
quelle
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.
quelle
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.
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Ich erstelle einen Benchmark, um herauszufinden, welche davon schneller sind! Ich sehe dieses Ergebnis:
für 1000 Anfragen:
für 10.000 Anfragen:
für 1.000.000 Anfragen:
quelle
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.
quelle
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.
quelle