WSDL

Huraian

WSDL memerihalkan khidmat «service» sebagai koleksi titik-titik hujung (atau port) rangkaian. Tentuan WSDL menyediakan format XML untuk dokumen-dokumen bagi tujuan ini. Takrifan abstrak port dan pesanan diasingkan dengan penggunaan atau tika «instance» konkritnya. Port ditakrifkan dengan mengaitkan sesuatu alamat rangkaian dengan ikatan «binding» yang boleh diguna semula, dan satu khidmat boleh ditakrifkan oleh beberapa port. Pesanan «message» ialah takrifan abstrak bagi data yang saling ditukar-tukar, manakala jenis port «port type» ialah koleksi abstrak operasi yang tersedia. Tentuan-tentuan protokol dan format data konkrit bagi jenis port tertentu membentuk satu ikatan boleh guna semula, di mana operasi dan pesanan seterusnya diikat ke protokol rangkaian dan format pesanan konkrit. Beginilah WSDL memerihalkan antara muka umum kepada perkhidmatan Web.
WSDL sering diguna bersama SOAP dan XML Schema untuk menyediakan perkhidmatan Web di Internet. Atur cara pelanggan yang menyambung ke sesuatu khidmat Web boleh membaca fail WSDLnya untuk mengetahui operasi-operasi yang disediakan oleh pelayannya. Sebarang jenis-jenis data khas diisi di dalam fail WSDL dalam bentuk XML Schema. Pelanggan kemudian boleh menggunakan SOAP untuk memanggil salah satu operasi yang disenaraikan dalam fail WSDL menggunakan—contohnya—XML menerusi HTTP.
Versi terkini tentuan ini ialah 2.0; versi 1.1 belum pernah disahkan oleh W3C manakala versi 2.0 disyorkan oleh W3C. Nama WSDL 1.2 ditukar kepada WSDL 2.0 atas perbezaan yang cukup besar dengan WSDL 1.1. Dengan menerima segala kaedah permintaan HTTP (bukan hanya GET dan POST macam dalam versi 1.1), tentuan WSDL 2.0 menyediakan sokongan yang lebih bagus kepada perkhidmatan web RESTful, malah lebih mudah untuk dilaksanakan.

Contoh fail WSDL

<?xml version="1.0" encoding="UTF-8"?><definitions 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"><!-- Jenis abstrak -->
   <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:element>
         <xs:element name="response"> ... </xs:element>
      </xs:schema>
   </types><!-- Antara muka abstrak -->
   <interface name="Interface1">
      <fault name="Error1" 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>
   </interface><!-- Ikatan konkrit atas HTTP -->
   <binding name="HttpBinding" interface="tns:Interface1" 
            type="http://www.w3.org/ns/wsdl/http">
      <operation ref="tns:Get" whttp:method="GET"/>
   </binding>
   
<!-- Ikatan konkrit dengan SOAP-->
   <binding name="SoapBinding" interface="tns:Interface1" 
            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" />
   </binding><!-- Khidmat Web menyediakan titik-titik hujung untuk kedua-dua ikatan -->
   <service name="Service1" interface="tns:Interface1">
      <endpoint name="HttpEndpoint" 
                binding="tns:HttpBinding" 
                address="http://www.example.com/rest/"/>
      <endpoint name="SoapEndpoint" 
                binding="tns:SoapBinding" 
                address="http://www.example.com/soap/"/>
   </service></definitions>