Webszolgáltatás-leíró nyelv
Ez a szócikk vagy szakasz lektorálásra, tartalmi javításokra szorul. |
A Webszolgáltatás leíró nyelv (angolul Web Services Description Language, röviden WSDL) webszolgáltatások leírására szolgáló XML formátum. Az 1.1-es verziót a World Wide Web Consortium (W3C) nem hagyta jóvá, a 2.0-s verzió viszont már egy ajánlás (hivatalos szabvány) a W3C jóváhagyásával.
Webszolgáltatás-leíró nyelv Web Services Description Language | |
Fájlkiterjesztés | .wsdl |
MIME-típus | application/wsdl+xml |
Fejlesztő | World Wide Web Consortium |
Konténerformátuma ennek | XML |
Standard | 2.0-s ajánlás |
A WSDL a webszolgáltatás nyilvános felületét írja le, beleértve a használható üzenetek formátumát. A támogatott műveletek és üzenetek először absztrakt módon vannak definiálva, majd ezek a definíciók vannak hozzákötve a tényleges hálózati protokollhoz és üzenetformátumhoz.
A WSDL-t általában SOAP-pal XSD-vel együtt használják, hogy webszolgáltatást nyújtsanak az interneten. Egy webszolgáltatáshoz kapcsolódó kliens-program (általában a szolgáltatás tényleges használatától függetlenül) le tudja kérni WSDL-t, hogy feltérképezze a rendelkezésre álló funkciókat a szerveren.
Egy WSDL-fájl további WSDL-fájlokat importálhat. Az üzenetekben használhatók a beépített XML-adattípusok, illetve egyedi, összetett adattípusok is definiálhatók XML Schema nyelven. Külső XSD-fájlok is importálhatók.
A WSDL-fájl szerkezete
szerkesztésA WSDL 1.1 illetve 2.0 által használt XML-struktúra hasonló, de több lényeges helyen is eltér.
A különbségeket a bal oldali ábra és a lenti táblázat foglalja össze.
WSDL 1.1 terminológia | WSDL 2.0 terminológia | Értelmezés |
---|---|---|
service | service | Összefoglalja az elérhető szolgáltatásokat. Felsorolja a port/endpoint elemeket. Sokszor egy documentation elemet is tartalmaz, mely folyószöveges formában nyújt további információkat. |
port | endpoint | Megadja, hogy a szolgáltatás konkrétan milyen webcímen érhető el. Környezetfüggő beállítás. |
binding | binding | Egy portType/interface átviteli beállításait adja meg. SOAP esetén megadható a SOAP binding style (RPC/Document) és a transport (SOAP Protocol). További beállítások minden művelethez külön-külön megadhatók (HTTP esetén például a HTTP metódus). |
portType | interface | Definiál egy webes szolgáltatást. Felsorolja, hogy a szolgáltatás milyen műveleteket (operation) használ. A műveletek definíciója a szolgáltatás definícióján belül felsorolva található. |
operation | operation | Definiál egy műveletet, és hivatkozással megadja, hogy melyik üzenettípust (message) használja. Nagyjából megfeleltethető a hagyományos programnyelvekben használt függvényhívás műveletnek. |
message | n/a | Megad egy formátumot, melyet a műveletek használhatnak az adatok továbbítására. Több művelet is használhatja ugyanazt a formátumot. A message-hez mindig tartozik valamilyen (általában összetett egyedi) adattípus, ezért a WSDL 2.0-ban eltörölték a használatát, a műveleteknél közvetlenül az adattípust kell megadni. |
types | types | Az egyedi adattípusokat definiálja XML Schema (XSD) nyelven. Külső XSD fájlok is importálhatók. |
Példakód
szerkesztés<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://www.w3.org/ns/wsdl"
xmlns:tns="http://www.tmsws.com/wsdl20sample"
xmlns:whttp="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:wsoap="http://schemas.xmlsoap.org/wsdl/soap/"
_targetNamespace="http://www.tmsws.com/wsdl20sample">
<!-- Abstract type -->
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.tmsws.com/wsdl20sample"
_targetNamespace="http://www.example.com/wsdl20sample">
<xs:element name="request">
<xs:complexType>
<xs:sequence>
<xs:element name="header" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="body" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="method" type="xs:string" use="required"/>
<xs:attribute name="uri" type="xs:anyURI" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="response">
<xs:complexType>
<xs:sequence>
<xs:element name="header" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="body" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="status-code" type="xs:anySimpleType" use="required"/>
<xs:attribute name="response-phrase" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<!-- Abstract interfaces -->
<interface name="RESTfulInterface">
<fault name="ClientError" element="tns:response"/>
<fault name="ServerError" element="tns:response"/>
<fault name="Redirection" element="tns:response"/>
<operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="In" element="tns:request"/>
<output messageLabel="Out" element="tns:response"/>
</operation>
<operation name="Post" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="In" element="tns:request"/>
<output messageLabel="Out" element="tns:response"/>
</operation>
<operation name="Put" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="In" element="tns:request"/>
<output messageLabel="Out" element="tns:response"/>
</operation>
<operation name="Delete" pattern="http://www.w3.org/ns/wsdl/in-out">
<input messageLabel="In" element="tns:request"/>
<output messageLabel="Out" element="tns:response"/>
</operation>
</interface>
<!-- Concrete Binding Over HTTP -->
<binding name="RESTfulInterfaceHttpBinding" interface="tns:RESTfulInterface"
type="http://www.w3.org/ns/wsdl/http">
<operation ref="tns:Get" whttp:method="GET"/>
<operation ref="tns:Post" whttp:method="POST"
whttp:inputSerialization="application/x-www-form-urlencoded"/>
<operation ref="tns:Put" whttp:method="PUT"
whttp:inputSerialization="application/x-www-form-urlencoded"/>
<operation ref="tns:Delete" whttp:method="DELETE"/>
</binding>
<!-- Concrete Binding with SOAP-->
<binding name="RESTfulInterfaceSoapBinding" interface="tns:RESTfulInterface"
type="http://www.w3.org/ns/wsdl/soap"
wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
<operation ref="tns:Get" />
<operation ref="tns:Post" />
<operation ref="tns:Put" />
<operation ref="tns:Delete" />
</binding>
<!-- Web Service offering endpoints for both bindings-->
<service name="RESTfulService" interface="tns:RESTfulInterface">
<endpoint name="RESTfulServiceHttpEndpoint"
binding="tns:RESTfulInterfaceHttpBinding"
address="http://www.example.com/rest/"/>
<endpoint name="RESTfulServiceSoapEndpoint"
binding="tns:RESTfulInterfaceSoapBinding"
address="http://www.example.com/soap/"/>
</service>
</description>
További információk
szerkesztés- WSDL 1.0 Specifikáció
- WSDL 1.1 Specifikáció
- WSDL 2.0 Specifikáció 0-s rész: Primer (Latest Version)
- WSDL 2.0 Specifikáció 1-es rész: Core (Latest Version)
- WSDL 2.0 Specifikáció 2-es rész: Adjuncts (Latest Version)
- Web Services Description Working Group
- XML protocol activity
- JSR-110: Java API-k WSDL-hez
- JSR 172: Java ME Web Services Specification
- Online WSDL validátor
- W3Schools WSDL 1.1 tutorial
- WSDL programmatic visualization with Linguine Maps
- SSDL - The SOAP Service Description Language
- WSDL Java Bindings Archiválva 2009. április 11-i dátummal a Wayback Machine-ben for XMLBeans and JAXB.
- W3C Working Draft
- WSDL 2.0 szabvány