SOAP
Anwendung | SOAP | ||||
HTTP | HTTPS | … | |||
Transport | TCP | ||||
Internet | IP(IPv4,IPv6) | ||||
Netzzugang | Ethernet | Token Bus |
Token Ring |
FDDI | … |
SOAP(ursprünglich fürSimple Object Access Protocol) ist einNetzwerkprotokoll,mit dessen HilfeDatenzwischenSystemenausgetauscht undRemote Procedure Callsdurchgeführt werden können. SOAP ist ein industrieller Standard desWorld Wide Web Consortiums(W3C).
SOAP stützt sich aufXMLzur Repräsentation der Daten und aufInternet-ProtokollederTransport-undAnwendungsschicht(vgl.TCP/IP-Referenzmodell) zurÜbertragungderNachrichten.Die gängigste Kombination ist SOAP überHTTPundTCP.SOAP kann beispielsweise auch überSMTP[1]oderJMS[2]verwendet werden. Die mit der Nachricht übermitteltenNutzdatenmüssen nicht zwingend in XML gesendet werden, andere Formate wieBase64oderCSVsind auch möglich.[3][4]Die Abkürzung SOAP wird offiziell ab Version 1.2 nicht mehr alsAkronymgebraucht, da es erstens (subjektiv) keineswegs einfach(Simple)ist und zweitens nicht nur dem Zugriff aufObjekte(Object Access)dient.
Geschichte
[Bearbeiten|Quelltext bearbeiten]Dave Winer(der „Vater “vonRSS2.0) undMicrosoftentwickelten 1998 die Spezifikation fürXML-RPC.Als Weiterentwicklung daraus entstand SOAP, das Ende 1999 in Version 0.9 veröffentlicht wurde. Die Reaktion derEntwicklerwar jedoch noch sehr zurückhaltend. Später im Jahr 1999 wurde die Version 1.0 veröffentlicht. Das war der Zeitpunkt, an dem dieEntwicklungmehr Unterstützung fand. Dies kann man vor allem daran erkennen, dass sichIBMim Jahr 2000 der Entwicklung von SOAP anschloss, was dazu führte, dass IBM, Microsoft, DevelopMentor (Don Box) und UserLand Software (Dave Winer) die Spezifikation von SOAP 1.1 beimWorld Wide Web Consortium(W3C) einreichten. Dabei wurde das Ziel verfolgt, eineArbeitsgruppeanzustoßen, die SOAP weiterentwickeln sollte. Das Ergebnis dieser Arbeitsgruppe ist SOAP Version 1.2, die im Juni 2003 als Empfehlung (englischrecommendation) anerkannt wurde. Eine wichtige Änderung war, dass SOAP seither keinAkronymmehr ist, da sämtliche Deutungen fürSOAP,wieSimple Object Access ProtocoloderService Oriented Architecture Protocol,den vollständigen Sinn von SOAP nicht treffen. Dadurch, dass SOAP nicht mehr als gebräuchliche Abkürzung verstanden wird, wurde es möglich, SOAP als Markennamen in den USA anzumelden.
Arbeitsweise
[Bearbeiten|Quelltext bearbeiten]SOAP ist ein Protokoll zum AustauschXML-Information-Set-basierter Nachrichten über einRechnernetzund hat den Status einerW3C-Empfehlung. Es stellt Regeln für das Nachrichtendesign auf. Es regelt, wie Daten in der Nachricht abzubilden und zu interpretieren sind, und gibt eine Konvention fürentfernte Prozeduraufrufemittels SOAP-Nachrichten vor. SOAP macht keine Vorschriften zurSemantikapplikationsspezifischer Daten, die versendet werden sollen, sondern stellt ein Rahmenwerk(framework)zur Verfügung, welches erlaubt, dass beliebige applikationsspezifische Informationen übertragen werden können. SOAP wird für entfernte Prozeduraufrufe ebenso genutzt wie für einfache Nachrichtensysteme beziehungsweise zumDatenaustausch.Zum Senden von Nachrichten können beliebigeTransportprotokolleverwendet werden, beispielsweiseFTP,SMTP,HTTPoder auchJMS.In der Praxis wird aufgrund der Kompatibilität mit gängigen Netzwerk-Architekturen (wie Firewalls) meist auf HTTP zurückgegriffen. Auch ist mittelsHTTPSdie verschlüsselte Übertragung von SOAP-Nachrichten möglich. Das ermöglicht jedoch keine End-to-End-Verschlüsselung. Diese wird durchWS-Securityermöglicht, das auf der Ebene der Nachrichten und nicht auf der Ebene des unterliegenden Transportprotokolls ansetzt. Das XML Information Set der SOAP-Anfrage wird bei Nutzung von HTTP(S) im Body einesHTTP POST Requestsals XML an eine gegebene URL geschickt.
SOAP wird regelmäßig dort eingesetzt, wo der direkte Zugang fremder Systeme zu einer Informationsquelle nicht sinnvoll erscheint. Dies kann an Kompatibilitätsproblemen zwischen verschiedenenAnwendungsarchitekturenliegen, aber auch an Sicherheitsaspekten. So kann der (partielle) Zugriff auf eine Datenbank ermöglicht werden, ohne dass dem Anwenderprogramm der direkte Zugang gestattet werden muss. Über die SOAP-Schnittstelle kann die Menge der ausführbaren Methoden reglementiert und definiert werden.
Die Kommunikation mit SOAP ermöglicht die Kopplung von Systemen, der offene Entwurf von SOAP ermöglicht jedoch lediglich den Aufbauschwach gekoppelterSysteme. Die Flexibilität des Konzeptes wird durch Nachteile in Übertragungsvolumen undRechenaufwanderkauft. Das XML-Dokument muss beim Sender zunächst aufgebaut und anschließend validiert werden. Das Konzept verfolgt das Ziel eines leichtgewichtigen Protokolls, aufgrund des flexiblen Einsatzbereiches führt die zu übertragende Datei jedoch eine Reihe vonMetadatenmit sich, die bei der Konstruktion des XML-Dokuments hinzugefügt werden. So führt beispielsweise das einfache Versenden von „Wahr “oder „Falsch “zu einem Datenvolumen von mehreren hundert Bytes, obwohl in einem stark gekoppelten System theoretisch ein Bit reichen würde. Durch die Möglichkeit des flexiblen Aufbaus des Dokuments können jedoch komplexe Transaktionen in einer Anfrageatomarzusammengefasst werden, während in stark gekoppelten Systemen hierzu oftmals mehrere Anfragen gestellt werden müssen. Dies verbessert das Nutzlastverhältnis (Nutzdaten zu Meta-Daten) und den Kommunikationsaufwand (für den Aufbau einer Verbindung, nur ein Senden/Empfangen).
SOAP unterscheidet zwischen dem endgültigen Empfänger und Zwischenempfängern. Dies ermöglicht es, eine Nachricht über verschiedene „Hops “zu schicken, bei denen sogar verschiedene Transportprotokolle verwendet werden. Beispielsweise kann zum ersten Hop die Nachricht mittelsJava Message Servicegeschickt werden, danach über E-Mail und schließlich dem Empfänger mittels HTTP. Der Absender muss über die Zwischenhops keine Information haben, die Middleware jedoch schon.
Aufbau von SOAP-Nachrichten
[Bearbeiten|Quelltext bearbeiten]![](https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/SOAP.svg/220px-SOAP.svg.png)
Eine minimale SOAP-Nachricht besteht aus einemEnvelopegenannten Element, welchem ein lokaler Name zugewiesen werden muss. Dieses Element referenziert mittels eines Namensraum-Attributes aufhttp:// w3.org/2003/05/soap-envelope
.Kind dieses Elements muss einBody-Element sein. Optional kann zuvor einHeader-Element stehen. In diesem können Meta-Informationen, beispielsweise zum Routing, zur Verschlüsselung oder zu Transaktionsidentifizierung, untergebracht werden. ImBody-Element sind die eigentlichen Nutzdaten untergebracht.
Struktur einer SOAP-Nachricht:
<?xml version= "1.0"?>
<s:Envelopexmlns:s="http:// w3.org/2003/05/soap-envelope">
<s:Header>
</s:Header>
<s:Body>
</s:Body>
</s:Envelope>
Innerhalb desBody-Elements können sowohl Informationen zum Datenaustausch, als auch Anweisungen für einen entfernten Prozeduraufruf stehen. Dies ist vom Empfänger entsprechend zu interpretieren.
Im Header wird der nächste Hop (intermediary) und der endgültige Empfänger (ultimate recipient) angegeben.[5]Ein intermediary kann beispielsweise die Nachricht verschlüsseln, sie loggen oder die Nachricht aufteilen. Ersteres erlaubt es, dass die Anwendungslogik sich nicht um die Sicherheit der Nachricht kümmern muss, sondern dies die Middleware übernimmt. Die Möglichkeit, dass Intermediaries beliebige Dinge tun können, ermöglichtEnterprise Application Integrationbeispielsweise mit den EAI Patterns vonGregor Hohpeund Bobby Woolf[6].
Arbeiten mit SOAP
[Bearbeiten|Quelltext bearbeiten]SOAP wird zur Datenbankabfrage über eine Internet-Schnittstelle genutzt. Beispielsweise nutzeneBayoder auchAmazondiese Technik zur Abwicklung von Suchanfragen. Im Folgenden soll über eine Internet-Schnittstelle bei einer zentralen Datenbank nachgefragt werden, ob dort eine Arbeit mit dem Titel „DOM, SAX und SOAP “vorliegt, und diese gegebenenfalls zurückgegeben werden. Diese Datenbank stellt hierzu die Methode „TitleInDatabase “zur Verfügung, die den Titel als Eingabe verlangt. Eine Anfrage könnte dann wie folgt aussehen:
<?xml version= "1.0"?>
<s:Envelopexmlns:s="http:// w3.org/2003/05/soap-envelope">
<s:Body>
<m:TitleInDatabasexmlns:m="http:// lecture-db.de/soap">
DOM,SAXundSOAP
</m:TitleInDatabase>
</s:Body>
</s:Envelope>
Diese SOAP-Anfrage enthält keinHeader-Element. Das Element „TitleInDatabase “ist nicht Teil der SOAP-Definition, sondern anwendungsspezifisch. Der Server empfängt die Nachricht und wertet sie aus. Dabei kann zum Einlesen der Nachricht sowohlSAXals auchDOMverwendet werden. In diesem Fall mag sich ein SAX-Parser empfehlen, der auf „startElement( "TitleInDatabase", […]) “eine entsprechende Datenbankabfrage aufruft, deren Eingabewert beim nächsten „character-Ereignis “eingelesen wird. So kann eine Parallelität zwischen dem Einlesen und dem Auswerten der Nachricht erreicht werden. Anschließend wird in diesem Beispiel eine SOAP-Nachricht als Antwort zurückgegeben:
<?xml version= "1.0"?>
<s:Envelopexmlns:s="http:// w3.org/2003/05/soap-envelope">
<s:Header>
<m:RequestIDxmlns:m="http:// lecture-db.de/soap">a3f5c109b</m:RequestID>
</s:Header>
<s:Body>
<m:DbResponsexmlns:m="http:// lecture-db.de/soap">
<m:titlevalue="DOM, SAX und SOAP">
<m:Choicevalue="1">ArbeitsberichtInformatik</m:Choice>
<m:Choicevalue="2">SeminarXMLundDatenbanken</m:Choice>
</m:title>
</m:DbResponse>
</s:Body>
</s:Envelope>
Der Server hat seiner Antwort einHeader-Element angehängt, welches in diesem Beispiel die Anfragekennung zurückliefert. Die angefragte Information findet sich wiederum imBodyder Nachricht. In diesem Fall wurden zwei Arbeiten gefunden und dem anfragenden System zurückgesendet. Dies führt im Folgenden zu einer wechselseitigen Kommunikation, einem dialogorientierten Austausch von XML-Dokumenten mittels SOAP, an deren Ende schließlich die Übermittlung des angeforderten Elements stehen wird.
Implementierungen
[Bearbeiten|Quelltext bearbeiten]- Apache CXF(Fortführung vonCodehaus XFire),Apache Axis(Jakarta EE), mSOAP, kSOAP undJava API for XML Web ServicesAPI fürJava
- AWS Web DevelopmentFramework
- Curlpackage in CURL.XML.SOAP
- cSOAP und gSOAP fürC/C++
- PHP:SOAP, nuSOAP undPEARSOAP-Projekt fürPHP
- Python SOAP, ZSI, SOAPpy, SUDS und Zeep sind SOAP-Bibliotheken fürPython
- SOAP::WSDLOpen-Source-Toolkit fürPerl
- SOAP für VisualWorks Smalltalk
- WebMethods GLUE
- SOAP4R und Savon fürRuby
- TCLSOAP[7]für die SkriptspracheTcl
- 4th Dimension
- Qt Soap Teil der Solutions (Add-on) derQt-Bibliothek
- KDSOAP Qt4/5 native Library mit einem Konverter von WSDL nach C++/Qt
- FEAST Ein Client-Server-Framework für dieQt-Bibliothek
- wsdl2objcOpen-Source-Toolkit fürObjective-C
- .NET Framework2.0: Zu Serialisierungszwecken in System.Runtime.Serialization.Formatters.Soap, System.Web.Services
- .NET Framework 3.x/4.x:WCF,System.Web.Services
Auf SOAP basierende Erweiterungen
[Bearbeiten|Quelltext bearbeiten]- WS-Reliability(Web Services Reliability): Sicherheitsmechanismen, um z. B. Transaktionen verlässlich abwickeln zu können[8]
- WS-Security(Web Services Security): Sicherstellen von Integrität und Vertraulichkeit von Nachrichten[9]
- WSRP(Web Services for Remote Portlets): Integration von Präsentationslogik in Portale[10]
- weitere Spezifikationen:WS-*
- TR-069CPE WAN Management Protokoll (CWMP)
Siehe auch
[Bearbeiten|Quelltext bearbeiten]- Serviceorientierte Architektur(SOA) – auf SOAP oder ähnlichen Protokollen basierende Architektur
- UDDI(setzt auf SOAP auf; nutzt SOAP)
- WSDL– Beschreibungssprache für auf SOAP-basierte Schnittstellen inkl. einer Nachrichten-Beschreibung
- SoapUI– Werkzeug für den Test von SOAP-Nachrichten
- Hessian,Burlap– alternative Protokolle
- MTOM– Protokoll fürs Versenden von Binärdaten innerhalb von SOAP-Nachrichten
- SOAP with Attachments–W3C-Vorschlag für den Transport von SOAP-Nachrichten innerhalb von MIME-Nachrichten
- DSSP– ein auf SOAP basierendes Protokoll[11]für das Microsoft Robotic Developer Studio
Ferner:
- REST
- CORBA
- Middleware
- Komponente (Software)
- Komponentenbasierte Entwicklung
- Internet Communications Engine(ICE)
- Universal Network Objects
Weblinks
[Bearbeiten|Quelltext bearbeiten]- W3C: SOAP Specifications(englisch)
- XML protocol activity(englisch)
- Beispiel für einen WebService mit Java/SOAPSchritt-für-Schritt-Anleitung für die Implementation eines WebServices in Java mit SOAP (Stand: 2008, deutsch)
- Technologiebericht(englisch; xml.coverpages.org)
- Sicherheit für SOAP mit Tomcat und AXIS(PDF; deutsch)
Einzelnachweise
[Bearbeiten|Quelltext bearbeiten]- ↑en: SOAP Version 1.2 Email Binding
- ↑en:SOAP over Java Message Service 1.0
- ↑en:SOAP Message Construct
- ↑en:XmlCsvReader Implementation
- ↑en: SOAP Processing Model
- ↑en:Patterns and Best Practices for Enterprise Integration
- ↑TclSOAP
- ↑(Web Services Reliable Messaging TC WS-Reliability 1.1)
- ↑(Web Services Security(vom 16. September 2012 imInternet Archive))
- ↑(Web Services for Remote Portlets Specification)
- ↑Decentralized Software Services Protocol – DSSP/1.0