Simple Object Access Protocol (SOAP)
Apa itu SOAP?SOAP adalah singkatan dari Simple Object Access Protocol, merupakan sebuah protokol komunikasi client server yang mengirim dan menerima informasi “di atas HTTP”. Data yang dikirim dan diterima dalam format XML. SOAP hampir sama dengan protokol XMLRP, hanya saja SOAP lebih cocok digunakan untuk data kompleks yang dikirim antar client-server.
Secara konseptual SOAP dapat dianggap sebagai DCOM versi XML. SOAP merupakan mekanisme lain yang memungkinkan penggunaan remote procedure call. SOAP bersifat netral platform, netral bahasa dan tidak bergantung pada suatu objek model. Sehingga SOAP-enabled distributed application dapat menjangkau beragam operating sistem, dimana terdiri dari objek yang berasal dari vendor yang berbeda, ditulis pada bahasa yang berbeda, dan didasarkan pada objek model yang berbeda.
SOAP menjadi sangat mudah diterima oleh berbagai pihak – terutama oleh berbagai vendor TI – dikarenakan protokol ini memanfaatkan berbagai teknologi yang sudah ada sebelumnya dan sudah banyak digunakan. Misalnya untuk protokol transport, yang paling banyak digunakan adalah HTTP, walaupun dimungkinkan untuk menggunakan protokol transport lainnya. Sedangkan untuk format data atau message digunakan XML yang tidak diragukan lagi manfaat dan perannya di dalam pertukaran data. Dengan demikian, tidaklah terlalu mengherankan bila kemudian SOAP dianggap sebagai solusi penyelamat untuk mengatasi berbagai masalah yang dihadapi oleh teknologi – teknologi pendahulunya.
Arsitektur SOAP
Pesan SOAP berbentuk seperti sebuah envelope yang berisi header (optional) dan body (required). Header berisi blok informasi yang berhubungan dengan bagaimana pesan tersebut diproses. Hal ini meliputi pe-routingan dan delivery setting, authentication atau authorization assertions, and transaction contexts. Body berisi pesan sebenarnya yang dikirim dan diproses. Semua yang dapat ditampilkan dengan sintaks XML dapat dimasukkan dalam pesan body.
Setiap elemen Envelope harus berisi tepat satu elemen Body. Elemen Body dapat berisi sebanyak mungkin child nodes yang diperlukan. Isi dari elemen Body adalah pesan. Elemen Body ditentukan dalam suatu cara dimana dapat berisi valid dan wellformed XML yang telah dibatasi oleh suatu namespace (qualified).
Jika sebuah Envelope berisi elemen Header, harus berisi tidak lebih dari satu, dan harus tampak pada first child dari Envelope, sebelum elemen Body. Header dapat berisi valid, well-formed, dan dibatasi dengan namespace XML dimana hendak dimasukkan oleh pencipta pesan SOAP.
Struktur SOAP Envelop kurang lebih sebagai berikut :
<?xml version=”1.0″?> |
<soap:envelope xmlns:soap=”http://www.w3.org/2001/12/soap-envelope” soap:encodingstyle=”http://www.w3.org/2001/12/soap-encoding”> |
… |
Pesan informasi, bisa mengandung |
element Header dan harus |
terdapat element Body |
… |
</soap:envelope> |
Gambar. Skema proses menggunakan RPC
Setiap elemen yang berada dalam Header disebut blok header. Tujuan
dari blok header adalah untuk memberitahukan infomasi yang berhubungan
dengan pemrosesan pesan SOAP.Berikut gambar posisi SOAP dalam aplikasi dan contoh struktur pesan SOAP :
SOAP Anatomi Call
Contoh Struktur Pesan SOAP
Aturan SOAP
Ada beberapa aturan yang diberlakukan pada SOAP, yakni :
- SOAP Envelope menggunakan namespace
- Default namespace untuk SOAP encoding dan data types
- SOAP’s Syntax Rules :
- SOAP harus dibuat dengan menggunakan sintaks XML
- SOAP harus menggunakan SOAP Envelope namespace
- SOAP harus menggunakan SOAP Encoding namespace
- SOAP tidak boleh mengandung XML Processing Instruction
Adapun kelebihan SOAP dapat diuraikan sebagai berikut :
- Menggunakan HTTP yang telah digunakan secara luas
- Bersifat fleksibel, mudah dikembangkan, karena berbasis XML
- Data in string message
- Parsing paket SOAP dan pemetaannya ke obyek mengurangi kinerja
- Tidak dapat menerapkan keamanan khusus, karena merupakan “wire protocol” yang bergantung pada HTTP
Dalam membangun sebuah sistem aplikasi berbasis web service, dibutuhkan dua komponen utama yaitu, server sebagai provider entity dan client sebagai requester entity . Sebagai contoh, di bawah ini terdapat dua listing program pada sisi server dansisi client.
Berikut contoh implementasi NuSOAP pada sisi server:
Kode Program File server.php
Berikut implementasi NuSOAP untuk sisi klien:
Kode Program File client.php
Berikut ini tampilan di web browser dari web service yang dijalankan antar dua file server.php dan client.php tersebut:
Tampilan Web Service sederhana dengan PHP:
Listing Program
$client = new soapclient(‘https://222.124.145.222/tps/service.asmx?WSDL’, true);
$result = $client->call($service_name, array(‘fStream’=>$xml_data,’Username’ => $service_username, ‘Password’=>$service_password));
//ini adalah hasilnya
$hasil = $result['CoCoCont_TesResult'];
print_r($result);
$sql_change = “UPDATE `tps_cococont_header` SET `SENT` = ’1′ WHERE `REF_NUMBER` = ‘$ref_num’ “;
$rs_change = $db_int->execute($sql_change);
if($result){
//common::alert_to(“Pengiriman data dengan Ref Number $ref_num Berhasil”, “index.php?module=xmlGenerator&action=listKirimKontainer”);
switch($hasil){
case “Proses berhasil”:
$sql_change = “UPDATE `tps_cococont_header` SET `SENT` = ’1′ WHERE `REF_NUMBER` = ‘$ref_num’ “;
$rs_change = $db_int->execute($sql_change);
echo “berhasil”;
break;
case “User Tidak Dikenal !!”:
break;
case “Validasi data XML anda tidak benar”:
Result
kontainer_xml_template.xml
xml version=”1.0″ encoding=”UTF-8″ ?>
- <DOCUMENT xmlns=”cococont.xsd“>
- <COCOCONT>
- <HEADER>
<KD_DOK>{$kd_dok}<!–KD_DOK>
<KD_TPS>{$kd_tps}<!–KD_TPS>
NuSOAP
NuSOAP adalah sebuah kumpulan class-class PHP yang memungkinkan user untuk mengirim dan menerima pesan SOAP melalui protokol HTTP. Salah satu keuntungan dari NuSOAP adalah penggunaannya tidak membutuhkan registrasi khusus ke Sistem Operasi maupun web server karena NuSOAP bukan merupakan PHP extension. NuSOAP ditulis dalam kode PHP murni sehingga semua developer web dapat mengunakan tool ini tanpa tergantung pada jenis web server yang digunakan.
NuSOAP merupakan toolkit web service berbasis komponen. NuSOAP memiliki sebuah class dasar yang menyediakan method seperti serialisasi variabel dan pemaketan SOAP-Envelope. Interaksi web service dilakukan dengan class client yang disebut dengan class “soapclient” dan class server yang disebut dengan class “soap_server”. Class-class ini mengizinkan user untuk melakukan proses pengiriman dan penerimaan pesan-pesan SOAP dengan bantuan beberapa class-class pendukung lainnya untuk melengkapi proses tersebut.
Operasi-operasi pengiriman pesan SOAP dijalankan dengan melibatkan paramater nama operasi yang diinginkan melalui method call(). Jika web service yang dituju menyediakan sebuah file WSDL, maka class “soapclient” akan mengacu langsung pada URL file WSDL tersebut dan menggunakan class “wsdl” untuk mem-parsing file WSDL dan mengekstrak seluruh datanya. Class “wsdl” menyediakan method-method untuk mengekstrak data per-operasi dan per-binding.
Class “soapclient” menggunakan data dari file WSDL untuk menerjemahkan parameter-parameternya sekaligus menyusun SOAP envelope ketika user mengeksekusi suatu pemanggilan service. Ketika pemanggilan ini dieksekusi, class “soapclient” menggunakan “soap_transport_http” untuk mengirim pesan SOAP request dan menerima pesan SOAP response. Selanjutnya pesan SOAP response yang diterima di-parsing dengan menggunakan class “soap_parser” .
Berikut ini adalah diagram proses web service dengan menggunakan NuSOAP:
Gambar Diagram proses web service dengan NuSOAP
Instalasi dan Konfigurasi NuSOAP
Instalasi dan konfigurasi NuSOAP dapat dilakukan dengan tahapan berikut:- Download file dari situs http://dietrich.ganx4.com/nusoap/.
- Ekstrak file zip
- Copy file nusoap.php ke lokasi direktori tertentu
- Lakukan include class dalam kode PHP:
Contoh Pemrograman NuSOAP
Berikut ini merupakan hasil capture dari sebuah aplikasi zodiak menggunakan web service yang dikembangkan menggunakan NuSOAP
gambar. Aplikasi server dari web service zodiak
Gambar. Aplikasi client dari web service zodiac
permisi gan, saya ada sedikit tulisan mengenai protokol WebSocket yang saya terapkan kedalam beberapa bahasa pemrograman berikut: http://datacomlink.blogspot.co.id/2015/11/implementasi-server-websocket-rfc-6455.html ditunggu feedbacknya gan, semoga menambah wawasan bersama, terima kasih gan.. :D
BalasHapus