XML -WSDL
- WSDL staat voor Web Services Description Language
- WSDL wordt gebruikt om webservices te beschrijven
- WSDL is geschreven in XML
- WSDL is een W3C-aanbeveling van 26 juni 2007
WSDL-documenten
Een WSDL-document beschrijft een webservice. Het specificeert de locatie van de service en de methoden van de service, met behulp van deze belangrijke elementen:
Element | Description |
---|---|
<types> | Defines the (XML Schema) data types used by the web service |
<message> | Defines the data elements for each operation |
<portType> | Describes the operations that can be performed and the messages involved. |
<binding> | Defines the protocol and data format for each port type |
De hoofdstructuur van een WSDL-document ziet er als volgt uit:
<definitions>
<types>
data type definitions........
</types>
<message>
definition of the data being communicated....
</message>
<portType>
set of operations......
</portType>
<binding>
protocol and data format specification....
</binding>
</definitions>
WSDL-voorbeeld
Dit is een vereenvoudigde fractie van een WSDL-document:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
In dit voorbeeld definieert het element <portType> "glossaryTerms" als de naam van een poort en "getTerm" als de naam van een bewerking .
De bewerking "getTerm" heeft een invoerbericht met de naam "getTermRequest" en een uitvoerbericht met de naam "getTermResponse".
De <message> -elementen definiëren de onderdelen van elk bericht en de bijbehorende datatypes.
Het <portType>-element
Het element <portType> definieert een webservice , de bewerkingen die kunnen worden uitgevoerd en de berichten die erbij betrokken zijn.
Het verzoek-antwoordtype is het meest voorkomende bewerkingstype, maar WSDL definieert vier typen:
Type | Definition |
---|---|
One-way | The operation can receive a message but will not return a response |
Request-response | The operation can receive a request and will return a response |
Solicit-response | The operation can send a request and will wait for a response |
Notification | The operation can send a message but will not wait for a response |
WSDL Eenrichtingsbediening
Een voorbeeld van eenrichtingsverkeer:
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm" message="newTermValues"/>
</operation>
</portType >
In het bovenstaande voorbeeld definieert het portType "glossaryTerms" een eenrichtingsbewerking met de naam "setTerm".
Met de bewerking "setTerm" kunnen nieuwe woordenlijsttermen worden ingevoerd met behulp van een "newTermValues"-bericht met de invoerparameters "term" en "value". Er is echter geen uitvoer gedefinieerd voor de bewerking.
WSDL-verzoek-antwoordbewerking
Een voorbeeld van een verzoek-antwoordbewerking:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
In het bovenstaande voorbeeld definieert het portType "glossaryTerms" een verzoek-antwoordbewerking met de naam "getTerm".
De bewerking "getTerm" vereist een invoerbericht met de naam "getTermRequest" met een parameter met de naam "term", en retourneert een uitvoerbericht met de naam "getTermResponse" met een parameter met de naam "value".
WSDL Binding aan SOAP
WSDL-bindingen definieert de berichtindeling en protocoldetails voor een webservice.
Een voorbeeld van een verzoek-antwoordbewerking:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapAction="http://example.com/getTerm"/>
<input><soap:body use="literal"/></input>
<output><soap:body use="literal"/></output>
</operation>
</binding>
Het bindingselement heeft twee attributen: naam en type.
Het name-attribuut (u kunt elke gewenste naam gebruiken) definieert de naam van de binding, en het type-attribuut verwijst naar de poort voor de binding, in dit geval de "glossaryTerms"-poort.
Het soap:bindende element heeft twee kenmerken: stijl en transport.
Het stijlkenmerk kan "rpc" of "document" zijn. In dit geval gebruiken we document. Het transportattribuut definieert het te gebruiken SOAP-protocol. In dit geval gebruiken we HTTP.
Het bewerkingselement definieert elke bewerking die het portType blootlegt.
Voor elke operatie moet de bijbehorende SOAP-actie worden gedefinieerd. U moet ook specificeren hoe de invoer en uitvoer worden gecodeerd. In dit geval gebruiken we "letterlijk".