REST (Representational State Transfer) und SOAP (Simple Object Access Protocol)

722

Kann jemand erklären, was REST und was SOAP in einfachem Englisch ist? Und wie funktionieren Web Services?

Vicky
quelle
5
Sie müssen dieses PDF lesen, um die REST- und SOAP-Webdienste zu verstehen.
Lalit Kumar Maurya
2
Sie können dieses Blog überprüfen javapapers.com/web-service/rest-vs-soap
spideringweb
1
Kann ich empfehlen, Fieldings Dissertation zum Thema REST zu lesen
Philip
Mögliches Duplikat von SOAP oder REST für Web Services?
Nawfal
1
@PhilipCouling Ich würde keine Doktorarbeit einfach Englisch nennen ...
stt106

Antworten:

1589

Einfache Erklärung zu SOAP und REST

SOAP - "Simple Object Access Protocol"

SOAP ist eine Methode zum Übertragen von Nachrichten oder kleinen Informationsmengen über das Internet. SOAP-Nachrichten sind in XML formatiert und werden normalerweise über HTTP (Hypertext Transfer Protocol) gesendet.


Rest - Repräsentative Zustandsübertragung

Rest ist eine einfache Methode zum Senden und Empfangen von Daten zwischen Client und Server, und es sind nicht sehr viele Standards definiert. Sie können Daten als JSON, XML oder sogar als Klartext senden und empfangen. Es ist leicht im Vergleich zu SOAP.


Geben Sie hier die Bildbeschreibung ein

Nakkeeran
quelle
73
SOAP ist viel mehr als das Senden von Daten in einem Umschlag. Es wird jedoch meistens verwendet, um ein BLOB an den Server zu senden, wobei alle Funktionen, die SOAP ebenfalls bietet, ignoriert werden. Grundsätzlich verwenden die meisten Leute SOAP wie REST mit einem Standardumschlag. (SOAP ist ein gutes Beispiel für
Überentwicklung
15
SOAP erzwingt auf KEINE WEISE die Verwendung von HTTP oder XML. HTTP und XML sind die Dinge, die in WS-I für die Interoperabilität definiert sind, aber man kann auch POJOs über JMS senden. Die Sache ist, dass der Programmierer sich nicht darum kümmern muss: Der Servicebus verwaltet den Transport und die Codierung.
Koppor
56
Für jedes komplexe Problem gibt es eine klare, einfache und falsche Antwort. --HL Mencken
jmh
5
Das Beispiel war episch!
Kaidul
18
WEITER LESEN. Während diese Antwort unterhaltsam ist, ist die Antwort von @ Pavel unten viel vollständiger.
Josh Johnson
322

Beide Methoden werden von vielen großen Spielern verwendet. Es ist eine Frage der Präferenz. Ich bevorzuge REST, weil es einfacher zu bedienen und zu verstehen ist.

SOAP (Simple Object Access Protocol):

  • SOAP erstellt ein XML-Protokoll auf HTTP oder manchmal TCP / IP.
  • SOAP beschreibt Funktionen und Datentypen.
  • SOAP ist ein Nachfolger von XML-RPC und sehr ähnlich, beschreibt jedoch eine Standardmethode für die Kommunikation.
  • Mehrere Programmiersprachen bieten native Unterstützung für SOAP. Sie geben normalerweise eine Webdienst-URL ein und können die Webdienstfunktionen aufrufen, ohne dass spezifischer Code erforderlich ist.
  • Gesendete Binärdaten müssen zuerst in ein Format wie base64 codiert codiert werden.
  • Verfügt über verschiedene Protokolle und Technologien: WSDL, XSDs, SOAP, WS-Adressierung

Repräsentativer Staatstransfer (REST):

  • REST muss nicht über HTTP erfolgen, aber die meisten meiner folgenden Punkte weisen eine HTTP-Verzerrung auf.
  • REST ist sehr leicht, es heißt, Moment mal, wir brauchen nicht all die Komplexität, die SOAP geschaffen hat.
  • Verwendet normalerweise normale HTTP-Methoden anstelle eines großen XML-Formats, das alles beschreibt. Um beispielsweise eine Ressource zu erhalten, verwenden Sie HTTP GET, um eine Ressource auf dem Server zu platzieren, den Sie mit HTTP PUT verwenden. Um eine Ressource auf dem Server zu löschen, verwenden Sie HTTP DELETE.
  • REST ist insofern sehr einfach, als es HTTP-GET-, POST- und PUT-Methoden verwendet, um Ressourcen auf dem Server zu aktualisieren.
  • REST wird normalerweise am besten mit ressourcenorientierter Architektur (ROA) verwendet. In dieser Denkweise ist alles eine Ressource, und Sie würden mit diesen Ressourcen arbeiten.
  • Solange Ihre Programmiersprache über eine HTTP-Bibliothek verfügt und die meisten dies tun, können Sie sehr einfach ein REST-HTTP-Protokoll verwenden.
  • Binärdaten oder binäre Ressourcen können einfach auf Anfrage geliefert werden.

Es gibt endlose Debatten über REST vs SOAP bei Google .

Mein Favorit ist dieser . Update 27. November 2013: Die Website von Paul Prescod scheint offline gegangen zu sein, und dieser Artikel ist nicht mehr verfügbar. Kopien finden Sie jedoch auf der Wayback-Maschine oder als PDF bei CiteSeerX .

Brian R. Bondy
quelle
28
REST hat nichts mit HTTP zu tun (es ist protokollunabhängig), und XML kann problemlos in einer RESTful-Architektur verwendet werden. GET / POST / PUT / DELETE verwendet HTTP einfach korrekt - für REST erforderlich, aber nicht ausreichend.
Aehlke
10
Wie kann der REST-Client wissen, welche Methoden und Typen er verwenden darf? In SOAP gibt es WSDL, aus der viele Tools Klassen und Methoden generieren können.
JLP
3
@jlp: Es ist Sache des REST-Client-Entwicklers, die exponierte REST-Schnittstelle ordnungsgemäß zu verwenden.
Brian R. Bondy
14
REST sagt einfach "Verwenden Sie eine einheitliche Schnittstelle". Da die HTTP-Schnittstelle [GET, POST, PUT, DELETE, (UPDATE, HEAD)] zur "einheitlichen Schnittstelle" des Webs wurde, ist REST (im Web) meiner Meinung nach irgendwie von HTTP abhängig!
Andre Schweighofer
3
@aehlke REST ist sehr viel abhängig von HTTP. Anders zu sagen ist verrückt. Der REST-Ansatz ist über den HTTP-RFC (vom W3C-TAG) fest definiert. Es gibt keine andere Spezifikation als eine Doktorarbeit von Roy Fielding von UC Irvine. Siehe: en.wikipedia.org/wiki/Representational_state_transfer
Brenden
259

SICH AUSRUHEN

Ich verstehe, dass die Hauptidee von REST extrem einfach ist. Wir verwenden seit Jahren Webbrowser und haben gesehen, wie einfach, flexibel, leistungsfähig usw. Websites sind. HTML-Sites verwenden Hyperlinks und Formulare als primäres Mittel zur Benutzerinteraktion. Ihr Hauptziel ist es, uns Kunden zu ermöglichen, nur die Links zu kennen, die wir im aktuellen Zustand verwenden können . Und REST sagt einfach: "Warum nicht dieselben Prinzipien verwenden, um Computer und nicht menschliche Kunden über unsere Anwendung zu steuern?" Wenn Sie dies mit der Leistung der WWW-Infrastruktur kombinieren, erhalten Sie ein Killer-Tool zum Erstellen großartiger verteilter Anwendungen.

Eine andere mögliche Erklärung ist für mathematisch denkende Menschen. Jede Anwendung ist im Grunde eine Zustandsmaschine, wobei Geschäftslogikaktionen Zustandsübergänge sind. Die Idee von REST besteht darin, jeden Übergang einer Anforderung einer Ressource zuzuordnen und Clients Links bereitzustellen, die Übergänge darstellen, die im aktuellen Status verfügbar sind. Somit modelliert es die Zustandsmaschine über Darstellungen und Verknüpfungen. Aus diesem Grund wird es als REpresentational State Transfer bezeichnet.

Es ist ziemlich überraschend, dass sich alle Antworten entweder auf das Nachrichtenformat oder auf die Verwendung von HTTP-Verben konzentrieren. Tatsächlich spielt das Nachrichtenformat überhaupt keine Rolle. REST kann jedes verwenden, sofern der Serviceentwickler es dokumentiert. HTTP-Verben machen einen Dienst nur zu einem CRUD-Dienst, aber noch nicht zu RESTful. Was einen Service wirklich in einen REST-Service verwandelt, sind Hyperlinks (auch als Hypermedia-Steuerelemente bezeichnet), die zusammen mit Daten in Serverantworten eingebettet sind. Ihre Menge muss ausreichen, damit jeder Client die nächste Aktion aus diesen Links auswählen kann.

Leider ist es ziemlich schwierig, korrekte Informationen zu REST im Web zu finden, mit Ausnahme der These von Roy Fielding . (Er ist derjenige, der REST abgeleitet hat). Ich würde das Buch 'REST in Practice' empfehlen , da es eine umfassende Schritt-für-Schritt-Anleitung zur Entwicklung von SOAP zu REST enthält.

SEIFE

Dies ist eine der möglichen Formen des RPC-Architekturstils (Remote Procedure Call). Im Wesentlichen handelt es sich nur um eine Technologie, mit der Clients Servermethoden über Dienstgrenzen (Netzwerk, Prozesse usw.) aufrufen können, als würden sie lokale Methoden aufrufen. Natürlich unterscheidet es sich vom Aufrufen lokaler Methoden in Bezug auf Geschwindigkeit, Zuverlässigkeit usw., aber die Idee ist so einfach.

Verglichen

Die Details wie Transportprotokolle, Nachrichtenformate, xsd, wsdl usw. spielen beim Vergleich von RPCs mit REST keine Rolle. Der Hauptunterschied besteht darin, dass ein RPC-Dienst das Fahrrad neu erfindet, indem er sein eigenes Anwendungsprotokoll in der RPC-API mit der Semantik entwirft, die nur er kennt. Daher müssen alle Clients dieses Protokoll verstehen, bevor sie den Dienst verwenden können, und aufgrund der proprietären Semantik aller Anforderungen kann keine generische Infrastruktur wie Caches erstellt werden. Darüber hinaus schlagen RPC-APIs nicht vor, welche Aktionen im aktuellen Status zulässig sind. Dies muss aus der zusätzlichen Dokumentation abgeleitet werden. REST impliziert andererseits die Verwendung einheitlicher Schnittstellen, um verschiedenen Clients ein gewisses Verständnis der API-Semantik zu ermöglichen, und Hypermedia-Steuerelemente (Links), um verfügbare Optionen in jedem Status hervorzuheben. Somit,

In gewisser Weise ist SOAP (wie jeder andere RPC) ein Versuch, durch eine Dienstgrenze zu tunneln, wobei das Verbindungsmedium als Black Box behandelt wird, die nur Nachrichten übertragen kann. REST ist eine Entscheidung, anzuerkennen, dass das Web ein riesiges verteiltes Informationssystem ist, die Welt so zu akzeptieren, wie sie ist, und zu lernen, sie zu beherrschen, anstatt dagegen zu kämpfen.

SOAP scheint ideal für interne Netzwerk-APIs zu sein, wenn Sie sowohl den Server als auch die Clients steuern und die Interaktionen nicht zu komplex sind. Für Entwickler ist es natürlicher, es zu verwenden. Für eine öffentliche API, die von vielen unabhängigen Parteien verwendet wird, komplex und umfangreich ist, sollte REST jedoch besser passen. Aber dieser letzte Vergleich ist sehr unscharf.

Aktualisieren

Meine Erfahrung hat unerwartet gezeigt, dass die REST-Entwicklung schwieriger ist als SOAP. Zumindest für .NET. Obwohl es großartige Frameworks wie die ASP.NET-Web-API gibt, gibt es kein Tool, das automatisch clientseitigen Proxy generiert. Nichts wie "Webdienstreferenz hinzufügen" oder "WCF-Dienstreferenz hinzufügen". Der gesamte Serialisierungs- und Service-Abfragecode muss von Hand geschrieben werden. Und Mann, das ist viel Boilerplate-Code. Ich denke, die REST-Entwicklung benötigt für jede Entwicklungsplattform etwas Ähnliches wie die WSDL- und Tooling-Implementierung. Tatsächlich scheint es einen guten Grund zu geben: WADL oder WSDL 2.0 , aber keiner der Standards scheint gut unterstützt zu werden.

Update (Januar 2016)

Es stellt sich heraus, dass es jetzt eine Vielzahl von Tools für die REST-API-Definition gibt. Meine persönliche Präferenz ist derzeit RAML .

Funktionsweise von Web Services

Nun, dies ist eine zu weit gefasste Frage, da sie von der Architektur und Technologie abhängt, die in dem spezifischen Webdienst verwendet werden. Im Allgemeinen ist ein Webdienst jedoch einfach eine Anwendung im Web, die Anforderungen von Clients annehmen und Antworten zurückgeben kann. Es ist dem Web ausgesetzt, also ein Webdienst , und es ist normalerweise rund um die Uhr verfügbar. Deshalb ist es ein Dienst . Natürlich löst es ein Problem (andernfalls, warum sollte jemand jemals einen Webdienst nutzen) für seine Kunden.

Pavel Gatilov
quelle
45
Dies sollte bei weitem die am besten bewertete Antwort sein! Ich habe einen Sinn für Humor, aber es ist deprimierend, wenn Comedy-Antworten auf StackOverflow gut überlegte trumpfen.
Tom W Hall
3
@ TomHall Ich denke, diese Situation ist ein bisschen spezifisch für die REST-RPC-Diskussion, nicht nur für SO. Ich denke, das ist der Grund, warum wir keine vernünftigen Werkzeuge für REST-Kunden haben. Zumindest unter .NET hat sich die Implementierung eines REST-Service-Clients als weitaus schwieriger erwiesen als das Generieren einer SOAP-Service-Referenz. Man muss die Proxy-Klassen von Hand schreiben. Aus irgendeinem Grund denken die Leute über REST nach, als gäbe es überhaupt keine Regeln, während die ursprüngliche Idee im Gegenteil die Architektur viel stärker einschränkt. Ich wünschte, die Community hätte REST verstanden - dann könnten wir bessere Werkzeuge und Akzeptanz erwarten.
Pavel Gatilov
2
@ PavelGatilov Diese Antwort ist großartig. Ich hatte andere REST-Erklärungen gelesen und nie "verstanden", dass das treibende Prinzip ist, dass mögliche Zustandsübergänge Teil der Antwort sind. Die Tatsache, dass Sie sich die Zeit genommen haben, über Ihre Erfahrungen nachzudenken und die Schwierigkeiten anzuerkennen, ist auch für jeden von uns von großem Wert.
Hervorragende Antwort. Ich frage mich, wie lange es dauern wird, bis sich REST-I entwickelt, und es sieht immer mehr nach SOAP aus, als RAML, Swagger und WADL es für den De-facto-Standard des REST-Seins herausgeputzt haben. Ich fand das Fehlen von REST-Tools im Vergleich zu SOAP ein großes Problem bei der Entwicklung einiger recht sensibler und komplexer Finanzsysteme. Sowohl REST als auch SOAP sind fantastisch, wenn sie richtig verwendet werden. Mein Großvater hat immer gesagt, dass man mit einem Schraubenzieher einen Nagel einschlagen kann, aber das wird nicht so gut funktionieren. Gleiches gilt hier. Das richtige Werkzeug für die
Jobmentalität,
Oh, ich bevorzuge auch RAML und ich bevorzuge die Top-Down-Entwicklung. Das einzige, was mich an REST am meisten beunruhigte, war das Fehlen eines strukturierten Top-Down-Ansatzes. Ich denke gerne nach, bevor ich handle.
Namphibian
40

Dies ist die einfachste Erklärung, die Sie jemals finden werden.

Dieser Artikel führt eine Erzählung von Ehemann zu Ehefrau, in der der Ehemann seiner Frau REST in reinen Laienbegriffen erklärt. Muss lesen!

Wie ich meiner Frau die Ruhe erklärte (ursprünglicher Link)
Wie ich meiner Frau die Ruhe erklärte (19.07.2013 Arbeitslink)

Vinay W.
quelle
2
Der Teil über Polymorphismus ist wunderschön.
Profpatsch
38

SOAP - Simple Object Access Protocol ist ein Protokoll !

REST - REpresentational State Transfer ist ein architektonischer Stil !

SOAP ist ein XML-Protokoll, das zum Übertragen von Nachrichten verwendet wird, normalerweise über HTTP

RESTund schließen SOAPsich wohl nicht gegenseitig aus. Eine REST - Architektur verwenden könnte , HTTPoder SOAPoder ein anderes Kommunikationsprotokoll. RESTist für das Web optimiert und somit HTTPeine perfekte Wahl. HTTPist auch das einzige Protokoll, das in Roy Fieldings Artikel diskutiert wird.

Obwohl REST und SOAP eindeutig sehr unterschiedlich sind, beleuchtet die Frage die Tatsache, dass RESTund HTTPoft zusammen verwendet werden. Dies liegt hauptsächlich an der Einfachheit von HTTP und seiner sehr natürlichen Zuordnung zu RESTful-Prinzipien.

Grundlegende REST-Prinzipien

Client-Server-Kommunikation

Client-Server-Architekturen weisen eine sehr unterschiedliche Trennung von Bedenken auf. Alle Anwendungen, die im RESTful-Stil erstellt wurden, müssen im Prinzip auch Client-Server sein.

Staatenlos

Für jede Clientanforderung an den Server muss der Status vollständig dargestellt werden. Der Server muss in der Lage sein, die Clientanforderung vollständig zu verstehen, ohne einen Serverkontext oder einen Serversitzungsstatus zu verwenden. Daraus folgt, dass der gesamte Status auf dem Client beibehalten werden muss. Wir werden später auf die staatenlose Darstellung näher eingehen.

Cacheable

Cache-Einschränkungen können verwendet werden, sodass Antwortdaten als zwischenspeicherbar oder nicht zwischenspeicherbar markiert werden können. Alle als zwischenspeicherbar gekennzeichneten Daten können als Antwort auf dieselbe nachfolgende Anforderung wiederverwendet werden.

Einheitliche Schnittstelle

Alle Komponenten müssen über eine einzige einheitliche Schnittstelle interagieren. Da die gesamte Komponenteninteraktion über diese Schnittstelle erfolgt, ist die Interaktion mit verschiedenen Diensten sehr einfach. Die Schnittstelle ist die gleiche! Dies bedeutet auch, dass Implementierungsänderungen isoliert vorgenommen werden können. Solche Änderungen wirken sich nicht auf die grundlegende Komponenteninteraktion aus, da die einheitliche Schnittstelle immer unverändert bleibt. Ein Nachteil ist, dass Sie mit der Schnittstelle stecken bleiben. Wenn durch Ändern der Benutzeroberfläche eine Optimierung für einen bestimmten Dienst bereitgestellt werden könnte, haben Sie kein Glück, da REST dies verbietet. Positiv zu vermerken ist jedoch, dass REST für das Web optimiert ist, weshalb REST über HTTP unglaublich beliebt ist!

Die obigen Konzepte stellen definierende Merkmale von REST dar und unterscheiden die REST-Architektur von anderen Architekturen wie Webdiensten. Es ist nützlich zu beachten, dass ein REST-Service ein Web-Service ist, ein Web-Service jedoch nicht unbedingt ein REST-Service.

Sehen Sie dieses Blog Post auf REST Design - Principals für weitere Details über REST und die oben genannten Kugeln.

cmd
quelle
Ich denke nur, es wäre absolut HATEOAS, eine RESTful-Ressource anzufordern und eine Antwort zu erhalten, die einen Link zu WSDL enthält, der beschreibt, welche Operationen für diese Ressource in ihrem aktuellen Status verfügbar sind. Obwohl ich denke, dass ein RESTful SOAP-Webdienst ein bisschen so wäre, als würde man RMM Level 3 überspringen und direkt zu Level 4 gehen. :)
Steve
3
Dies ist die beste Antwort, um zu reflektieren, dass es nicht entweder / oder mit REST und SOAP ist. +1 für die Feststellung, dass REST ein Stil ist .
ABMagil
12

Ich mag die Antwort von Brian R. Bondy. Ich wollte nur hinzufügen, dass Wikipedia eine klare Beschreibung von bietet REST . Der Artikel unterscheidet es von SOAP.

REST ist ein Austausch von Zustandsinformationen, der so einfach wie möglich erfolgt.

SOAP ist ein Nachrichtenprotokoll, das XML verwendet.

Einer der Hauptgründe, warum viele Menschen von SOAP zu REST gewechselt sind, ist, dass die WS- * -Standards (WS Splat genannt), die mit SOAP-basierten Webdiensten verbunden sind, EXTREM kompliziert sind. Eine Liste der Spezifikationen finden Sie in Wikipedia . Jede dieser Spezifikationen ist sehr kompliziert.

BEARBEITEN: Aus irgendeinem Grund werden die Links nicht richtig angezeigt. REST = http://en.wikipedia.org/wiki/REST

WS- * = http://en.wikipedia.org/wiki/WS- *

David G.
quelle
SOAP ist KEIN Protokoll. Bei SOAP geht es um Codierung. SOAP wird über viele Protokolle verwendet: JMS, http, ...
koppor
16
@koppor Du meinst etwas anderes als die Tatsache, dass es für "Simple Object Access Protocol" steht? Wissen Sie auch, was ein Protokoll ist? Ein Protokoll ist im Grunde ein Satz von Regeln darüber, wie zwei oder mehr Dinge kommunizieren sollen. Genau dafür ist SOAP gedacht, eine Standardmethode für die Kommunikation.
Cyrias
4
@Demizey Beziehen Sie sich auf die neueste Version von SOAP, nämlich 1.2? w3.org/TR/soap12-part1 "SOAP" steht jetzt für sich, da es in der Praxis NICHT als Protokoll verwendet wird. "SOAP 1.2 wird das Akronym nicht buchstabieren." ( w3.org/TR/2007/REC-soap12-part0-20070427/#L4697 ) Kennen Sie die Ebenen des Webdienststapels, wie sie (z. B.) im Buch "Architektur der Webdienstplattform: Soap, Wsdl, Ws -Policy, Ws-Adressierung, Ws-Bpel, Ws-zuverlässiges Messaging und mehr "? Die Kommunikation auf Transportschicht erfolgt über HTTP, SMTP, RMI / IIOP, JMS oder andere. SOAP wird in der Messaging-Schicht verwendet
koppor
Entlang einer SOAP-Verbindung können viele Vermittler dazwischen sitzen. Dies wird durch das SOAP-Verarbeitungsmodell ermöglicht, das zwischen dem endgültigen SOAP-Empfänger und null oder mehr SOAP-Vermittlern unterscheidet. Das Transportprotokoll kann sich dazwischen ändern. Der SOAP-Nachrichtenpfad ermöglicht auch die transparente Implementierung der EAI-Muster ( eaipatterns.com )
koppor
12
Es ist immer noch ein Messaging-Protokoll.
Kirias
7

Sowohl SOAP-Webservices als auch REST-Webservices können das HTTP-Protokoll und andere Protokolle verwenden (nur um zu erwähnen, dass SOAP das zugrunde liegende Protokoll von REST sein kann). Ich werde nur über SOAP und REST im Zusammenhang mit dem HTTP-Protokoll sprechen, da dies die häufigste Verwendung ist.

SEIFE

SOAP ("einfaches" Objektzugriffsprotokoll) ist ein Protokoll (und ein W3C-Standard ). Es definiert, wie SOAP-Nachrichten erstellt, gesendet und verarbeitet werden.

  • SOAP-Nachrichten sind XML-Dokumente mit einer bestimmten Struktur: Sie enthalten einen Umschlag, der den Header und den Body-Abschnitt enthält. Der Body enthält die eigentlichen Daten, die wir senden möchten, in einem XML-Format. Es gibt zwei Codierungsstile , aber wir wählen normalerweise Literal , was bedeutet, dass unsere Anwendung oder ihr SOAP-Treiber die XML-Serialisierung und unserialisiert die Daten ausführt.

  • SOAP-Nachrichten werden als HTTP-Nachrichten mit dem Subtyp SOAP + XML MIME übertragen. Diese HTTP-Nachrichten können mehrteilig sein, sodass wir optional Dateien an SOAP-Nachrichten anhängen können.

  • Offensichtlich verwenden wir eine Client-Server-Architektur, sodass die SOAP-Clients Anforderungen an die SOAP-Webserices senden und die Dienste Antworten an die Clients zurücksenden. Die meisten Webservices verwenden eine WSDL-Datei, um den Service zu beschreiben. Die WSDL-Datei enthält das XML-Schema (im Folgenden XSD) der zu sendenden Daten und die WSDL-Bindung, die definiert, wie der Webservice an das HTTP-Protokoll gebunden ist. Es gibt zwei Bindungsstile: RPC und Dokument. Durch die Bindung im RPC-Stil enthält der SOAP-Body die Darstellung eines Operationsaufrufs mit den Parametern (HTTP-Anforderungen) oder den Rückgabewerten (HTTP-Antwort). Die Parameter und Rückgabewerte werden gegen die XSD validiert. Durch die Bindung des Dokumentstils enthält der SOAP-Body ein XML-Dokument, das anhand der XSD validiert wird. Ich denke, der Dokumentbindungsstil ist besser für ereignisbasierte Systeme geeignet, aber ich habe diesen Bindungsstil nie verwendet. Der RPC-Bindungsstil ist weit verbreitet, daher verwenden die meisten Benutzer SOAP für XML / RPC-Zwecke durch verteilte Anwendungen. Die Webservices finden sich normalerweise, indem sie einen UDDI- Server fragen . UDDI-Server sind Register, in denen der Speicherort der Webservices gespeichert ist.

SOAP RPC

Der meiner Meinung nach am weitesten verbreitete SOAP-Webservice verwendet also den RPC-Bindungsstil und den Literalcodierungsstil und hat die folgenden Eigenschaften:

  • Es ordnet URLs Operationen zu.
  • Es sendet Nachrichten mit dem Subtyp SOAP + XML MIME.
  • Es kann einen serverseitigen Sitzungsspeicher haben, diesbezüglich gibt es keine Einschränkungen.
  • Die SOAP-Client-Treiber verwenden die WSDL-Datei des Dienstes, um die RPC-Operationen in Methoden zu konvertieren. Die clientseitige Anwendung kommuniziert mit dem SOAP-Webservice, indem sie diese Methoden aufruft. Daher brechen die meisten SOAP-Clients durch Schnittstellenänderungen (resultierende Methodennamen und / oder Parameteränderungen) ab.
  • Es ist möglich, SOAP-Clients zu schreiben, die nicht durch Schnittstellenänderungen mithilfe von RDF unterbrochen werden, und Operationen nach Semantik zu finden. Semantischer Webservice ist jedoch sehr selten und verfügt nicht unbedingt über einen nicht fehlerhaften Client (glaube ich).

SICH AUSRUHEN

REST (Representational State Transfer) ist ein Architekturstil, der in der Dissertation von Roy Fielding beschrieben wird. Es geht nicht um Protokolle wie SOAP. Es beginnt mit einem Null-Architekturstil ohne Einschränkungen und definiert die Einschränkungen der REST-Architektur nacheinander. Menschen verwenden den Begriff RESTful für Webservices, die alle REST-Einschränkungen erfüllen, aber laut Roy Fielding gibt es keine REST-Levels .Wenn ein Webservice nicht jede einzelne REST-Einschränkung erfüllt, handelt es sich nicht um einen REST-Webservice.

REST-Einschränkungen

  • Client - Server - Architektur - Ich denke, dieser Teil ist jedem bekannt. Die REST-Clients kommunizieren mit den REST-Webservices. Die Webservices verwalten die gemeinsamen Daten - nachfolgend den Ressourcenstatus - und stellen sie den Clients zur Verfügung.
  • Staatenlos - Der Teil "Staatsübertragung" der Abkürzung: REST. Die Clients behalten den Clientstatus (Sitzungs- / Anwendungsstatus) bei, sodass die Dienste keinen Sitzungsspeicher haben dürfen. Die Clients übertragen den relevanten Teil des Clientstatus durch jede Anforderung an die Dienste, die mit dem relevanten Teil des Ressourcenstatus antworten (von ihnen verwaltet). Anfragen haben also keinen Kontext, sie enthalten immer die notwendigen Informationen, um sie zu verarbeiten. Beispielsweise werden bei der HTTP-Basisauthentifizierung der Benutzername und das Kennwort vom Client gespeichert und bei jeder Anforderung gesendet, sodass die Authentifizierung bei jeder Anforderung erfolgt. Dies unterscheidet sich stark von normalen Webanwendungen, bei denen die Authentifizierung nur durch Anmeldung erfolgt. Wir können jeden clientseitigen Datenspeicherungsmechanismus wie In-Memory (Javascript), Cookies, localStorage usw. verwenden. einige Teile des Client-Status beizubehalten, wenn wir möchten. Der Grund für die Einschränkung der Statuslosigkeit ist, dass der Server auch bei sehr hoher Auslastung (Millionen von Benutzern) gut skaliert werden kann, wenn nicht die Sitzung jedes einzelnen Clients verwaltet werden muss.
  • Cache - Die Antwort muss Informationen enthalten, die vom Client zwischengespeichert werden können oder nicht. Dies verbessert die Skalierbarkeit weiter.
  • Einheitliche Schnittstelle

    • Identifizierung von Ressourcen - Die REST-Ressource entspricht der RDF- Ressource. Laut Fielding kann es sich bei einer Bezeichnung um eine Ressource handeln, z. B.: "Das aktuelle lokale Wetter" kann eine Ressource sein, oder "Ihr Mobiltelefon" kann eine Ressource sein oder "ein bestimmtes Webdokument" eine Ressource. Um eine Ressource zu identifizieren, können Sie Ressourcenkennungen verwenden: URLs und URNs (z. B. ISBN-Nummer nach Büchern ). Ein einzelner Bezeichner sollte nur zu einer bestimmten Ressource gehören, aber eine einzelne Ressource kann viele Bezeichner haben, die wir häufig ausnutzen, beispielsweise durch Paginierung mit URLs wie https://example.com/api/v1/users?offset=50&count=25. URLs haben einige SpezifikationenBeispielsweise sind URLs mit denselben Pfaden, aber unterschiedlichen Abfragen nicht identisch, oder der Pfadteil sollte die hierarchischen Daten der URL enthalten, und der Abfrageteil sollte die nicht hierarchischen Daten enthalten. Dies sind die Grundlagen zum Erstellen von URLs per REST. Übrigens. Die URL-Struktur ist nur für die Service-Entwickler von Bedeutung, ein echter REST-Client kümmert sich nicht darum. Eine weitere häufig gestellte Frage ist die API-Versionierung, die einfach ist, da laut Fielding die einzige Konstante nach Ressourcen die Semantik ist. Wenn sich die Semantik ändert, können Sie eine neue Versionsnummer hinzufügen. Sie können die klassische 3-Nummern-Versionierung verwenden und den URLs nur die Hauptnummer hinzufügen (https://example.com/api/v1/). Durch abwärtskompatible Änderungen geschieht also nichts. Durch nicht abwärtskompatible Änderungen erhalten Sie eine nicht abwärtskompatible Semantik mit einem neuen API-Stammverzeichnis https://example.com/api/v2/. Die alten Clients werden also nicht kaputt gehen, da sie die https://example.com/api/v1/mit der alten Semantik verwenden können.
    • Manipulation von Ressourcen durch Repräsentationen - Sie können die ressourcenbezogenen Daten (Ressourcenstatus) manipulieren, indem Sie die beabsichtigte Repräsentation der Ressourcen - zusammen mit der HTTP-Methode und der Ressourcenkennung - an den REST-Service senden. Wenn Sie beispielsweise einen Benutzer nach der Heirat umbenennen möchten, können Sie eine PATCH https://example.com/api/v1/users/1 {name: "Mrs Smith"}Anforderung senden, bei der {name: "Mrs Smith"}es sich um eine JSON-Darstellung des beabsichtigten Ressourcenstatus handelt, dh um den neuen Namen. Dies geschieht umgekehrt. Der Dienst sendet Darstellungen von Ressourcen an die Clients, um deren Status zu ändern. Wenn wir beispielsweise den neuen Namen lesen möchten, können wir eine GET https://example.com/api/v1/users/1?fields="name"Abrufanforderung senden , die zu einem führt200 ok, {name: "Mrs Smith"}Antwort. So können wir diese Darstellung verwenden, um den Kundenstatus zu ändern. Beispielsweise können wir ein "Willkommen auf unserer Seite, Frau Smith!" Anzeigen. Botschaft. Eine Ressource kann abhängig von der Ressourcen-ID (URL) oder dem acceptHeader, den wir mit der Anforderung gesendet haben, viele Darstellungen haben . Zum Beispiel können wir ein Bild von Frau Smith (wahrscheinlich nicht nackt) senden, wenn dies image/jpegangefordert wird.
    • Selbstbeschreibende Nachrichten - Nachrichten müssen Informationen zur Verarbeitung enthalten. Zum Beispiel URI- und HTTP-Methode, Header vom Inhaltstyp, Cache-Header, RDF, die die Bedeutung der Daten beschreiben usw. Es ist wichtig, Standardmethoden zu verwenden. Es ist wichtig, die Spezifikation der HTTP-Methoden zu kennen. Zum Beispiel bedeutet GET das Abrufen von Informationen, die durch die Anforderungs-URL identifiziert wurden, DELETE bedeutet das Auffordern des Servers, die durch die angegebene URL identifizierte Ressource zu löschen usw. HTTP-Statuscodes haben ebenfalls eine Spezifikation , zum Beispiel 200 bedeutet Erfolg, 201 bedeutet Wenn eine neue Ressource erstellt wurde, bedeutet 404, dass die angeforderte Ressource nicht auf dem Server usw. gefunden wurde. Die Verwendung vorhandener Standards ist ein wichtiger Bestandteil von REST.
    • Hypermedia als Motor des Anwendungsstatus (HATEOAS im Folgenden) - Hypermedia ist ein Medientyp, der Hyperlinks enthalten kann. Im Internet folgen wir Links - beschrieben durch ein Hypermedia-Format (normalerweise HTML) -, um ein Ziel zu erreichen, anstatt die URLs in die Adressleiste einzugeben. REST folgt demselben Konzept. Die vom Dienst gesendeten Darstellungen können Hyperlinks enthalten. Wir verwenden diese Hyperlinks, um Anfragen an den Dienst zu senden. Mit der Antwort erhalten wir Daten (und wahrscheinlich mehr Links), mit denen wir den neuen Client-Status erstellen können, und so weiter. Deshalb ist Hypermedia die Engine des Anwendungsstatus (Client-Status). Sie fragen sich wahrscheinlich, wie Kunden die Hyperlinks erkennen und ihnen folgen können? Für Menschen ist es ziemlich einfach, wir lesen den Titel des Links, füllen möglicherweise Eingabefelder und danach nur einen einzigen Klick.JSON-LD mit Hydra ) oder mit hypermedienspezifischen Lösungen (z. B. IANA-Link-Relationen und herstellerspezifische MIME-Typen von HAL + JSON ). Es gibt viele maschinenlesbare XML- und JSON-Hypermedia-Formate , nur eine kurze Liste davon:

      Manchmal ist es schwer zu wählen ...

  • Schichtsystem - Wir können mehrere Schichten zwischen den Clients und den Diensten verwenden. Keiner von ihnen sollte über all diese zusätzlichen Schichten Bescheid wissen, nur über die Schicht direkt daneben. Diese Ebenen können die Skalierbarkeit durch Anwenden von Caches und Lastausgleich verbessern oder Sicherheitsrichtlinien durchsetzen.
  • Code on Demand - Wir können Code zurücksenden, der die Funktionalität des Clients erweitert, beispielsweise Javascript-Code an einen Browser. Dies ist die einzige optionale Einschränkung von REST.

REST-Webservice - Unterschiede im SOAP-RPC-Webservice

Ein REST-Webservice unterscheidet sich also stark von einem SOAP-Webservice (mit RPC-Bindungsstil und Literalcodierungsstil).

  • Es definiert eine einheitliche Schnittstelle (anstelle eines Protokolls).
  • Es ordnet URLs Ressourcen (und nicht Operationen) zu.
  • Es sendet Nachrichten mit beliebigen MIME-Typen (anstelle von nur SOAP + XML).
  • Es verfügt über eine zustandslose Kommunikation und kann daher keinen serverseitigen Sitzungsspeicher haben. (SOAP hat diesbezüglich keine Einschränkungen)
  • Es dient Hypermedia und die Clients verwenden die in diesen Hypermedia enthaltenen Links, um den Service anzufordern. (SOAP RPC verwendet die in der WSDL-Datei beschriebenen Operationsbindungen.)
  • Es wird nicht durch URL-Änderungen nur durch Semantikänderungen unterbrochen. (SOAP-RPC-Clients ohne Verwendung der RDF-Semantik werden durch WSDL-Dateiänderungen unterbrochen.)
  • Es skaliert aufgrund seines zustandslosen Verhaltens besser als ein SOAP-Webservice.

und so weiter...

Ein SOAP RPC-Webservice erfüllt nicht alle REST-Einschränkungen:

  • Client-Server-Architektur - immer
  • staatenlos - möglich
  • Cache - möglich
  • einheitliche Schnittstelle - nie
  • Schichtsystem - niemals
  • Code on Demand (optional) - möglich
inf3rno
quelle
6

Nun, ich beginne mit der zweiten Frage: Was sind Webdienste? , aus offensichtlichen Gründen.

WebServices sind im Wesentlichen logische Elemente (die Sie vage als Methode bezeichnen können), die bestimmte Funktionen oder Daten verfügbar machen. Der Client, der implementiert (technisch gesehen, konsumierend ist das Wort), muss nur wissen, welche Parameter die Methode akzeptieren wird und welche Art von Daten sie zurückgeben wird (wenn überhaupt).

Der folgende Link sagt alles über REST & SOAP auf äußerst übersichtliche Weise.

REST vs SOAP

Wenn Sie auch wissen möchten, wann Sie was auswählen sollen (REST oder SOAP), umso mehr Grund, es durchzugehen!

Sayan
quelle
5

SOAP und REST beziehen sich beide auf Möglichkeiten, wie verschiedene Systeme miteinander kommunizieren können.

REST verwendet dazu Techniken, die der Kommunikation Ihres Browsers mit Webservern ähneln: Verwenden von GET zum Anfordern einer Webseite, POSTing in Formularfeldern usw.

SOAP bietet etwas Ähnliches, erledigt jedoch alles, indem XML-Blöcke hin und her gesendet werden. Eine weitere Schlüsselkomponente von SOAP ist WSDL, ein XML-Dokument, das beschreibt, welche Funktionen und Datenelemente unterstützt werden. WSDLs können verwendet werden, um programmgesteuert zu "entdecken", welche Funktionen unterstützt werden, und um Programmcode-Stubs zu generieren.

pbreitenbach
quelle
1
Das hat nichts mit REST zu tun, das ist nur 'korrekte Verwendung von HTTP'
aehlke
HTTP selbst ist das beste Beispiel für ein RESTful-System.
pbreitenbach
1
@pbreitenbach Nein, HTTP ist nicht, es hat im Grunde keine Vorstellung von Hypermedia. HTML mit seinen Hyperlinks und Formularen ist jedoch ein RESTful-System. Eigentlich war es der Prototyp der REST-Spezifikation
Pavel Gatilov
SOAP zwingt Sie NICHT zur Verwendung der XML-Codierung. Die XML-Codierung wird nur verwendet, wenn ein Dienst Interoperabilität bietet. Intern können POJOs ohne Codierung in XML gesendet werden.
Koppor
2

Ich denke, das ist so einfach, wie ich es erklären kann. Bitte, jeder kann mich korrigieren oder ergänzen.

SOAP ist ein Nachrichtenformat, das von getrennten Systemen (wie im Internet) zum Austausch von Informationen / Daten verwendet wird. Dies geschieht mit hin und her gehenden XML-Nachrichten.

Webdienste senden oder empfangen SOAP-Nachrichten. Sie arbeiten unterschiedlich, je nachdem in welcher Sprache sie geschrieben sind.

StingyJack
quelle
Erläutern Sie, was Sie unter "sie arbeiten anders" verstehen. SOAP wird normalerweise verwendet, um verschiedenen Systemen, die mit unterschiedlichen oder unbekannten Technologien geschrieben wurden, die Verwendung einer gemeinsamen verständlichen Sprache mit klar definierten Parametern zu ermöglichen.
MyItchyChin
Webdienste funktionieren je nach der Sprache, in der sie geschrieben sind, unterschiedlich. Nur ein unwichtiges zusätzliches Detail.
StingyJack
Ok, ich war mir nicht sicher, ob Sie angedeutet haben, dass etwas die Interoperabilität behindert.
MyItchyChin
2

Das Problem mit SOAP ist, dass es im Widerspruch zu den Idealen hinter dem HTTP-Stack steht. Jede Middleware sollte in der Lage sein, mit HTTP-Anforderungen zu arbeiten, ohne den Inhalt der Anforderung oder Antwort zu verstehen. Ein normaler HTTP-Caching-Server funktioniert jedoch nicht mit SOAP-Anforderungen, ohne nur zu wissen, welche Teile des SOAP-Inhalts für das Caching von Bedeutung sind. SOAP verwendet HTTP lediglich als Wrapper für sein eigenes Kommunikationsprotokoll, z. B. als Proxy.

aehlke
quelle
2
Es ist gegen die Ideale, und das haben wir gerade erst bemerkt. Es gibt es seit ungefähr 1998 und wir nehmen es gerade erst auf. Verdammt, wir sind dumm!
John Saunders
Kein John, "wir" als informierte Webentwickler-Community, hat es die ganze Zeit gewusst. Es sind nur die Langsamen und diejenigen, die die CS-Schule ohne eine angemessene Ausbildung verlassen, die gerade weitergearbeitet haben.
Nicholas Shanks
"Wir" sind nicht alle Webentwickler. Einige von uns versuchen nur, die Dinge so gut wie möglich zu erledigen, und es ist ihnen egal, ob wir "nicht das volle Potenzial des Webs nutzen".
John Saunders
"stupif" fasst es fast zusammen, ja.
Rob Grant
2

REST ist ein Architekturstil zum Entwerfen von Netzwerkanwendungen. Die Idee ist, dass anstelle komplexer Mechanismen wie CORBA, RPC oder SOAP für die Verbindung zwischen Computern einfaches HTTP verwendet wird, um Anrufe zwischen Computern zu tätigen.

Hulk1991
quelle
1

SOAP - "Simple Object Access Protocol"

SOAP ist ein kleines Problem beim Übertragen von Nachrichten oder kleinen Informationsmengen über das Internet. SOAP- Nachrichten sind in XML formatiert und werden normalerweise über HTTP gesendet .

REST - "Repräsentativer Staatstransfer"

REST ist ein rudimentärer Vorgang der Eventualität und des Empfangs von Informationen zwischen Lüfter und Server, und es sind nicht eindeutig viele Standards definiert. Sie können Informationen als JSON , XML oder sogar als Klartext senden und akzeptieren . Es ist leicht im Vergleich zu SOAP .


quelle
-4

SOAP-basierte Web-Services Kurz gesagt, das SOAP-basierte Services-Modell betrachtet die Welt als ein Ökosystem gleichberechtigter Kollegen, die sich nicht gegenseitig kontrollieren können, sondern zusammenarbeiten müssen, indem sie veröffentlichte Verträge einhalten. Es ist ein gültiges Modell der chaotischen realen Welt, und die metadatenbasierten Verträge bilden die SOAP-Serviceschnittstelle.

Wir können SOAP weiterhin mit XML-basierten Remote Procedure Calls verknüpfen, aber die SOAP-basierte Web Services-Technologie hat sich zu einem flexiblen und leistungsstarken Messaging-Modell entwickelt.

SOAP geht davon aus, dass alle Systeme unabhängig sind und kein System die Interna einer anderen und internen Funktionalität kennt. Das Beste, was solche Systeme tun können, ist, sich gegenseitig Nachrichten zu senden und zu hoffen, dass auf sie reagiert wird. Systeme veröffentlichen Verträge, zu deren Einhaltung sie sich verpflichten, und andere Systeme verlassen sich auf diese Verträge, um Nachrichten mit ihnen auszutauschen.

Verträge zwischen Systemen werden zusammen als Metadaten bezeichnet und umfassen Dienstbeschreibungen, die unterstützten Nachrichtenaustauschmuster und die Richtlinien für Dienstqualitäten (ein Dienst muss möglicherweise verschlüsselt, zuverlässig bereitgestellt usw. werden). Eine Dienstbeschreibung ist wiederum detailliert Angabe der Daten (Nachrichtendokumente), die vom System gesendet und empfangen werden. Die Dokumente werden mit einer XML-Beschreibungssprache wie XML Schema Definition beschrieben. Solange alle Systeme ihre veröffentlichten Verträge einhalten, können sie zusammenarbeiten, und Änderungen an den Interna von Systemen wirken sich niemals auf andere aus. Jedes System ist dafür verantwortlich, seine eigenen internen Implementierungen in und aus seinen Verträgen zu übersetzen

REST - Repräsentativer Staatstransfer. Das physische Protokoll ist HTTP. Grundsätzlich bedeutet REST, dass alle unterschiedlichen Ressourcen im Web durch eine URL eindeutig identifizierbar sind. Alle Operationen, die mit diesen Ressourcen ausgeführt werden können, können durch eine begrenzte Anzahl von Verben (die „CRUD“ -Verben) beschrieben werden, die wiederum HTTP-Verben zugeordnet sind.

RESTs sind viel weniger „schwergewichtig“ als SOAP.

Funktionieren des Webdienstes

kapil das
quelle
2
-1 Fast alles, was Sie sagen, ist falsch. SOAP enthält keine Beschreibung. Die WSDL tut es. WSDL ist ein XML-Format - es wird auf keinem Protokoll "ausgeführt". SOAP benötigt keine Middleware. REST ist nicht "die zweite Generation von Webdiensten". WADL ist kein Standard. Siehe en.wikipedia.org/wiki/Web_Application_Description_Language .
John Saunders