[muharihar] - Tutorial Web Service PHP NuSoap+GoogleMap

Embed Size (px)

DESCRIPTION

Tutorial web service PHP dengan toolkit NuSOAP

Citation preview

  • Tutorial Web Service Sederhana dengan PHP NuSoap

    Oleh : Muhammad Hari Suharto (ak. muharihar)

    Email : muharihar[at]infoterkini.comBlog : mhs.infoterkini.com

    YM : indocyber2002Facebook : www.facebook.com/muharihar

    Minomartani, 24 Oktober 2010, 10:48 PM

    Masalah

    Bagaimana cara membangun aplikasi web service sederhana dengan menggunakan PHP NuSoap sebagai

    pustaka web service-nya?

    Solusi

    Untuk menjawab problematika di atas, marilah kita membuat asumsi mengenai aplikasi web service yang

    akan kita bangun. Berikut adalah studi kasus yang akan dibahas dan diselesaikan dengan menggunakan

    PHP NuSoap sebagai pustaka PHP untuk web service.

    Studi Kasus

    Akan di bangun sebuah layanan web service yang menyediakan data jumlah penduduk disetiap propinsi di

    Indonesia. Aplikasi layanan web service tersebut nantinya akan dimanfaatkan untuk melayani request

    informasi Jumlah Penduduk Indonesia berdasar propinsi dan jenis kelamin yang divisualisasikan dengan

    GoogleMap.

    Solusi Studi Kasus

    Solusi studi kasus akan di bagi menjadi 5 Tahapan, yaitu :

    1. Merancang Arsitektur Sistem

    2. Merancang dan Membuat Struktur Database/Tabel

    3. Membuat Script Web Service Server (WSDL)

    4. Membuat Script Web Service Client

    5. Visualisasi dengan GoogleMap

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 1 / 20

  • Tahapan Solusi

    1. Merancang Arsitektur Sistem

    Bagan Arsitektur Sistem

    Rancangan Hierarki Script

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 2 / 20

  • 2. Merancang dan Membuat Stuktur Database/TabelDatabase Engine : MySQLDatabase Navigator : PhpMyAdmin

    Struktur Database/TableDatabase Name : db_wsdlmapTable Name : info_penduduk_propinsiStruktur TabelNama Field Type Data Length Nullable Default Constraint/Index

    prop_id int (auto increment)

    No Primary Key

    prop_kode varchar 2 No Unique

    prop_nama varchar 100 No

    prop_ibukota varchar 100 Yes

    prop_jml_penduduk_pria bigint No 0

    prop_jml_penduduk_wanita bigint No 0

    prop_website varchar 100 Yes

    prop_map_latitude float 10,6 No 0

    prop_map_longitude float 10,6 No 0

    Script :

    Create database db_wsdlmap

    create database db_wsdlmap;

    Create table info_penduduk_propinsi

    CREATE TABLE `info_penduduk_propinsi` ( `prop_id` int(11) NOT NULL AUTO_INCREMENT, `prop_kode` varchar(2) NOT NULL, `prop_nama` varchar(100) NOT NULL, `prop_ibukota` varchar(100) DEFAULT NULL, `prop_jml_penduduk_pria` bigint(20) NOT NULL DEFAULT '0', `prop_jml_penduduk_wanita` bigint(20) NOT NULL DEFAULT '0', `prop_website` varchar(100) DEFAULT NULL, `prop_map_latitude` float(10,6) NOT NULL DEFAULT '0.000000', `prop_map_longitude` float(10,6) NOT NULL DEFAULT '0.000000', PRIMARY KEY (`prop_id`), UNIQUE KEY `prop_kode` (`prop_kode`));

    Insert data tabel info_penduduk_propinsi

    INSERT INTO `info_penduduk_propinsi` (`prop_id`, `prop_kode`, `prop_nama`, `prop_ibukota`, `prop_jml_penduduk_pria`, `prop_jml_penduduk_wanita`, `prop_website`, `prop_map_latitude`, `prop_map_longitude`) VALUES (1, '11', 'Nanggroe Aceh Darussalam', 'Banda Aceh', 2005763, 2025826, 'http://www.acehprov.go.id', 5.351273, 95.562370), (2, '12', 'Sumatera Utara', 'Medan', 5833465, 5855522, 'http://www.pempropsu.go.id', 2.115355, 99.545097), (3, '13', 'Sumatera Barat', 'Padang', 2248970, 2306840, 'http://www.sumbarprov.go.id', -0.739940, 100.800003), (4, '14', 'Riau', 'Pekanbaru', 2329094, 2234312, 'http://www.riau.go.id', 0.886826, 101.706825), (5, '15', 'Jambi', 'Jambi', 1351370, 1275846, 'http://www.jambiprov.go.id', -1.485183, 102.438057),

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 3 / 20

  • (6, '16', 'Sumatera Selatan', 'Palembang', 3424444, 3343201, 'http://www.sumselprov.go.id', -3.319437, 103.914398), (7, '17', 'Bengkulu', 'Bengkulu', 788630, 757656, 'http://www.bengkuluprov.go.id', -3.800649, 102.256203), (8, '18', 'Lampung', 'Bandar Lampung', 3682753, 3421819, 'http://www.lampung.go.id', -5.450000, 105.266670), (9, '19', 'Kep. Bangka Belitung', 'Pangkal Pinang', 543878, 498950, 'http://www.babelprov.go.id', -2.741051, 106.440590), (10, '20', 'Kepulauan Riau', 'Tanjung Pinang', 636078, 636933, 'http://www.kepripro.go.id', 0.900000, 104.449997), (11, '30', 'Banten', 'Serang', 4587897, 4420254, 'http://www.bantenprov..go.id', -6.405817, 106.064018), (12, '31', 'DKI Jakarta', 'Jakarta', 4390746, 4448501, 'http://www.jakarta.go.id', -6.211544, 106.845169), (13, '32', 'Jawa Barat', 'Bandung', 19703106, 19183869, 'http://www.jabarprov.go.id', -7.090911, 107.668884), (14, '33', 'Jawa Tengah', 'Semarang', 15929449, 15966665, 'http://www.jatengprov.go.id', -7.150975, 110.140259), (15, '34', 'DI Yogyakarta', 'Yogyakarta', 1669939, 1667156, 'http://www.jogjaprov.go.id', -7.797224, 110.368797), (16, '35', 'Jawa Timur', 'Surabaya', 17906468, 18151639, 'http://www.jatimprov.go.id', -7.289166, 112.734398), (17, '51', 'Bali', 'Denpasar', 1715130, 1662962, 'http://www.baliprov.go.id', -8.670458, 115.212631), (18, '52', 'Nusa Tenggara Barat', 'Mataram', 2014744, 2154951, 'http://www.ntbprov.go.id', -8.581824, 116.106834), (19, '53', 'Nusa Tenggara Timur', 'Kupang', 2125959, 2117223, 'http://www.nttprov.go.id', -10.184301, 123.594849), (20, '61', 'Kalimantan Barat', 'Pontianak', 2070557, 1972260, 'http://www.kalbar.go.id', 0.142927, 109.257378), (21, '62', 'Kalimantan Tengah', 'Palangkaraya', 986430, 926596, 'http://www.kalteng.go.id', -1.681488, 113.382355), (22, '63', 'Kalimantan Selatan', 'Banjarmasin', 1650537, 1620876, 'http://www.kalselprov.go.id', -3.092642, 115.283760), (23, '64', 'Kalimantan Timur', 'Samarinda', 1486179, 1354695, 'http://www.kaltimprov.go.id', 1.640630, 116.419388), (24, '70', 'Gorontalo', 'Gorontalo', 463073, 456942, 'http://www.gorontaloprov.go.id', 0.544261, 123.042610), (25, '71', 'Sulawesi Utara', 'Manado', 1080528, 1040489, 'http://www.sulut.go.id', 1.470889, 124.845459), (26, '72', 'Sulawesi Tengah', 'Palu', 1174656, 1116313, 'http://www.sulteng..go.id', -1.430025, 121.445618), (27, '73', 'Sulawesi Selatan', 'Makasar', 4115294, 4341829, 'http://www.sulselprov.go.id', -5.137623, 119.412460), (28, '74', 'Sulawesi Tenggara', 'Kendari', 988121, 972576, 'http://www.sulteng.go.id', -4.144910, 122.174606), (29, '75', 'Sulawesi Barat', 'Mamuju', 0, 0, 'http://www.sulbar.go.id', -2.844137, 119.232079), (30, '81', 'Maluku', 'Maluku', 634107, 615105, 'http://www.malukuprov.go.id', -3.238462, 130.145279), (31, '82', 'Maluku Utara', 'Ternate', 452127, 429740, 'http://www.malutprov.go.id', 1.570999, 127.808769), (32, '85', 'Papua', 'Jayapura', 1290799, 1149039, 'http://www.papua.go.id', -2.523695, 140.697128), (33, '87', 'Papua Barat', 'Manokwari', 0, 0, 'http://www.papuabarat.go.id', -0.866667, 131.250000);

    3. Membuat Script Web Service Server (WSDL)Kebutuhan :1. AMP (Apache MySQL PHP )2. Pustaka/Library PHP NuSoap

    Bagan Komunikasi Script

    Script Keterangan Dependensi

    index.php Halaman Index Web Service (Penyedia WSDL) nusoap.php, db_config.php, ws_server.php

    nusoap.php Pustaka NuSoap

    db_config.php Konfigurasi Koneksi ke Database MySQL

    ws_server.php Script Web Service Server nusoap.php, db_config.php

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 4 / 20

    index.php

    nusoap.php db_config.php ws_server.php

  • Script Index ( index.php )

    Script Konfigurasi Database ( db_config.php )

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 5 / 20

  • Script Web Service Server ( ws_server.php )

  • $sql = sprintf($sql,$v_key_search,$v_page,$v_page_size);

    $stmt = mysql_query ( $sql, $conn );

    $return_data_count = mysql_affected_rows ( $conn );

    $return_data = array ();if (is_resource ( $stmt )) {

    while ( $row = mysql_fetch_array ( $stmt ) ) {$return_data [] = $row;

    }}

    $return ['data_count'] = $return_data_count;$return ['data'] = $return_data;

    } //encode data

    $return = base64_encode ( serialize ( $return ) );

    return $return;}

    //Register Function to Service$ws_svr->register ( 'list_propinsi',

    array ('p_key_search' => 'xsd:string', 'p_page' => 'xsd:integer', 'p_page_size' => 'xsd:integer' ),

    array ('return' => 'xsd:string' ), 'urn:' . WS_NAMA_WSDL, 'urn:' . WS_NAMA_WSDL . '#list_propinsi', 'rpc', 'encoded', 'Deskripsi fungsi list_propinsi' );

    //Create The Service Response$HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : '';$ws_svr->service ( $HTTP_RAW_POST_DATA );exit ();?>

    Hasil WSDL Web Service Server

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 7 / 20

  • Deskripsi fungsi list_propinsi

    View WSDL dalam bentuk lain

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 8 / 20

  • ScreenShoot Web Service Server (WSDL)

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 9 / 20

  • 4. Membuat Script Web Service ClientKebutuhan :1. AP (Apache PHP)2. Pustaka/Library PHP NuSoap

    Bagan Komunikasi Script

    Script Keterangan Dependensi

    index.php Halaman Index ws_client.php

    ws_client.php Script Web Service Client nusoap.php

    nusoap.php Pustaka NuSoap

    Script Index ( index.php )

    Daftar Jumlah Penduduk Propinsi di Indonesia

    IDKODENAMAIBUKOTAJML PRIAJML WANITA

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 10 / 20

    index.php

    nusoap.phpws_client.php

  • JML PENDUDUKWEBSITELATITUDELONGITUDE

    Script Web Service Client ( ws_client.php )

  • $ws_client->setHeaders ( $header );

    // Function to print Faultfunction detect_fault() {

    global $ws_client;

    //detect fault and errorif ($ws_client->fault) {

    exit ( $ws_client->faultstring );} else {

    $err = $ws_client->getError ();if ($err) {

    exit ( $err );}

    }}

    //Function to Echo Debug Resultfunction echo_debug(){

    global $ws_client;echo "".$ws_client->debug_str."";

    echo "".$ws_client->request."/"; print_r($ws_client->requestHeaders);}

    //define Call Function for list_propinsi Servicefunction call_ws_list_propinsi($p_key_search, $p_page, $p_page_size) {

    global $ws_client;

    //parameters configuration$params = array ('p_key_search' => $p_key_search, 'p_page' => $p_page, 'p_page_size' =>

    $p_page_size );

    //call method service$ws_data = $ws_client->call ( 'list_propinsi', $params);

    detect_fault ();

    //decode data$ws_data = unserialize ( base64_decode ( $ws_data ) );//print_r($ws_data);

    //echo debug if needed//echo_debug();

    return $ws_data;}

    ?>

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 12 / 20

  • Hasil SOAP Envelope Web Service Client ( Request ke Web Service Server )

    d3NjbGllbnQ=c2VjcmV0

    ja02

    View Hasil SOAP Envelope Web Service Client ( Request ke Web Service Server )

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 13 / 20

  • Hasil SOAP Envelope Web Service Client ( Response dari Web Service Server )

    YToyOntzOjEwOiJkYXRhX2NvdW50IjtpOjE7czo0OiJkYXRhIjthOjE6e2k6MDthOjE4OntpOjA7czoxOiI1IjtzOjc6InByb3BfaWQiO3M6MToiNSI7aToxO3M6MjoiMTUiO3M6OToicHJvcF9rb2RlIjtzOjI6IjE1IjtpOjI7czo1OiJKYW1iaSI7czo5OiJwcm9wX25hbWEiO3M6NToiSmFtYmkiO2k6MztzOjU6IkphbWJpIjtzOjEyOiJwcm9wX2lidWtvdGEiO3M6NToiSmFtYmkiO2k6NDtzOjc6IjEzNTEzNzAiO3M6MjI6InByb3Bfam1sX3BlbmR1ZHVrX3ByaWEiO3M6NzoiMTM1MTM3MCI7aTo1O3M6NzoiMTI3NTg0NiI7czoyNDoicHJvcF9qbWxfcGVuZHVkdWtfd2FuaXRhIjtzOjc6IjEyNzU4NDYiO2k6NjtzOjI2OiJodHRwOi8vd3d3LmphbWJpcHJvdi5nby5pZCI7czoxMjoicHJvcF93ZWJzaXRlIjtzOjI2OiJodHRwOi8vd3d3LmphbWJpcHJvdi5nby5pZCI7aTo3O3M6OToiLTEuNDg1MTgzIjtzOjE3OiJwcm9wX21hcF9sYXRpdHVkZSI7czo5OiItMS40ODUxODMiO2k6ODtzOjEwOiIxMDIuNDM4MDU3IjtzOjE4OiJwcm9wX21hcF9sb25naXR1ZGUiO3M6MTA6IjEwMi40MzgwNTciO319fQ==

    View Hasil SOAP Envelope Web Service Client ( Response dari Web Service Server )

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 14 / 20

  • ScreenShot Web Service Client

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 15 / 20

  • 5. Visualisasi dengan GoogleMapKebutuhan:1. AP (Apache PHP)2. GoogleMap API3. Koneksi Internet (maps.google.com)

    Bagan Komunikasi Script

    Script Keterangan Dependensi

    index.php Halaman Index Google Map wsc_prop.php

    wsc_prop.php Script Generate XML Data untuk Google Map dari data web service (client)

    ws_client.php

    ws_client.php Web Service Client ( Point 4 )

    Script Index GoogleMap ( index.php )

    Google Maps AJAX + WebService Example - Data Jumlah Penduduk Per Propinsi di Indonesia //Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 16 / 20

    index.php

    nusoap.phpwsc_prop.php ws_client.php

  • var geocoder; function load() { if (GBrowserIsCompatible()) { geocoder = new GClientGeocoder(); map = new GMap2(document.getElementById('map')); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(-5.137623, 119.412460), 4); } }

    function searchLocations() { var address = document.getElementById('addressInput').value; if (!address) { searchLocationsNear('',0,10); } else { searchLocationsNear(address); } }

    function searchLocationsNear(prop_name, page, page_size) { var searchUrl = 'wsc_prop.php?prop_nama=' + prop_name; if ((page) & (page_size)) { searchUrl = 'wsc_prop.php?prop_nama=' + prop_name + '&page=' + page + '&page_size' +page_size; } GDownloadUrl(searchUrl, function(data) { var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName('marker'); map.clearOverlays();

    var sidebar = document.getElementById('sidebar'); sidebar.innerHTML = ''; if (markers.length == 0) { sidebar.innerHTML = 'No results found.'; map.setCenter(new GLatLng(-5.137623, 119.412460), 4); return; }

    var bounds = new GLatLngBounds(); for (var i = 0; i < markers.length; i++) { var prop_nama = markers[i].getAttribute('prop_nama'); var prop_ibukota = markers[i].getAttribute('prop_ibukota'); var jml_penduduk = parseFloat(markers[i].getAttribute('prop_penduduk')); var jml_penduduk_pria = parseFloat(markers[i].getAttribute('prop_penduduk_pria')); var jml_penduduk_wanita = parseFloat(markers[i].getAttribute('prop_penduduk_wanita')); var prop_website = markers[i].getAttribute('prop_website'); var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng'))); var marker = createMarker(point, prop_nama, prop_ibukota, jml_penduduk, jml_penduduk_pria, jml_penduduk_wanita, prop_website); map.addOverlay(marker); var sidebarEntry = createSidebarEntry(marker, prop_nama, prop_ibukota, jml_penduduk, jml_penduduk_pria, jml_penduduk_wanita, prop_website); sidebar.appendChild(sidebarEntry); bounds.extend(point); } map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)); }); }

    function createMarker(point, prop_nama, prop_ibukota, jml_penduduk, jml_penduduk_pria, jml_penduduk_wanita, prop_website) { // Create our "tiny" marker icon var iconBlue = new GIcon(); iconBlue.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png"; iconBlue.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png"; iconBlue.iconSize = new GSize(24, 40);

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 17 / 20

  • iconBlue.shadowSize = new GSize(34, 40); iconBlue.iconAnchor = new GPoint(6, 40); iconBlue.infoWindowAnchor = new GPoint(5, 1); var iconRed = new GIcon(); iconRed.image = "http://labs.google.com/ridefinder/images/mm_20_red.png"; iconRed.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png"; iconRed.iconSize = new GSize(12, 20); iconRed.shadowSize = new GSize(22, 20); iconRed.iconAnchor = new GPoint(6, 20); iconRed.infoWindowAnchor = new GPoint(5, 1);

    var markerOptions = {}; markerOptions.icon = G_DEFAULT_ICON; if (jml_penduduk > 10000000 ){ markerOptions.icon = iconBlue; } markerOptions.title = prop_nama; markerOptions.draggable = false; var marker = new GMarker(point, markerOptions); var html = 'Propinsi : ' + prop_nama + ' ' + 'Ibukota : '+ prop_ibukota + '' + ' Kriteria (Kelamin) Jumlah ' + '' + ' Pria '+jml_penduduk_pria+' ' + ' Wanita '+jml_penduduk_wanita+' ' + ' Total '+jml_penduduk+' ' + '' + '' + 'WebSite : '+prop_website+'' + '' + '' + '' + 'Author : www.mhs.infoterkini.com'; GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); }); return marker; }

    function createSidebarEntry(marker, prop_nama, prop_ibukota, jml_penduduk, jml_penduduk_pria, jml_penduduk_wanita, prop_website) { var div = document.createElement('div'); var html = '' + prop_nama + ' (' + jml_penduduk + ')' + prop_ibukota; div.innerHTML = html; div.style.cursor = 'pointer'; div.style.marginBottom = '5px'; GEvent.addDomListener(div, 'click', function() { GEvent.trigger(marker, 'click'); }); GEvent.addDomListener(div, 'mouseover', function() { div.style.backgroundColor = '#eee'; }); GEvent.addDomListener(div, 'mouseout', function() { div.style.backgroundColor = '#fff'; }); return div; } //]]>

    Google Maps AJAX + WebService Example - Data Jumlah Penduduk Per Propinsi di Indonesia Propinsi:

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 18 / 20

  • Script Web Service Client Call ( wsc_prop.php )

    createElement ( "markers" );$parnode = $dom->appendChild ( $node );

    header ( "Content-type: text/xml" );

    // Iterate through the rows, adding XML nodes for eachfor($i = 0; $i < $n; $i ++) {

    $jml = ($prop_data [$i] ['prop_jml_penduduk_pria'] + $prop_data [$i] ['prop_jml_penduduk_wanita']);

    $node = $dom->createElement ( "marker" );$newnode = $parnode->appendChild ( $node );$newnode->setAttribute ( "prop_nama", $prop_data [$i]['prop_nama'] );$newnode->setAttribute ( "prop_ibukota", $prop_data [$i]['prop_ibukota'] );$newnode->setAttribute ( "prop_penduduk", $jml );$newnode->setAttribute ( "prop_penduduk_pria", $prop_data [$i]['prop_jml_penduduk_pria'] );

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 19 / 20

  • $newnode->setAttribute ( "prop_penduduk_wanita", $prop_data [$i]['prop_jml_penduduk_wanita'] );

    $newnode->setAttribute ( "prop_website", $prop_data [$i]['prop_website'] );$newnode->setAttribute ( "lat", $prop_data [$i]['prop_map_latitude'] );$newnode->setAttribute ( "lng", $prop_data [$i]['prop_map_longitude'] );

    }

    echo $dom->saveXML ();?>

    ScreenShot GoogleMap Web Service Client

    Tutorial Web Service Sederhana dengan PHP NuSoapMuhammad Hari Suharto (ak. muharihar) 20 / 20