1 SERVICE PROVIDER dan WSDL Pada panduan ini, akan disimulasikan pemisahan dan komunikasi antara tier presentasi dan tier logika bisnis (seperti pada ...
SERVICE PROVIDER dan WSDL Pada panduan ini, akan disimulasikan pemisahan dan komunikasi antara tier presentasi dan tier logika bisnis (seperti pada gambar arsitektur aplikasi 3-tier berikut). Kedua tier tersebut berjalan di satu mesin komputer. Basis data tidak dibahas.
Tier 1 Presentasi
Tier 2 Logika bisnis
Web server Apache
Web server Apache
Persiapan XAMPP
Dowload dari http://www.apachefriends.org/en/xampp.html Install XAMPP. Pada panduan ini di C:\xampp (Windows) Jalankan web server Apache
Buat subfolder berikut pada folder C:\xampp\htdocs
Download dari http://sourceforge.net/projects/nusoap/ Extract nusoap-0.9.5.zip Kopi folder lib hasil ekstraksi ke folder tier1 dan tier2 tersebut di atas.
Basisdata
Pengembangan server Fokus pengembangan server pada panduan ini adalah untuk memfasilitasi mempelajari WSDL , bukan detil pemrograman dengan PHP dan NuSOAP. Tulis program berikut, simpan sebagai file hello.php di folder tier2 (server) configureWSDL('HelloWSDL', $namespace); $server->wsdl->schemaTargetNamespace = $namespace;
//nama service
//fungsi tanpa parameter function HelloWorld() { return 'Hello, World!'; } //daftarkan fungsi HelloWorld sebagai operasi pada service $server->register('HelloWorld', //nama operasi array('null' => 'xsd:any'), //parameter input array('return' => 'xsd:string'), //parameter output $namespace, //namespace 'uri:hello.php#HelloWorld' //soapaction ); //penanganan request $POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : ''; $server->service($POST_DATA); ?>
WSDL Buka alamat localhost/tier2/hello.php pada browser.
Link WSDL
Klik link WSDL atau buka alamat localhost/tier2/hello.php?wsdl , cermati WSDL yang ditampilkan.
NuSOAP menggunakan WSDL versi 1.1 (http://www.w3.org/TR/wsdl). Struktur WSDL ini terdiri dari lima bagian utama, yaitu:
Types Message PortType Binding Service
PortType Cari elemen portType di bagian tengah dokumen WSDL. PortType merupakan kumpulan operasi (operation) yang tersedia pada server. PortType mempunyai nama. Dengan NuSOAP, nama portType diberikan secara otomatis dengan merujuk pada nama service. <portType name="HelloWSDLPortType">
Tiap operasi mempunyai nama sesuai yang didaftarkan pada program PHP. Untuk menggunakan operasi, diperlukan pesan (message), yakni input message dan/atau output message yang kemudian didefinisikan di bagian Message.
Message Lihat elemen message sebelum elemen portType. Masing-masing pesan yang disebutkan di semua operasi di bagian PortType didefinisikan sebagai satu elemen tersendiri. Pesan bisa terdiri dari beberapa bagian (part). Part bisa menyatakan parameter operasi beserta tipe datanya. <message name="HelloWorldRequest"> <part name="null" type="xsd:any" /> <message name="HelloWorldResponse"> <part name="return" type="xsd:string" />
Apabila part mempunyai tipe data kompleks, tipe data akan didefinisikan di bagian Types. Pada contoh, part menggunakan tipe data sederhana XML Schema. Tipe data XML Schema dapat dilihat di http://www.w3.org/TR/xmlschema-2/
Types Lihat elemen types di bagian awal dokumen WSDL (atau sebelum elemen message). Di contoh, karena part pada message tidak menggunakan tipe data kompleks, pada bagian Types tidak berisi definisi tipe data kompleks.
Binding Lihat elemen binding setelah elemen portType. Binding menyatakan format pesan dan protokol transport bagi portType. Binding mempunyai nama dan merujuk ke portType tertentu. Pada contoh, protokol transport yang digunakan adalah SOAP/HTTP. Tiap operasi ditentukan gaya (style) pemanggilannya, misal rpc berarti Remote Procedure Call. Tiap pesan dalam operasi ditentukan format encoding yang digunakan, misal SOAP encoding. <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <soap:operation soapAction="uri:hello.php#HelloWorld" style="rpc"/> <soap:body use="encoded" namespace="http://teduh.dirgahayu.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
Service Lihat elemen service di bagian akhir dokumen WSDL atau setelah elemen binding. Service merupakan kumpulan port . Suatu port menyatakan alamat fisik suatu binding. Service dan port mempunyai nama. Dengan NuSOAP, nama port diberikan secara otomatis dengan merujuk pada nama service. <service name="HelloWSDL"> <port name="HelloWSDLPort" binding="tns:HelloWSDLBinding"> <soap:address location="http://localhost/tier2/hello.php"/>
Pengembangan client Fokus pengembangan client pada panduan ini adalah untuk memfasilitasi cara penggunaan WSDL untuk pemanggilan server, bukan detil pemrograman dengan PHP dan NuSOAP. Tulis program berikut, simpan sebagai file client.php di folder tier1 (client) getError(); if ($err) { echo '
Soap client error
<pre>' . $err . ''; } //pemanggilan operasi tanpa parameter $result = $client->call('HelloWorld', array(null)); if (!$result) { echo "Tidak ada hasil (result = false)"; } else { echo $result; } echo ' '; ?>
Buka alamat localhost/tier1/client.php pada browser.
Pemanggilan server oleh client berhasil dilakukan!
//panggil operasi //tanpa parameter
//tulis hasilnya
Operasi dengan parameter
Tambahkan operasi berikut pada program hello.php di server. Letakkan sebelum baris untuk penanganan request.
//nama operasi //parameter input //parameter output //namespace //soapaction
//operasi dengan dua parameter function Penjumlahan($op1, $op2) { $hasil = $op1 + $op2; return $hasil; } $server->register('Penjumlahan', array('bilangan1' => 'xsd:double', 'bilangan2' => 'xsd:double'), array('hasil' => 'xsd:double'), $namespace, 'uri:hello.php#Penjumlahan' );
//nama operasi //parameter input //parameter output //namespace //soapaction
Lihat dan cermati WSDL yang dihasilkan. Tambahkan baris program berikut pada program client.php di client. //pemanggilan operasi dengan satu parameter $result = $client->call('Hello', array('name' => 'Dunia'));
//panggil operasi //satu parameter
if (!$result) { echo "service returned false"; } else { echo $result; } echo ' '; //pemanggilan operasi dengan dua parameter $result = $client->call('Penjumlahan', array('bilangan1' => 145.7, 'bilangan2' => 51.4)); if (!$result) { echo "service returned false"; } else { echo $result; } echo ' ';
Buka alamat localhost/tier1/client.php pada browser.
//panggile operasi //parameter 1 //parameter 2
Tugas pengganti kuliah Buat service kalkulator sederhana dengan operasi berikut.
Buat program client yang menampilkan form HTML (seperti contoh berikut, boleh tidak sama persis). Jika tombol diklik, client memanggil operasi perhitungan yang sesuai pada service dan menampilkan hasilnya pada text {hasil perhitungan}.