Selasa, 01 Agustus 2006

Remote Query Dengan NuSOAP

Kata kunci : Webservice, SOAP, XML, remote query, PHP, mySQL.

Saya mempunyai dua buah host, katakanlah host Nakula dan host Sadewa. Semua data tersimpan dalam mysql pada host Nakula. Dalam host Nakula telah terinstal pula Aplikasi Webserver lengkap dengan PHPnya.

Dalam host Sadewa terdapat aplikasi berbasis web juga (PHP), namun aplikasi menggunakan data yang ada di host Nakula. Jika semua aplikasi itu dibawah kekuasaan kita, tentu bukan hal yang sulit, karena dalam fitur mysql memang ada perijinan untuk membuka query dari host lain. Namun jika kita hanya menghosting web kita di sebuah peruahaan webhosting, untuk alasan keamanan biasanya pihak hosting tidak membuka koneksi mysqlnya ke host luar, hanya localhost yang diberikan. Pada keadaan seperti ini remote query dengan webservice mungkin akan sangat membantu.

Banyak cara melakukan query via webservice, mungkin bisa dengan XML-RPC, WDDL, atau menggunakan XML biasa, namun kali ini akan kita coba gunakan protokol SOAP dengan NuSOAP.

Kita bisa mengunduh NuSOAP di http://dietrich.ganx4.com/nusoap/. Karena proses yang akan kita lakukan cukup sederhana, maka kita hanya memerlukan sebuah file nusoap.php saja pada paket itu untuk kita includekan pada aplikasi di sisi server (Nakula) dan client (Sadewa).

SISI SERVER (NAKULA)

File server.php ditaruh di sisi server, berisi konfigurasi database dan fungsi - fungsi sql_fetchrow(), sql_fetchrowset(), dan sql_numrows(), yang kemudian di daftarkan di SOAP.

[code='php']
< ?
//server.php$db_host = "localhost";
$db_user = "root";
$db_pwd = "";
$db_name = "achedywp";

mysql_connect($db_host,$db_user,$db_pwd);
mysql_select_db($db_name);

function sql_fetchrow($q){
$r = mysql_query($q);
return mysql_fetch_assoc($r);
}

function sql_fetchrowset($q){
$r = mysql_query($q);
while($w = mysql_fetch_assoc($r)) $res[] = $w;
return $res;
}

function sql_numrows($q){
$r = mysql_query($q);
return mysql_num_rows($r);
}

// Pull in the NuSOAP code
require_once('nusoap.php');

// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register('sql_fetchrow');
$server->register('sql_fetchrowset');
$server->register('sql_numrows');

// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

[/code]

SISI CLIENT (SADEWA)

Di sisi client di taruh file client.php, untuk melakukan akses dan mengirimkan parameter query ke server.

[code='php']
< ?
//client.php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('http://localhost/remotequery/server.php');
// Call the SOAP method
$q = "select post_date, post_title from wp_posts limit 0,10";
$result = $client->call('sql_fetchrowset', array('q' => $q));if ($client->fault) {
echo '

Fault: ';
print_r($result);
echo '


';
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo '

Error: ' . $err . '

';
} else {
// Display the result
print_r($result);
}
}
?>
[/code]

Query yang saya lakukan diatas, menghasilkan array yang siap olah sebagai berikut,

[code='php']
Array
(
[0] => Array
(
[post_date] => 2001-06-03 07:39:13
[post_title] => Pertemuan 1 Pengantar
)[1] => Array
(
[post_date] => 2001-06-09 07:39:13
[post_title] => Pertemuan 2 : Urgensi Menuntut Ilmu
)

[2] => Array
(
[post_date] => 2001-06-12 07:34:35
[post_title] => Pertemuan 3 : Sumber Ilmu dalam Islam
)

[3] => Array
(
[post_date] => 2001-06-17 21:15:00
[post_title] => Pertemuan 4 : ilmu-ilmu kauniah
)
)

[/code]

Metode ini bisa digunakan untuk banyak keperluan, tinggal anda yang harus kreatif menggunakannya.

Selamat mencoba !!

25 komentar:

  1. hmm hampir-hampir mirip web service ya :D, cool. kelemahannya kalau kita tidak tahu kondisi database server yang akan kita remote querynya. tapi kalau kenal, fungsi ini akan sangat berguna. kalau di web service ada istilah apa ya yg mbagi2 method/service utk diakses public. lupa.

    BalasHapus
  2. #1. Sebenarnya bukan mirip lagi cak, NuSOAP adalah library untuk penerapan SOAP (sebuah protokol terkenal dalam webservice, selain XML-RPC, WDDL dan lainnya).

    Untuk persoalan ini, untuk melakukan query memang harus mengetahui field2 dalam database, namanya juga remote query :). Kalau tentang istilah2 mah, saya nggak banyak tahu, masalahnya saya kan hanya programmer asal jalan he.. he... Yang tahu share duong ....

    BalasHapus
  3. mas, mau tanya.. ini lib/nusoap.php yang dipakai yang mana yah?
    saya kok ikut-ikut coba dengan pakai nusoap yang dari sourceforge, kok nggak bisa jalan..
    pesannya, kayaknya di lib/nusoap ada kurung-tutup yang kurang

    makasih atas jawabannya

    BalasHapus
  4. #3. Saya menggunakan NUSOAP yag ada di sourceforge juga. Cuma begini, jika kita menggunakan PHP5 disana dah ada library SOAP nya. Jika library NuSOAP yang ada di php.ini diaktifkan biasanya akan bentrok dengan NuSOAP. Tapi untuk kasus ini saya sendiri belum tahu masalahnya. Biasanya saya lancar2 saja.

    BalasHapus
  5. Kalo pake NuSoap, PHP5 jadi buah simalakama ya...
    Padahal klo pake PHP 4 lancar2 aja tuh...

    BalasHapus
  6. #5. Ya, karena mana2 fungsi yg dipakai di PHP5 sama dengan nama-nama fungsi yang dipakai NuSOAP

    BalasHapus
  7. mau tanya, apakan NuSOAP bisa berkomunikasi dengan bahasa pemrograman lain ? Selain php.
    Misalnya JSP

    BalasHapus
  8. #7 Bisa, asal bahasa lainnya menggunakan protokol SOAP juga. Hanya saja mungkin diperlukan SOAP yang menggunakan WSDL. DI NuSOAP fasilitas WSDL nya sebenarnya sudah ada dan tinggal menggunakannya saja.

    BalasHapus
  9. haloo mas,,
    bos plrogram sampeyan uda tak coba
    tapi ngomong2 databasenya apa yah...
    soalnya pas di liat di browser ada eror line 2...

    trim boss

    BalasHapus
  10. #9. Lha kan dari statement mysql_query nya dah jelas kira2 database apa yg dipake. Line 2 yg mana ya apa mungkin karena kelebihan spasi ?

    BalasHapus
  11. mas! ada gak contoh yang SOAP yang menggunakan WSDL? saya pingin nyobak, tapi ga tau cara nggunakannya....
    trima kasih mas... :)

    BalasHapus
  12. Mungkin ini.
    http://achedy2.penamedia.com/newsdetail-1032.html

    BalasHapus
  13. alamat ini : http://achedy2.penamedia.com/newsdetail-1032.html
    kok sekarang ga bisa di buka yach???

    tengkyu bos....

    BalasHapus
  14. mhon bantuannya Mas,,
    skr ini ak lg coba buat search engine dan didalamnya terdapat juga NuSoap yg digunakan untuk koneksi ke database google,tp stelah tak cb kq g bs memunculkan hasilnya..walaupun query yang tak masukin berbeda2 tp ttep g bisa.itu masalahnya apa mas?
    apakah qta perlu membayar atau gmn?soalnya ak blm dpt petunjuknya jg.
    tlong dibantu y Mas.. Thanks

    BalasHapus
  15. #14. Saya dulu kayaknya pernah mencoba, tapi sudah lama sekali. Tetapi saat ini saya nggak cukup waktu untuk mencoba lagi. Kalau masalah bayar membayar saya kira nggak, coba browsing aja, cari dengan kata kunci yang sesuai, saya kira banyak kok tutorial menggunakan google sebagai engine. Di PHP5 bahkan kita nggak perlu NuSOAP karena sudah ada library SOAP nya.

    BalasHapus
  16. djoko soewarno12 Jun 2008 23.01.00

    kalo masalah securitynya gimana?

    bisa dengan mudah di implement gak?

    kalo diliat sekilas itu kan gak sekure ..

    BalasHapus
  17. Masalah sekuritas bisa panjenengan atur sendiri, baik di permission databasenya, maupun pembatasan IP. Ini emman nggak masuk ke pembahasan.

    BalasHapus
  18. mas kalo buat aplikasi WAP menggunakan nusoap keunggulannya apa?
    ada referensi buat pembuatan WAP menggunakan nusoap ga?

    BalasHapus
  19. oh ya mas, kemarin ada pendapat kalau pemrograman menggunakan php sudah ketinggalan zaman...
    menurut mas gimana?

    BalasHapus
  20. #DIKA
    nusoap digunakan utk aplikasi webservice. Kalau sekedar membuat versi wap, nggak usah pakai nusoap. wap itu kan sama dg html utk keperluan berbeda.

    Membuat program bagi saya berorientasi pada keperluan dan penyelesaian masalah, bukan pada tools. sah-sah saja mengetakan php ketinggalan jaman namun faktanya php saat ini dijadikan bahasa pemrograman web yang paling populer.

    BalasHapus
  21. terimakasih, good post

    apakah host nakula dan sadewa harus mempunyai IP publik semua? atau cukup salah satunya.

    BalasHapus
  22. #ASWANDI. Kalau masalah IP tergantung kebutuhan. Yang penting host sadewa bisa mengakses host nakula.

    BalasHapus
  23. @DIKA

    Salah satu scripting language yang bikin saya jatuh cinta adalah PHP, fleksible, mudah dipahami mungkin karena basic saya programmer C (meskipun sekarang sudah pada lupa, ingetan PHPnya) dan yang jelas komunitasnya sangat banyak di internet. Hampir semua persoalan yang saya hadapi terselesaikan dengan googling di internet.

    Saya setuju kalo PHP adalah scripting language yang paling populer saat ini. Mengenai anggapan ketinggalan jaman harusnya ada komparasinya mana yang disebut ketinggalan jaman dan mana yang tidak :)

    BalasHapus
  24. pak mau tanya, kemarin aq dapat tugas kuliah terkait dengan program menggunakan WSDL dan NuSOAP, aq gak tau harus download dimana, kalau bapak tau bisa diinformasikan di e-mail : sampan_05@yahoo.com.sg
    Thxs.

    BalasHapus
  25. mas mo tanya tentang keamanan di NuSOAP gimana yach???

    BalasHapus

Artikel mungkin sudah tidak up to date, karena perkembangan jaman. Lihat tanggal posting sebelum berkomentar. Komentar pada artikel yg usianya diatas satu tahun tidak kami tanggapi lagi. Terimakasih :)