**WSDL** ialah kependekan bagi ***Web Services Description Language*** (bermaksud 'bahasa perihalan perkhidmatan web') iaitu sebuah bahasa perihalan antara muka berasaskan XML yang digunakan untuk memerihalkan kefungsian yang disediakan oleh sesebuah perkhidmatan web. Perihal WSDL bagi sesebuah perkhidmatan web (atau *fail WSDL*) menyediakan perihal boleh-baca-mesin tentang bagaimana perhidmatan tersebut boleh dipanggil, parameter apakah yang dijangkanya, dan struktur data apakah yang dipulangkannya. Dengan itu ia berfungsi seakan sama dengan tandatangan kaedah dalam bahasa pengaturcaraan.

Versi terkini WSDL ialah WSDL 2.0. Kepanjangannya bertukar dari versi 1.1 di mana **D** dulunya mewakili ***Definition*** (bermaksud 'tafsiran').

Huraian
-------

Gambaran konsep yang ditakrif oleh dokumen-dokumnen WSDL 1.1 dan WSDL 2.0.
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.

Sejarah
-------

Pada September 2000, WSDL 1.0 telah dibangunkan oleh IBM, Microsoft, dan Ariba untuk memerihalkan khidmat-khidmat Web untuk toolkit SOAP mereka. Ia dibangunkan dengan menggabungkan dua bahasa pemerihal perkhidmatan iaitu NASSL (*Network Application Service Specification Language*) daripada IBM dan SDL (*Service Description Language*) daripada Microsoft.

WSDL 1.1 kemudian telah diterbitkan pada bulan Mac 2001. Ia merupakan pemformalan WSDL 1.0 dan tiada perubahan besar dibuat antara 1.0 dan 1.1. Pada bulan Jun 2003, WSDL 1.2, draf kerja di W3C dibuat. Menurut W3C, WSDL 1.2 adalah lebih mudah dan lebih fleksibel kepada para pembangun berbanding versi sebelumnya. Ia cuba untuk membuang ciri-ciri bukan saling kendali «interoperable» dan turut mentakrifkan ikatan HTTP 1.1 dengan lebih baik. WSDL 1.2 tidak disokong oleh kebanyakan pelayan/vendor SOAP.

WSDL 1.2 diganti namanya kepada WSDL 2.0 dan menjadi syor W3C pada Jun 2007. Penamaan semula dibuat kerana beza antara WSDL 1.1 dan WSDL 1.2 cukup besar. Antara perubahan yang dibuat ialah:

* Simantik lanjutan ditambah kepada bahasa pemerihal ini
* Binaan *message* «pesanan» dibuang
* Penyaratan pengendali «operator overloading» tidak disokong
* Nama *port* ditukar kepada *endpoint* «titik hujung».

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>

```

Rujukan
-------

1. ↑  "Web Services Definition Language (WSDL) Version 2.0 Part 1: Core Language". Dicapai pada 2007-06-27.
2. ↑  "Web Services Definition Language (WSDL) Version 2.0 Part 2: Adjuncts".
3. ↑  "WITW WSDL 2.0 HTTP Binding". Diarkibkan daripada yang asal pada 2012-06-20. Dicapai pada 2015-12-05.

Pautan luar
-----------

* Tentuan WSDL 1.0
* Tentuan WSDL 1.1
* WSDL 2.0 Specification Part 0: Primer (Versi Terkini)
* WSDL 2.0 Specification Part 1: Core (Versi Terkini)
* WSDL 2.0 Specification Part 2: Adjuncts (Versi Terkini)