Anda di halaman 1dari 9

MEMBANGUN WEB SERVICE MENGGUNAKAN NuSOAP TOOLKIT

LAPORAN TUGAS MATA KULIAH INTEROPERABILITAS

Disusun oleh:

Ivan Aditya Yudha Agung Pribadi Bobby Kurniawan Anton Wisnu Prabowo Arida Hirawan

( 30343 ) ( 30403 ) ( 30557 ) ( 30771 ) ( 31090 )

JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA 2007


www.digizoneku.com

NuSOAP Toolkit
PHP ( sampai saat ini ) belum mempunyai ekstensi untuk SOAP, tetapi ada beberapa toolkit yang mendukung fungsi itu. NuSOAP merupakan salah satu toolkit yang menyediakan API untuk membangun suatu web service dengan menggunakan SOAP. Selain itu juga ada tool kit yang lain seperti PEAR:SOAP. Versi terbaru NuSOAP sampai saat ini adalah versi 0.6.4, yang menyediakan API untuk membuat aplikasi server/client SOAP dan juga menyediakan fitur seperti WDSL, membangun proxy class, menggunakan SSL, menggunakan HTTP proxy, autentifikasi HTTP. Permasalahan yang kita jadikan contoh adalah sebuah departemen pada pemerintah yang bertugas memantau cuaca, ingin agar data hasil pemantauan mereka, dapat diakses oleh publik. Langkah-langkah yang kita lakukan adalah sebagai berikut:
Menyiapkan Database

CREATE TABLE current_data ( id int(10) unsigned NOT NULL auto_increment, city varchar(20) default NULL, degrees float NOT NULL default '0', forecast varchar(255) default NULL, PRIMARY KEY (id), UNIQUE KEY city (city), KEY city_2 (city) ) TYPE=MyISAM;

www.digizoneku.com

INSERT INTO current_data VALUES (1, 'Chicago', '5', 'Partly cloudy.'); INSERT INTO current_data VALUES (2, 'London', '15', 'Sun along with patchy clouds.');

Membuat SOAP Server


<?php require('inc/nusoap.php'); $l_oServer = new soap_server(); $l_oServer->debug_flag=false; $l_oServer->configureWSDL('Weather', 'http://weather.org/Weather'); $l_oServer->wsdl->schemaTargetNamespace = 'http://weather.org/Weather'; $l_oServer->wsdl->addComplexType( 'WeatherData', 'complexType', 'struct', 'all', '', array( 'degrees' => array('name'=>'degrees', 'type'=>'xsd:string'), 'forecast' => array('name'=>'forecast', 'type'=>'xsd:string')) ); $l_oServer->register('getWeather', array( 'city' => 'xsd:string'), array('return'=>'tns:WeatherData'), 'http://weather.org/Weather'); function getWeather ($a_stInput) { if (is_string($a_stInput)) { $l_oDBlink = @mysql_connect( 'localhost', 'root', 'password'); $l_oDBresult = @mysql_db_query( 'weather', 'SELECT degrees, forecast FROM current_data WHERE city = LCASE("' . mysql_escape_string((string)$a_stInput) . '") LIMIT 1'); if (!$l_oDBresult) { return new soap_fault('Server', '', 'Internal server error.'); } if (!mysql_num_rows($l_oDBresult)) { return new soap_fault('Server', '',

www.digizoneku.com

'Service contains data only for a few cities.'); } mysql_close($l_oDBlink); return mysql_fetch_array($l_oDBresult, MYSQL_ASSOC); } else { return new soap_fault('Client', '', 'Service requires a string parameter.'); } } $l_oServer->service($HTTP_RAW_POST_DATA); ?>

Adapun penjelasannya adalah sebagai berikut. Pertama, kita meng-include NuSOAP toolkit terlebih dahaulu. Untuk server kita perlu membuat obyek soap server. Kita tidak memerlukan pesan debug, jadi pesan itu dinonaktifkan ( diberi nilai false ). Pada baris 15, file WSDL mulai di-generate. File tersebut mendeskripsikan web service dan cara mengakses web service itu. Kemudian kita menggunakan WSDL untuk membuat suatu proxy class. Untuk itu kita mengkonfigurasi target namespace dan membuat complextype sederhana, yang mana menjadi data kembalian bagi kita. Selanjutnya kita meregister method getWeather, agar bisa dipanggil oleh client, dan juga mendefinisikan complexType (WeatherData) untuk mendapatkan nilai balik. Pada fungsi getWeather selanjutnya akan ditentukan parameter sehingga akan muncul pesan soap_fault bila salah satu parameter tidak dipenuhi. Pada baris paling bawah ada sintak $HTTP_RAW_POST_DATA yang di-set hanya ketika tipe data tidak diketahui. Dengan demikianweb service ini siap dipakai.

www.digizoneku.com

Membuat SOAP Client

www.digizoneku.com

<?php if ((string)$_GET['action'] == 'get_data') { require('inc/nusoap.php'); $l_aParam = array((string)$_POST['city']); $l_oClient = new soapclient('http://somewhere.org/soap/server.php'); $l_stResult = $l_oClient->call('getWeather', $l_aParam); if (!$l_oClient->getError()) { print '<h1>Current data for: ' . $l_aParam[0] . ':</h1><ul><li>DEGREES: ' . $l_stResult['degrees'] . '&deg;C</li><li>FORECAST: ' . $l_stResult['forecast'] . '</li></ul>'; } else { echo '<h1>Error: ' . $l_oClient->getError() . '</h1>'; } } print ' <form name="input" action="'.$_SERVER['PHP_SELF'].'?action=get_data" method="POST"> Your city: <input type="text" name="city"> <input type="submit" value="Search"> </form> '; ?>

Jika suatu data telah terkirim, kita kemudian meng-include NuSOAP toolkit. Pertama kita meletakkan parameter string ke dalam array, sehingga kita dapat menggunakannya untuk memanggil method. Untuk client kita membuat objek soapclient pada baris ke 14. Melalui client kita dapat memanggil webmethod getWeather dan melalui parameter yang ada ( pada data dalam array ). SOAP Client Using WSDL Selanjutnya kita akan membuat SOAP Client menggunakan WSDL sebagai perbandingan:

www.digizoneku.com

SOAP Client Menggunakan WSDL


<?php if ((string)$_GET['action'] == 'get_data') { require('inc/nusoap.php'); $l_oClient = new soapclient( 'http://somewhere.org/soap/weather.wsdl', 'wsdl'); $l_oProxy = $l_oClient->getProxy(); $l_stResult = $l_oProxy->getWeather((string)$_POST['city']); if (!$l_oClient->getError()) {

www.digizoneku.com

print '<h1>>Current data for: ' . (string)$_POST['city'] . ':</h1><ul><li>DEGREES: ' . $l_stResult['degrees'] . '&deg;C</li><li>FORECAST: ' . $l_stResult['forecast'] . '</li></ul>'; } else { echo '<h1>Napaka: ' . $l_oClient->getError() . '</h1>'; } } print ' <form name="input" action="'.$_SERVER['PHP_SELF'].'?action=get_data" method="POST"> Your city: <input type="text" name="city"> <input type="submit" value="Search"> </form> '; ?>

Melalui contoh di atas dapat dilihat beberapa hal. Ketika kita membuat objek soapclient ,kita dapat melewatkan URL ke proxy class; secara sederhana kita memanggil method getProxy. Setelah semua method pada web service kita dapatkan pada proxy class kita, maka kita akan dapat mengakses method getWeather secara local, yang mana berfungsi mengirim dan mengembalikan data dari web service. Dan terakhir, kita melakukan error checking untuk client.

www.digizoneku.com

www.digizoneku.com