WSDL

WSDL (Web Services Description Language) je jazyk, ktorý opisuje, aké funkcie ponúka webová služba a spôsob, ako sa jej to opýtať. Zapisuje sa vo formáte XML. Spravidla teda opisuje SOAP komunikáciu.
Podporované operácie a správy sú opísané abstraktne a potom sa obmedzujú na konkrétny sieťový protokol a formát správy. Toto znamená, že WSDL opisuje verejné rozhrania webovej služby.
WSDL sa často používa v kombinácii so SOAP a XML, aby poskytovalo webové služby cez internet. Klientský program pripájajúci sa k webovej službe vie čítať WSDL, aby zistil, aké funkcie sú dostupné na serveri. Akékoľvek použité špeciálne dátové typy sú uložené vo WSDL súbore vo formáte XML. Program môže používať SOAP na zavolanie funkcií napísaných vo WSDL .

Príklad WSDL súboru

Príklad štruktúrovaného WSDL dokumentu vo verzii 2.0:
<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.w3.org/ns/wsdl"              xmlns:tns="http://www.example.com/wsdl20sample"              xmlns:whttp="http://www.w3.org/ns/wsdl/http"             xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"             targetNamespace="http://www.example.com/wsdl20sample">
 
 
<!-- Abstract types -->
   <types>
      <xs:schema xmlns="http://www.example.com/wsdl20sample"                 xmlns:xs="http://www.w3.org/2001/XMLSchema"                  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" 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="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="GetMsg" element="tns:request"/>
         <output messageLabel="SuccessfulMsg" element="tns:response"/>
      </operation>
      <operation name="Post" pattern="http://www.w3.org/ns/wsdl/in-out">
         <input messageLabel="PostMsg" element="tns:request"/>
         <output messageLabel="SuccessfulMsg" element="tns:response"/>
      </operation>
      <operation name="Put" pattern="http://www.w3.org/ns/wsdl/in-out">
         <input messageLabel="PutMsg" element="tns:request"/>
         <output messageLabel="SuccessfulMsg" element="tns:response"/>
      </operation>
      <operation name="Delete" pattern="http://www.w3.org/ns/wsdl/in-out">
         <input messageLabel="DeleteMsg" element="tns:request"/>
         <output messageLabel="SuccessfulMsg" 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 the bindings-->
   <service name="RESTfulService" interface="tns:RESTfulInterface">
      <endpoint name="RESTfulServiceRestEndpoint"                 binding="tns:RESTfulInterfaceHttpBinding"                 address="http://www.example.com/rest/"/>
      <endpoint name="RESTfulServiceSoapEndpoint"                 binding="tns:RESTfulInterfaceSoapBinding"                 address="http://www.example.com/soap/"/>
   </service></definitions>