Anda di halaman 1dari 15

Web Service PHP Dengan NuSOAP Toolkit

1. Mengenal NuSOAP NuSOAP adalah sebuah kumpulan class-class PHP yang memungkinkan user untuk mengirim dan menerima pesan SOAP melalui protokol HTTP. NuSOAP didistribusikan oleh NuSphere Corporation (http://www.nusphere.com) sebagai open source toolkit di bawah lisensi GNU LGPL. Salah satu keuntungan dari NuSOAP adalah bahwa NuSOAP bukan merupakan PHP extension, sehingga penggunaannya tidak membutuhkan registrasi khusus ke Sistem Operasi maupun web server. 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 Jika webservice yang dituju menyediakan file WSDL, pemanggilan service dilakukan dengan mengeksekusi method call pada class soapclient dengan melibatkan parameter argumen yang disediakan oleh file WSDL. 2. Instalasi dan Konfigurasi NuSOAP Instalasi dan konfigurasi NuSOAP dapat dilakukan dengan beberapa tahap 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: require_once(nusoap.php)

3. Pemrograman SOAP Client-Server Setelah melakukan instalasi NuSOAP, kita akan mencoba sebuah pemrograman web service SOAP client-server sederhana yang menyediakan sebuah service untuk mencetak sebuah string ke browser client. Sebagai contoh, kita akan membuat 2 aplikasi sederhana, yaitu aplikasi server (echoStringServer.php) dan aplikasi client (echoStringClient.php). echoStringServer.php
<?php require_once('nusoap.php'); $server = new soap_server(); $server->register('hello'); function hello($param) { $return_value = "Hallo service..."; return $return_value; } $param<br>Selamat datang pada pemrograman web

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>

echoStringClient.php
<?php require_once('nusoap.php'); $client = new soapclient('http://localhost/soap/contoh/echoStringServer.php'); $param="Yadi Utama"; $result = $client->call('hello',array($param)); if (!empty($result)) echo $result; echo echo echo echo ?> '<h2>Request</h2>'; '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>'; '<h2>Response</h2>'; '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';

Berikut ini adalah pesan SOAP Request dan SOAP Response yang dihasilkan pada contoh di atas: SOAP Request:
POST /soap/contoh/echoStringServer.php HTTP/1.0 Host: localhost User-Agent: NuSOAP/0.7.2 (1.95) Content-Type: text/xml; charset=ISO-8859-1 SOAPAction: "" Content-Length: 519 <?xml version="1.0" encoding="ISO-8859-1"?> <SOAP-ENV:Envelope SOAP ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns6545:hello xmlns:ns6545="http://tempuri.org"> <__numeric_0 xsi:type="xsd:string">Yadi Utama</__numeric_0> </ns6545:hello> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

SOAP Response:
HTTP/1.1 200 OK Date: Sat, 01 Apr 2006 07:43:14 GMT Server: Apache/1.3.23 (Win32) X-Powered-By: PHP/4.1.1 X-SOAP-Server: NuSOAP/0.7.2 (1.95) Content-Length: 578 Connection: close Content-Type: text/xml; charset=ISO-8859-1 <?xml version="1.0" encoding="ISO-8859-1"?> <SOAP-ENV:Envelope SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:helloResponse xmlns:ns1="http://tempuri.org"> <return xsi:type="xsd:string"> Hallo Yadi Utama&lt;br&gt;Selamat datang pada pemrograman web service... </return> </ns1:helloResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Pada contoh program di atas, aplikasi server (echoStringServer.php) menyediakan service dengan nama operasi hello, kemudian melakukan registrasi operasi ke aplikasi server:
$server->register('hello');

Setelah itu aplikasi server menyediakan sebuah method hello dengan parameter $param yang berfungsi untuk menerima input yang dikirimkan oleh client. Parameter ini kemudian digabung ke dalam sebuah variabel string $return_value untuk kemudian dikirim ke client:
function hello($param) { $return_value = "Hallo service..."; return $return_value; } $param<br>Selamat datang pada pemrograman web

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA);

Kemudian, aplikasi client (echoStringClient.php) menunjuk ke sebuah URL yang menyediakan service:
$client = new soapclient('http://localhost/soap/contoh/echoStringServer.php');

Perhatikan di sini, aplikasi client merujuk pada URL aplikasi server yang menyediakan service (echoStringServer.php). Kemudian aplikasi client melakukan pemanggilan layanan dengan mengeksekusi method call dengan paramater nama operasi dan input operasi $param. Hasil response yang diterima kemudian dicetak ke layar bowser:
$param="Yadi Utama"; $result = $client->call('hello',array($param)); if (!empty($result)) echo $result;

Apabila contoh di atas dijalankan di browser, maka akan tampak hasil tampilan berikut ini:

Gambar Web service client yang dijalankan pada browser

4. Implementasi Database Dengan Menggunakan ADODB PHP Pemrograman web service dapat dilakukan dengan mengakses database dan menyertakan data hasil akses database tersebut ke dalam service. Dalam melakukan akses ke database, kita akan menggunakan ADODB sebagai tool open source yang dapat digunakan untuk mengakses database. Alasan digunakannya ADODB adalah dukungannya pada banyak tipe database sehingga apabila terjadi pergantian/migrasi ke database tertentu, maka kita tidak perlu pusing untuk melakukan pengkodean ulang. Hal ini dikarenakan ADODB telah menangani koneksi dan akses ke berbagai database yang dipilih. Untuk meng-install ADODB, dapat dilakukan dengan cara berikut: Download file dari situs http://php.weblogs.com/adodb Ekstrak file zip Copy file adodb.inc.php ke lokasi direktori tertentu Lakukan include class dalam kode PHP: require_once(adodb.inc.php) Untuk menggunakan ADODB, kode PHP yang digunakan adalah sebagai berikut:
$db = &ADONewConnection($db_type); $db->Connect($db_host, $db_user, $db_password, $db_name); $rs = $db->Execute($sql);

Keterangan: - db_type - db_user - db_name : : : Tipe database yang digunakan (misal: mysqlt) User database (misal: root) Password database Nama database

- db_password :

Setelah melakukan instalasi ADODB, sekarang kita akan mencoba contoh pemrograman web service dengan mengakses sebuah database MySQL. Untuk memulainya, sebelumnya kita buat terlebih dahulu sebuah database baru dengan menggunakan phpMyAdmin:

1. Buat database baru dengan nama db_soap.

Gambar Membuat database db_soap 2. Buat tabel baru dalam database dan beri nama contact dengan jumlah field: 6

Gambar Membuat tabel contact 3. Tentukan nama-nama field dan struktur datanya:

Gambar Menentukan nama-nama field dan struktur data 4. Masukkan beberapa record data ke dalam tabel contact:

Gambar Melakukan entry record data ke dalam database

Setelah memasukkan record data ke dalam tabel, data tersebut akan ditambahkan ke dalam database:

Gambar Daftar seluruh record data Setelah menyiapkan database db_soap, selanjutnya kita akan membuat sebuah aplikasi server yang akan menyediakan service untuk menampilkan list seluruh record data pada tabel contact yang telah dimasukkan tersebut. Dalam contoh kali ini, kita buat sebuah aplikasi server contactServer.php dan sebuah aplikasi client contactClient.php: contactServer.php
<?php require_once('nusoap.php'); require_once('adodb/adodb.inc.php'); $server = new soap_server(); $server->register('contact'); function contact() { $db = &ADONewConnection('mysqlt'); $db->Connect('localhost', 'root', 'root', 'db_soap'); $rs = $db->Execute("select * from contact"); $result = $rs->GetArray(); foreach($result as $row=>$value) { $return_value[] = array( 'name'=> $value['name'], 'company'=> $value['company'], 'address'=> $value['address'], 'phone'=> $value['phone'], 'email'=> $value['email'] ); } return $return_value; } $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>

contactClient.php
<?php require_once('nusoap.php'); $client = new soapclient('http://localhost/soap/contoh/contactServer.php'); $err = $client->getError(); if ($err) { echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; } $param=""; $result = $client->call('contact',array($param)); if (!empty($result)) { echo "<table border=1>"; echo "<tr>"; echo "<th>Name</th>"; echo "<th>Company</th>"; echo "<th>Address</th>"; echo "<th>Phone</th>"; echo "<th>Email</th>"; echo "</tr>"; foreach ($result as $item) { echo "<tr>"; echo "<td>".$item['name']."</td>"; echo "<td>".$item['company']."</td>"; echo "<td>".$item['address']."</td>"; echo "<td>".$item['phone']."</td>"; echo "<td>".$item['email']."</td>"; echo "</tr>"; } echo "</table>"; } ?>

Pada aplikasi server contactServer.php, aplikasi server menyediakan service dengan melakukan registrasi operasi contact:
$server->register('contact');

Setalah melakukan registrasi operasi, selanjutnya aplikasi server menyediakan sebuah method contact. Di dalam method ini, aplikasi sever menyediakan service ke client dengan mengakses database db_soap dengan menggunakan ADODB kemudian mengeksekusi SQL Select * From contact. Setelah mendapatkan sejumlah data dari database, selanjutnya aplikasi server mengirimkan data tersebut ke client dalam bentuk variabel array $return_value:

function contact() {

$db = &ADONewConnection('mysqlt'); $db->Connect('localhost', 'root', 'root', 'db_soap'); $rs = $db->Execute("select * from contact"); $result = $rs->GetArray(); foreach($result as $row=>$value) { $return_value[] = array( 'name'=> $value['name'], 'company'=> $value['company'], 'address'=> $value['address'], 'phone'=> $value['phone'], 'email'=> $value['email'] ); } return $return_value; } $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA);

Selanjutnya aplikasi client contactClient.php, merujuk kepada URL lokasi service yang disediakan oleh aplikasi server:
$client = new soapclient('http://localhost/soap/contoh/contactServer.php');

Kemudian aplikasi client melakukan pemanggilan service dengan mengeksekusi method call dengan paramater nama operasi dan input $param. Hasil response dari pemanggilan service ini kemudian dicetak ke layar browser client:
$param=""; $result = $client->call('contact',array($param)); if (!empty($result)) { echo "<table border=1>"; echo "<tr bgcolor='#cccccc'>"; echo "<th>Name</th>"; echo "<th>Company</th>"; echo "<th>Address</th>"; echo "<th>Phone</th>"; echo "<th>Email</th>"; echo "</tr>"; foreach ($result as $item) { echo "<tr>"; echo "<td>".$item['name']."</td>"; echo "<td>".$item['company']."</td>"; echo "<td>".$item['address']."</td>"; echo "<td>".$item['phone']."</td>"; echo "<td>".$item['email']."</td>"; echo "</tr>"; } echo "</table>"; }

Berikut ini adalah tampilan hasil pemanggilan service yang dilakukan oleh client melalui browser:

Gambar Tampilan hasil pemanggilan service dengan akses ke database Pada contoh di atas, aplikasi server menyediakan service dengan parameter input $param dengan nilai berupa string kosong ($param=). Hal ini dapat dimaklumi bahwa aplikasi server hanya mengeksekusi string SQL tanpa menerima parameter input apapun. Eksekusi SQL tersebut bertujuan untuk mengambil dan mengirimkan seluruh record data ke client. Kita dapat memodifikasi kode pada contoh di atas untuk menampilkan 1 record data tertentu sesuai dengan parameter input yang ditambahkan: contactServer.php
<?php require_once('nusoap.php'); require_once('adodb/adodb.inc.php'); $server = new soap_server(); $server->register('contact_detail'); function contact_detail($param) { $db = &ADONewConnection('mysqlt'); $db->Connect('localhost', 'root', 'root', 'db_soap'); $rs = $db->Execute("select * from contact where id=".$param['id']); $result = $rs->GetArray(); foreach($result as $row=>$value) { $return_value[] = array( 'name'=> $value['name'], 'company'=> $value['company'], 'address'=> $value['address'], 'phone'=> $value['phone'], 'email'=> $value['email']

); } return $return_value; } $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>

contactClient.php
<?php require_once('nusoap.php'); $client = new soapclient('http://localhost/soap/contoh/contactServer.php'); $err = $client->getError(); if ($err) { echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; } $param = array('id'=>$id); $result = $client->call('contact_detail',array($param)); if (!empty($result)) { echo "<table border=1>"; echo "<tr bgcolor='#cccccc'>"; echo "<th>Name</th>"; echo "<th>Company</th>"; echo "<th>Address</th>"; echo "<th>Phone</th>"; echo "<th>Email</th>"; echo "</tr>"; foreach ($result as $item) { echo "<tr>"; echo "<td>".$item['name']."</td>"; echo "<td>".$item['company']."</td>"; echo "<td>".$item['address']."</td>"; echo "<td>".$item['phone']."</td>"; echo "<td>".$item['email']."</td>"; echo "</tr>"; } echo "</table>"; } ?>

Perhatikan pada modifikasi aplikasi server di atas, parameter input diambil dari nilai pada variabel array $param untuk kemudian diolah lebih lanjut dalam eksekusi string SQL:

function contact_detail($param) { $db = &ADONewConnection('mysqlt'); $db->Connect('localhost', 'root', 'root', 'db_soap'); $rs = $db->Execute("select * from contact where id=".$param['id']); $result = $rs->GetArray(); foreach($result as $row=>$value) { $return_value[] = array( 'name'=> $value['name'], 'company'=> $value['company'], 'address'=> $value['address'], 'phone'=> $value['phone'], 'email'=> $value['email'] ); } return $return_value; }

Selanjutnya aplikasi client melakukan pemanggilan service dengan mengambil parameter input $id dan menyusunnya ke dalam variabel array $param:
$param = array('id'=>$id); $result = $client->call('contact_detail',array($param));

Berikut ini adalah hasil modifikasi dengan menambahkan parameter input pada URL browser client (?id=1):

Gambar Hasil modifikasi dengan menambahkan parameter input pada browser

Tak Harus Tampil Lugu

Jika tiap hari makan tempe yang cuma digoreng atau direbus, tentu bikin bosan. Kenapa tidak berkreasi untuk membuatnya lebih menarik? Salah satunya nuget tempe. Siapkan bahan-bahan sebagai berikut: tempe (350 g), tepung terigu (100 g), telur ayam (2 butir), susu (setengah gelas), bawang putih (2 siung), garam (2,5 sendok teh), merica halus (setengah sendok teh), tepung panir (secukupnya). Langkah-langkah untuk membuatnya: Pisahkan kuning telur dari putih telurnya. Kocok kuning telur dengan tepung terigu dan susu. Potong tempe berbentuk kubus-kubus kecil, lumatkan dengan garpu, lalu campurkan dengan campuran telur, serta garam dan merica. Aduk hingga menjadi adonan yang kompak, masukkan ke dalam cetakan kue persegi (ukuran 20 x 20 cm) yang telah diolesi minyak. Kukus selama kurang lebih 20 menit, dinginkan dan potong-potong dengan ukuran 2 x 4 cm. Celupkan ke dalam putih telur yang sudah dikocok hingga longgar, dan lumeri dengan tepung panir. Goreng dalam minyak panas hingga kuning kecokelatan. Nuget tempe siap disajikan.

Anda mungkin juga menyukai