Mengenal WSDL dan Strukturnya dalam Web Service
WSDL merupakan kependekan dari Web Services Description Language. WSDL adalahmenggunakan 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 :
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:
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 WSDL1. 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'/>
</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'/>
</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'/>
<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/'/>
</input>
<output>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</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/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<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'/>
<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/'/>
</input>
<output>
<soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</output>
</operation>
</binding>
<service name='InventoryService'>
<port name='IsnventoryPort' binding='InventoryBinding'>
<soap:address location='http://localhost/soap/server/server.php'/>
</port>
</service>
</definitions>
Contoh lain dari file WSDL :
<?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>
Mungkin hanya itu saja artikel tentang Mengenal WSDL dan Strukturnya dalam Web Service, mohon maaf artikel ini tidak murni buatan saya tapi hasil copy-edit dari sumber ini : adityarizki.net, wassalam.
0 comments: