Mengenal WSDL Web Service

Web Service, WSDL
 Mengenal WSDL dan Strukturnya dalam Web Service

WSDL merupakan kependekan dari Web Services Description Language. WSDL adalah menggunakan XML untuk mendeskripsikan Web services dan bagaimana untuk mengaksesnya. WSDL membantu pengguna web service dalam memakai/menggunakan layanan web service. Web service akan terkunci dan tidak berguna jika tanpa WSDL ini. WSDL menspesifikasikan lokasi service dan operasi (methods) yang disediakan oleh web service.
Sebagai protokol komunikasi dan format pesan yang distandarkan pada komunitas web, WSDL menjadi lebih tepat dan penting untuk mendeskripsikan model komunikasi di beberapa langkah yang terstruktur (dalam memprogram web service).

WSDL menyediakan kebutuhan ini dengan mendefinisikan bentuk XML untuk mendeskripsikan layanan jaringan sebagai kumpulan-kumpulan titik akhir (endpoints) komunikasi yang mampu melakukan pertukaran pesan. Hal tersebut sangat membantu komunikasi antara dua teknologi pada platform-platform secara umum. Definisi layanan WSDL menyediakan dokumentasi untuk sistem terdistribusi dan berfungsi sebagai panduan untuk mengotomatisasi rincian yang terlibat dalam komunikasi antaraplikasi.
WSDL adalah :

  • WSDL ditulis dalam XML
  • WSDL adalah gateway (pintu) komunikasi antara penyedia dan pemakai web service.
  • WSDL adalah dokumen XML
  • WSDL digunakan untuk menempatkan Web service
  • WSDL juga digunakan untuk mendeskripsikan Web service
  • WSDL merupakan rekomendasi W3C

WSDL sering digunakan pada kombinasi SOAP dan XML Schema untuk menyediakan Web service   di internet. Aplikasi client yang menghubungkan ke sebuah Web service dapat membaca file WSDL untuk menentukan operasi apa saja yang tersedia pada server. Tipe-tipe data khusus yang digunakan di-embed pada file WSDL dalam bentuk XML Schema. Client kemudian dapat menggunakan SOAP untuk memanggil operasi-operasi yang terdaftar pada file WSDL secara aktual menggunakan XML atau HTTP.
Spesifikasi WSDL versi terkini adalah versi 2.0; versi 1.1 belum didukung oleh W3C tetapi versi 2.0 sudah merupakan rekomendasi W3C. WSDL 1.2 di-rename menjadi WSDL 2.0 karena perbedaan substansial dari WSDL 1.1. Dengan mengijinkan binding ke semua metode HTTP request (tidak hanya GET dan POST seperti pada versi 1.1), spesifikasi WSDL 2.0 menawarkan dukungan yang lebih baik untuk RESTful web service dan lebih sederhana/simpel untuk diimplementasikan. Akan tetapi, dukungan untuk spesifikasi ini masih terlalu buruk pada SDK untuk Web service yang sering menyediakan tools hanya untuk WSDL 1.1.

Sejarah WSDL

WSDL 1.0 (September 2000) telah dikembangkan oleh IBM, Microsoft, dan Ariba untuk mendeskripsikan Web Service pada SOAP. Dikembangkan dengan mengkombinasikan NASSL (Network Application Service Spesification Language) dari IBM dan SDL (Service Description Language) dari Microsoft. WSDL 1.1 dirilis pada 2001, merupakan formalisasi dari WSDL 1.0. Tidak ada perubahan besar yang diperkenalkan antara versi 1.0 dan 1.1. WSDL 1.2 (Juni 2003) merupakan draf kerja W3C, tetapi menjadi WSDL 2.0. Menurut W3C, WSDL 1.2 lebih mudah dan lebih fleksibel untuk para developer daripada versi sebelumnya. WSDL 1.2 berupaya untuk menghapus fitur non-interoperable dan juga mendefinisikan binding HTTP 1.1 secara lebih baik. WSDL tidak didukung oleh kebanyakan server/vendor SOAP.
WSDL 2.0 menjadi rekomendasi pada bulan Juni 2007. WSDL 1.2 diganti menjadi WSDL 2.0 karena mempunyai perubahan secara substansi dari WSDL 1.1. Perubahan-perubahan tersebut meliputi:

  • Menambahkan semantik pada bahasa deskripsi (description language)
  • Tidak mendukung operator overloading
  • Menghilangkan message construct
  • Ports diganti menjadi endpoints

Elemen-Elemen File WSDL

Elemen-elemen berikut sangat penting dalam sebuah File WSDL

1. Message – sesuatu yang abstrak, definisi tipe data yang akan dikomunikasikan

<message name=’getItemCountRequest’>
<part name=’upc’ type=’xsd:string’/>
</message>
<message name=’getItemCountResponse’>
<part name=’Result’ type=’xsd:integer’/>
</message>

2. Port Type – mendeskripsikan sebuah web service, operasi-operasi yang dapat dijalankan, dan pesan-pesan yang dilibatkan pada Web Service.

<portType name=’InventoryPortType’>
<operation name=’getItemCount’>
<input message=’tns:getItemCountRequest’/>
<output message=’tns:getItemCountResponse’/>
</operation>
</portType>

3. Port – Titik akhir tunggal (single endpoint) yang didefinisikan sebagai sebuah ‘binding’ dan alamat jaringan (network address)

<port name=’InventoryPort’ binding=’InventoryBinding’>
<soap:address location=’http://localhost/soap/server/server.php’/&gt;
</port>

4. Service – Sekumpulan endpoint yang saling berhubungan, akan menunjukkan file/path mana yang akan ditempatkan pada file WSDL ini

<service name=’InventoryService’>
<port name=’InventoryPort’ binding=’InventoryBinding’>
<soap:address location=’http://localhost/soap/server/server.php’/&gt;
</port>
</service>

5. Operation – deskripsi abstrak dari suatu aksi yang didukung oleh service. Pada dasarnya menunjukkan nama operasi web service dan pesan input output

<operation name=’getItemCount’>
<input message=’tns:getItemCountRequest’/>
<output message=’tns:getItemCountResponse’/>
</operation>

6. Binding – protokol komunikasi yang digunakan oleh web service

<binding name=’InventoryBinding’ type=’tns:InventoryPortType’>
<soap:binding style=’rpc’
transport=’http://schemas.xmlsoap.org/soap/http’/&gt;
<operation name=’getItemCount’>
<soap:operation soapAction=’urn:xmethods-delayed-quotes#getItemCount’/>
<input>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;
</input>
<output>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;
</output>
</operation>
</binding>

Jika semua elemen-elemen WSDL diatas digabungkan dan disimpan ke dalam suatu file, maka secara keseluruhan file WSDL akan berbentuk seperti berikut:

<?xml version=’1.0′ encoding=’UTF-8′ ?>
<definitions name=’Inventory’
targetNamespace=’urn:test’
xmlns:tns=’urn:test’
xmlns:soap=’http://schemas.xmlsoap.org/wsdl/soap/&#8217;
xmlns:xsd=’http://www.w3.org/2001/XMLSchema&#8217;
xmlns:soapenc=’http://schemas.xmlsoap.org/soap/encoding/&#8217;
xmlns:wsdl=’http://schemas.xmlsoap.org/wsdl/&#8217;
xmlns=’http://schemas.xmlsoap.org/wsdl/’&gt;
<message name=’getItemCountRequest’>
<part name=’upc’ type=’xsd:string’/>
</message>
<message name=’getItemCountResponse’>
<part name=’Result’ type=’xsd:integer’/>
</message>
<portType name=’InventoryPortType’>
<operation name=’getItemCount’>
<input message=’tns:getItemCountRequest’/>
<output message=’tns:getItemCountResponse’/>
</operation>
</portType>
<binding name=’InventoryBinding’ type=’tns:InventoryPortType’>
<soap:binding style=’rpc’
transport=’http://schemas.xmlsoap.org/soap/http’/&gt;
<operation name=’getItemCount’>
<soap:operation soapAction=’urn:xmethods-delayed-quotes#getItemCount’/>
<input>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;
</input>
<output>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;
</output>
</operation>
</binding>
<service name=’InventoryService’>
<port name=’IsnventoryPort’ binding=’InventoryBinding’>
<soap:address location=’http://localhost/soap/server/server.php’/&gt;
</port>
</service>
</definitions>

Contoh lain  dari file WSDL :

<?xml version=”1.0″ encoding=”UTF-8″?>
<description xmlns=”http://www.w3.org/ns/wsdl&#8221;
xmlns:tns=”http://www.tmsws.com/wsdl20sample&#8221;
xmlns:whttp=”http://schemas.xmlsoap.org/wsdl/http/&#8221;
xmlns:wsoap=”http://schemas.xmlsoap.org/wsdl/soap/&#8221;
targetNamespace=”http://www.tmsws.com/wsdl20sample”&gt;

<!– Abstract type –>
<types>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema&#8221;
xmlns=”http://www.tmsws.com/wsdl20sample&#8221;
targetNamespace=”http://www.example.com/wsdl20sample”&gt;

<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”&gt;
<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”&gt;
<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”&gt;
<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”&gt;
<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”&gt;
<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&#8221;
wsoap:protocol=”http://www.w3.org/2003/05/soap/bindings/HTTP/&#8221;
wsoap:mepDefault=”http://www.w3.org/2003/05/soap/mep/request-response”&gt;
<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/”/&gt;
<endpoint name=”RESTfulServiceSoapEndpoint”
binding=”tns:RESTfulInterfaceSoapBinding”
address=”http://www.example.com/soap/”/&gt;
</service>
</description>

Sekian sedikit pemaparan mengenai WSDL. Semoga memberikan petunjuk. Terimakasih
Advertisements

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s