Membuat Server
Untuk membuat server yang menyediakan web service, kita harus membuat sebuah kelas yang berisi method-method yang akan kita jadikan web service.
class OperasiMatematika {
function tambah($a, $b) {
return $a + $b;
}
function kurang($a, $b) {
return $a – $b;
}
function kali($a, $b) {
return $a * $b;
}
function bagi($a, $b) {
if ($b == 0) {
/* error */
}
else {
return $a / $b;
}
}
function mod($a, $b) {
return $a % $b;
}
}
Kelas tersebut akan menjadi dasar web service yang akan kita buat. Setelah itu, kita harus membuat daftar method-method yang akan dijadikan web service. Agar pendefinisian kelas dan pendefinisian daftar method untuk web service tidak dicampur, kita akan membuat daftar method-method tersebut dalam kelas turunannya saja.
class OperasiMatematikaService extends OperasiMatematika {
var $__dispatch_map;
function OperasiMatematikaService() {
$this->__dispatch_map['tambah'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
$this->__dispatch_map['kurang'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
$this->__dispatch_map['kali'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
$this->__dispatch_map['bagi'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘float’)
);
$this->__dispatch_map['mod'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
}
function __dispatch($method_name) {
if (isset($this->__dispatch_map[$method_name])) {
return $this->__dispatch_map[$method_name];
}
else {
return NULL;
}
}
}
Perhatikan potongan source code di bawah ini.
$this->__dispatch_map['mod'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
Bagian tersebut berisi penjelasan method yang didaftarkan untuk menjadi web service. Nilai dari key dari variabel $this->__dispatch_map, dalam hal ini adalah mod, adalah nama method yang akan dijadikan web service. Method ini harus ada di dalam kelas.
Nilai dari variabel tadi menjelaskan mengenai method yang bersangkutan. Dalam contoh di atas, method mod adalah method yang memiliki tipe operasi Request-response, yaitu method yang menerima request dan akan mengeluarkan response.
Jika kita lihat pada potongan source code di atas, method mod akan menerima input berupa dua buah variabel, yaitu a dan b yang masing-masing memiliki tipe int. Method tersebut akan mengeluarkan output berupa sebuah variabel hasil dengan tipe int.
Dalam contoh kelas OperasiMatematika, pada method bagi, ada bagian yang baru saya beri tanda /* error */. Bagian tersebut akan berisi potongan source code yang dapat mengeluarkan informasi error kepada client dari web service. Potongan source code yang akan kita isikan pada bagian tersebut adalah sebagai berikut.
return new SOAP_Fault(‘Anda melakukan pembagian dengan nol’);
Method bagi dalam kelas OperasiMatematika akan menjadi sebagai berikut.
function bagi($a, $b) {
if ($b == 0) {
return new SOAP_Fault(‘Anda melakukan pembagian dengan nol’);
}
else {
return $a / $b;
}
}
Sampai saat ini, Anda telah membuat sebuah deskripsi dari web service yang akan dibuat. Agar kelas-kelas tadi dapat digunakan sebagai web service, kita akan menggunakan fasilitas dari paket SOAP dari PEAR.
<?
include_once(‘SOAP/Server.php’);
include_once(‘SOAP/Disco.php’);
class OperasiMatematika {
…
}
class OperasiMatematikaService extends OperasiMatematika {
…
}
$soap = new SOAP_Server();
$soap->_auto_translation = true;
$matematika = new OperasiMatematikaService();
$soap->addObjectMap($matematika, ‘http://schemas.xmlsoap.org/wsdl/’);
if (isset($_SERVER['REQUEST_METHOD']) && ($_SERVER['REQUEST_METHOD'] == ‘POST’)) {
$soap->service($HTTP_RAW_POST_DATA);
}
else {
header(‘Content-type: text/xml’);
$disco = new SOAP_DISCO_Server($soap, ‘OperasiMatematikaService’);
if (isset($_SERVER['QUERY_STRING']) && (strcasecmp($_SERVER['QUERY_STRING'], ‘wsdl’) == 0)) {
print($disco->getWSDL());
}
else {
print($disco->getDISCO());
}
}
?>
Lengkapi isi dari kelas OperasiMatematika dan OperasiMatematikaService pada potongan source code di atas agar menjadi source code utuh yang dapat digunakan.
File PHP yang kita buat di atas berisi pendefinisian kelas yang akan menjadi web service, sebuah fasilitas untuk memproses request yang datang, dan fasilitas untuk melihat WSDL atau deskripsi dari web service yang kita buat.
Setelah semua ini dibuat, web service yang Anda buat sudah siap untuk digunakan. Anda dapat menggunakan fasilitas dari Microsoft .NET, Apache AXIS, atau client web service lainnya (seperti yang akan kita buat juga) untuk mengakses web service ini.
Source code
Demo server
WSDL
Membuat Client
Pembuatan client web service jauh lebih mudah daripada pembuatan server. Yang harus Anda lakukan pertama kali adalah menentukan alamat web service yang akan di akses. Saya akan menggunakan web service yang terletak pada http://fajran.net/web/arsip/tutorial/web-service-dengan-php/server.php?wsdl sebagai bahan uji coba pembuatan client web service.
Pertama-tama, Anda harus membuat proxy (client stub) sebagai perantara antara aplikasi client dan web service yang ingin Anda akses.
$soap = new SOAP_WSDL(‘http://fajran.net/web/arsip/tutorial/web-service-dengan-php/server.php?wsdl’);
$proxy = $soap->getProxy();
Setelah proxy berhasil dibuat, Anda dapat menggunakan object $proxy tadi untuk mengakses method-method yang dijadikan web service seolah-olah method-method tersebut adalah method lokal.
$a = 2;
$b = 2;
$hasil = $proxy->tambah($a, $b);
print(“<p>$a + $b = $hasil</p>”);
$hasil = $proxy->kurang($a, $b);
print(“<p>$a – $b = $hasil</p>”);
$hasil = $proxy->kali($a, $b);
print(“<p>$a * $b = $hasil</p>”);
$hasil = $proxy->bagi($a, $b);
print(“<p>$a / $b = $hasil</p>”);
$hasil = $proxy->mod($a, $b);
print(“<p>$a % $b = $hasil</p>”);
Jika script di atas dijalankan, maka hasil yang akan Anda dapatkan adalah sebagai berikut.
2 + 2 = 4
2 – 2 = 0
2 * 2 = 4
2 / 2 = 1
2 % 2 = 0
Untuk membuat server yang menyediakan web service, kita harus membuat sebuah kelas yang berisi method-method yang akan kita jadikan web service.
class OperasiMatematika {
function tambah($a, $b) {
return $a + $b;
}
function kurang($a, $b) {
return $a – $b;
}
function kali($a, $b) {
return $a * $b;
}
function bagi($a, $b) {
if ($b == 0) {
/* error */
}
else {
return $a / $b;
}
}
function mod($a, $b) {
return $a % $b;
}
}
Kelas tersebut akan menjadi dasar web service yang akan kita buat. Setelah itu, kita harus membuat daftar method-method yang akan dijadikan web service. Agar pendefinisian kelas dan pendefinisian daftar method untuk web service tidak dicampur, kita akan membuat daftar method-method tersebut dalam kelas turunannya saja.
class OperasiMatematikaService extends OperasiMatematika {
var $__dispatch_map;
function OperasiMatematikaService() {
$this->__dispatch_map['tambah'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
$this->__dispatch_map['kurang'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
$this->__dispatch_map['kali'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
$this->__dispatch_map['bagi'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘float’)
);
$this->__dispatch_map['mod'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
}
function __dispatch($method_name) {
if (isset($this->__dispatch_map[$method_name])) {
return $this->__dispatch_map[$method_name];
}
else {
return NULL;
}
}
}
Perhatikan potongan source code di bawah ini.
$this->__dispatch_map['mod'] = array(
‘in’ => array(‘a’ => ‘int’, ‘b’ => ‘int’),
‘out’ => array(‘hasil’ => ‘int’)
);
Bagian tersebut berisi penjelasan method yang didaftarkan untuk menjadi web service. Nilai dari key dari variabel $this->__dispatch_map, dalam hal ini adalah mod, adalah nama method yang akan dijadikan web service. Method ini harus ada di dalam kelas.
Nilai dari variabel tadi menjelaskan mengenai method yang bersangkutan. Dalam contoh di atas, method mod adalah method yang memiliki tipe operasi Request-response, yaitu method yang menerima request dan akan mengeluarkan response.
Jika kita lihat pada potongan source code di atas, method mod akan menerima input berupa dua buah variabel, yaitu a dan b yang masing-masing memiliki tipe int. Method tersebut akan mengeluarkan output berupa sebuah variabel hasil dengan tipe int.
Dalam contoh kelas OperasiMatematika, pada method bagi, ada bagian yang baru saya beri tanda /* error */. Bagian tersebut akan berisi potongan source code yang dapat mengeluarkan informasi error kepada client dari web service. Potongan source code yang akan kita isikan pada bagian tersebut adalah sebagai berikut.
return new SOAP_Fault(‘Anda melakukan pembagian dengan nol’);
Method bagi dalam kelas OperasiMatematika akan menjadi sebagai berikut.
function bagi($a, $b) {
if ($b == 0) {
return new SOAP_Fault(‘Anda melakukan pembagian dengan nol’);
}
else {
return $a / $b;
}
}
Sampai saat ini, Anda telah membuat sebuah deskripsi dari web service yang akan dibuat. Agar kelas-kelas tadi dapat digunakan sebagai web service, kita akan menggunakan fasilitas dari paket SOAP dari PEAR.
<?
include_once(‘SOAP/Server.php’);
include_once(‘SOAP/Disco.php’);
class OperasiMatematika {
…
}
class OperasiMatematikaService extends OperasiMatematika {
…
}
$soap = new SOAP_Server();
$soap->_auto_translation = true;
$matematika = new OperasiMatematikaService();
$soap->addObjectMap($matematika, ‘http://schemas.xmlsoap.org/wsdl/’);
if (isset($_SERVER['REQUEST_METHOD']) && ($_SERVER['REQUEST_METHOD'] == ‘POST’)) {
$soap->service($HTTP_RAW_POST_DATA);
}
else {
header(‘Content-type: text/xml’);
$disco = new SOAP_DISCO_Server($soap, ‘OperasiMatematikaService’);
if (isset($_SERVER['QUERY_STRING']) && (strcasecmp($_SERVER['QUERY_STRING'], ‘wsdl’) == 0)) {
print($disco->getWSDL());
}
else {
print($disco->getDISCO());
}
}
?>
Lengkapi isi dari kelas OperasiMatematika dan OperasiMatematikaService pada potongan source code di atas agar menjadi source code utuh yang dapat digunakan.
File PHP yang kita buat di atas berisi pendefinisian kelas yang akan menjadi web service, sebuah fasilitas untuk memproses request yang datang, dan fasilitas untuk melihat WSDL atau deskripsi dari web service yang kita buat.
Setelah semua ini dibuat, web service yang Anda buat sudah siap untuk digunakan. Anda dapat menggunakan fasilitas dari Microsoft .NET, Apache AXIS, atau client web service lainnya (seperti yang akan kita buat juga) untuk mengakses web service ini.
Source code
Demo server
WSDL
Membuat Client
Pembuatan client web service jauh lebih mudah daripada pembuatan server. Yang harus Anda lakukan pertama kali adalah menentukan alamat web service yang akan di akses. Saya akan menggunakan web service yang terletak pada http://fajran.net/web/arsip/tutorial/web-service-dengan-php/server.php?wsdl sebagai bahan uji coba pembuatan client web service.
Pertama-tama, Anda harus membuat proxy (client stub) sebagai perantara antara aplikasi client dan web service yang ingin Anda akses.
$soap = new SOAP_WSDL(‘http://fajran.net/web/arsip/tutorial/web-service-dengan-php/server.php?wsdl’);
$proxy = $soap->getProxy();
Setelah proxy berhasil dibuat, Anda dapat menggunakan object $proxy tadi untuk mengakses method-method yang dijadikan web service seolah-olah method-method tersebut adalah method lokal.
$a = 2;
$b = 2;
$hasil = $proxy->tambah($a, $b);
print(“<p>$a + $b = $hasil</p>”);
$hasil = $proxy->kurang($a, $b);
print(“<p>$a – $b = $hasil</p>”);
$hasil = $proxy->kali($a, $b);
print(“<p>$a * $b = $hasil</p>”);
$hasil = $proxy->bagi($a, $b);
print(“<p>$a / $b = $hasil</p>”);
$hasil = $proxy->mod($a, $b);
print(“<p>$a % $b = $hasil</p>”);
Jika script di atas dijalankan, maka hasil yang akan Anda dapatkan adalah sebagai berikut.
2 + 2 = 4
2 – 2 = 0
2 * 2 = 4
2 / 2 = 1
2 % 2 = 0
Anda sedang membaca artikel tentang Membuat Web Service dengan PHP dan anda bisa menemukan artikel Membuat Web Service dengan PHP ini dengan url http://wanzbsc.blogspot.com/2011/12/membuat-web-service-dengan-php.html. Anda boleh menyebarluaskan atau mengcopy artikel Membuat Web Service dengan PHP ini jika memang bermanfaat bagi anda atau teman-teman anda,namun jangan lupa untuk mencantumkan link sumbernya.
{ 0 komentar... read them below or add one }
Posting Komentar