Ø SOAP
SOAP (Simple Object Access Protocol) adalah standar
untuk bertukar pesan-pesan berbasis XML melalui jaringan komputer atau sebuah jalan untuk program yang berjalan pada suatu
sistem operasi (OS) untuk berkomunikasi dengan program pada
OS yang sama maupun berbeda dengan menggunakan HTTP dan XML sebagai mekanisme untuk pertukaran
data.
SOAP menspesifikan secara jelas
bagaimana cara untuk meng-encodeheader HHTP dan file XML sehingga
program pada suatu komputer
dapat memanggil program pada komputer lain dan mengirimkan informasi, dan
bagaimana program yang dipanggil memberikan tanggapan.
SOAP menggunakan teknologi XML utuk mendefinisikan rangka kerja
pemesanan terekstrensi di mana menyediakan konstruksi pesan yang dapat
dipertukarkan pada protokol berbeda. Rangka kerja dirancang bebas dari model
pemrograman dan spesifikasi implementasi semantik.
SOAP meliputi empat bagian:
·
SOAP
paket (amplop), mendefinisikan sebuah paket menggambarkan apa
isi pesan yang terkirim, yang seharusnya menerima dan menangani dan bagaimana
menangani kerangka kerja mereka;
·
SOAP
Encoding aturan (aturan encoding), digunakan untuk merepresentasikan
aplikasi perlu menggunakan tipe data contoh;
· SOAP
RPC kata (RPC representasi), bahwa panggilan prosedur terpencil
dan tanggapan dari perjanjian;
·
SOAP
Binding (mengikat), protokol yang mendasari digunakan untuk
bertukar informasi.
Meskipun empat bagian sebagai bagian dari SOAP, sebagai definisi
keseluruhan, tetapi mereka secara fungsional berpotongan satu sama independen
lain. Secara khusus, amplop dan aturan encoding didefinisikan di ruang nama XML
yang berbeda (namespace), sehingga membuat definisi mudah.
Dua tujuan desain utama SOAP adalah kesederhanaan dan
skalabilitas. Ini berarti bahwa ada beberapa sistem informasi tradisional atau
sistem objek terdistribusi, beberapa properti tidak akan menjadi bagian dari
spesifikasi SOAP.
Contoh dari permintaan soap
<?xml
version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
</soap:Header>
<soap:Body>
<m:GetStockPrice
xmlns:m="http://www.example.org/stock">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Ø
XML-RPC
Menurut http://www.xmlrpc.com, XML-RPC adalah
suatu spesifikasi dan set implementasi yang mengijinkan software dengan sistem
operasi terpisah, berjalan di lingkungan yang berbeda untuk membuat procedure call di internet.
XML-RPC
menggunakan HTTP sebagai transport dan XML sebagai encoding. XML-RPC dirancang sesederhana mungkin namun
dapat mentransmisikan, memproses dan mengirim balik struktur data yang
kompleks.
XML-RPC adalah spesifikasi final yang lebih sederhana dan mudah
diimplementasikan dibanding SOAP. Secara fundamental perubahan yang dibawa oleh
kedua adalah kemampuan untuk memindahkan data kemana pun melalui web. Sebelumnya
hal itu hanya mampu ditangani oleh Electronic
Data Interchange (EDI). EDI mendefiniskan message dan protocol
yang digunakan untuk pertukaran data melalu jaringan. Tapi hal ini mengunci
jaringan-jaringan yang tergabung pada satu standar tertentu, dan membuat mahal
implementasi pada jaringan baru yang akan digabungkan.
XML-RPC dan SOAP dikerjakan dengan mengubah sekumpulan parameter
(skalar, string, tanggal, array, record, data biner) ke transmisi XML. XML-RPC
didefinisikan beroperasi diatas koneksi HTTP, sementara SOAP mendeskripsikan
format amplop-nya untuk RPC request yang bisa dikirimkan melalu HTTP, SMTP, FTP
atau beberapa protokol TCP/IP lainnya. XML-RPC melewatkan parameternya dengan
posisi sementara SOAP melewatkan paramaternya dengan nama.
XML-RPC
awalnya dikerjakan oleh Dave Winner dari Userland (kemudian menjadi salah satu
kontributor SOAP, sebagai teknologi lanjutan yang diperluas dari XML-RPC).
Masalah klasik yang mesti dipecahkannya mula-mula adalah bagaimana membuat
perangkat lunak yang bisa berjalan di lingkungan yang berbeda saling berbicara.
Komunikasi lintas-platform ini didemonstrasikan Winner dengan meletakkan
perintah-perintah remote procedure pada body HTTP POST.Selanjutnya hanya
diperlukan kosakata XML yang mendefinisikan nama-nama potongan kode perintah
jarak jauh dan paramater-parameter yang diperlukannya.
Elemen XML pada XML-RPC dengan sederhana mendefinsikan kosakata untuk menyampaikan informasi prosedur-prosedur mana yang akan dieksekusi pada remote-server. Ketika server menerima message XML-RPC dari HTTP POST request, dokumen XML-nya akan digunakan untuk memicu sebuah remote-procedure dan hasilnya dikirimkan balik pada pengirimnya sebagai XML juga.
Dengan semangat pakai-ulang (reusability), XML-RPC menggunakan tipe data
XMLSchema untuk paramater dan prosedur yang akan dipanggilnya. Berikut ini
adalah daftar tipe dataskalar untuk parameter XML-RPC dan nilai-nilainya.
Tag
|
Tipe
|
Contoh
|
<boolean>
|
0 bernilai benar
1 bernilai salah |
<boolean>1</boolean>
|
<string>
|
ASCII string
|
<string>Moonlight</string>
|
<double>
|
Bentuk decimal
|
<double>-66.6</double>
|
<i4> atau <int>
|
integer
|
<int>888</int> atau
<i4>444</i4>
|
<base64>
|
Binary kode
|
<base64> 7HYBsu76HT7HJ
</base64>
|
<dateTime.iso8601>
|
Date/time
|
<dateTime.iso8601>20032224T14:05:43</dateTime.iso8601>
|
<array>
|
array
|
<array>
<data>
<value><i4>1404</i4></value>
<value><string>Something
here</string></value>
<value><i4>1</i4></value>
</data>
</array>
|
<struct>
|
Associative array
|
<struct> <member>
<name>foo</name>
<value><i4>1</i4></value>
</member>
<member>
<name>bar</name>
<value><i4>2</i4></value>
</member>
</struct> |
<nil>
|
Data null
|
<nil/>
|
Ø
WSDL
WSDL / Web
Service Description Language, menggambarkan layanan sebagai endpoint dari
sebuah jaringan atau port. Spesifikasi WSDL menyediakan format XML untuk sebuah
dokumen dengan tujuan tertentu. WSDL sering digunakan dalam kombinasi dengan
schema SOAP dan XML untuk memberikan web service melalu internet. Sebuah
program client yang terhubung ke layanan web dapat membaca file WSDL untuk
menentukan operasi apa yang tersedia pada server. Setiap tipe data khusus yang
digunakan tertanam dalam file WSDL dalam bentuk schema XML. Client dapat
menggunakan SOAP untuk benar-benar memanggil salah satu operasi yang terdaftar
dalam file WSDL menggunakan XML atau HTTP.
WSDL
menyediakan sebuah kamus XML untuk menjabarkan detail-detail ini. WSDL
digunakan di mana skema XML tidak digunakan lagi dengan menyediakan jalur
pesan-pesan grup menjadi operasi-operasi dan operasi-operasi menjadi antarmuka.
Ini juga menyediakan jalur untuk medefinisikan binding-binding untuk setiap antamuka dan kombinasi
protokol sepanjang alamat titik akhir utnuk setiap kalinya. Definisi WSDL yang
lengkap terdiri dari seluruh informasi yang dibutuhkan untuk meminta web service. Pengembang yang
mau mempermudah
yang lain untuk mengakses service-servicenya harus menyediakan defisi-definisi
WSDL.
WSDL memainkan peranan penting pada
seluruh arsitektur web service semenjak menjabarkan kontrak lengkap
pada komunikasi aplikasi (sama seperti peran IDL pada arsitektur DCOM). Walaupun teknik-teknik lain untuk
menjabarkan Web service ada, WS-I Basic Profile Versi 1.0 memadati penggunaan
WSDL dan skema XML untuk menjabarkan web
service. Ini membantu untuk memastikan interoperbilitas pada layer
deskripsi servis.
Contoh code :
<?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>