Language

Pada artikel kali ini, akan dibahas tutorial membangun webservice WSDL menggunakan NuSOAP. Sebelum kita mulai, ada baiknya kita menjabarkan dulu tools atau library yang akan digunakan selama proses pembuatan webservice. Adapun tools atau library yang digunakan adalah :

  • PHP 7.4 dan MySQL (tutorial ini menggunakan bundle Xampp)
  • Composer (untuk instalasi codeigniter dan nusoap).
  • CodeIgniter 4.
  • NuSOAP.

Tahap pertama adalah menyiapkan database, buatlah sebuah database baru dengan nama gudang dengan menggunakan PHPMyAdmin atau tools database lainnya.

Kemudian buatlah sebuah tabel untuk menampung data yang akan digunakan oleh webservice yang kita bangun. Adapun query pembuatan tabel adalah sebagai berikut :

CREATE TABLE `gudang`.`barang` ( `id_barang` BIGINT NOT NULL AUTO_INCREMENT , `kode_barang` VARCHAR(255) NOT NULL , `nama_barang` VARCHAR(255) NOT NULL , PRIMARY KEY (`id_barang`)) ENGINE = InnoDB;

Adapun struktur table setelah berhasil dibuat dapat dilihat pada gambar berikut :

Setelah persiapan database selesai, selanjutnya kita akan menyiapkan aplikasi webservice PHP menggunakan framework CI. Tutorial ini menggunakan bundle Xampp dengan versi PHP 7.4. Anda dapat menyiapkan framework CI menggunakan instalasi manual ataupun menggunakan composer. Jika menggunakan composer, lakukanlah langkah – langkah berikut :

Pada folder htdocs di direktori Xampp, siapkan sebuah folder untuk webservice anda. Pada tutorial ini akan dibuat sebuah folder wsbarang. Pastikan anda telah menginstal composer. Jalankan command prompt, dan ubah aktif direktori ke folder htdocs anda.

Lalu jalankan perintah berikut : 

composer create-project codeigniter4/appstarter wsbarang

Dimana wsbarang merupakan nama folder webservice yang anda buat di langkah 1.

Masih di command prompt yang sama, ganti aktif direktori ke folder wsbarang dan ketikkan perintah berikut untuk menginstall nusoap.

composer require econea/nusoap

Lakukan konfigurasi database pada codeigniter di direktori app/Config/Database.php sesuai dengan konfigurasi server MySQL anda.

Selanjutnya kita akan masuk kedalam pemrograman server WSDL. Pertama sekali buatlah sebuah file model di app/Models dengan nama BarangModel.php.

<?php

namespace App\Models;

use CodeIgniter\Model;

class BarangModel extends Model
{
    protected $table      = 'barang';
    protected $primaryKey = 'id_barang';

    protected $useAutoIncrement = true;

    protected $returnType     = 'array';
    protected $useSoftDeletes = true;

    protected $allowedFields = ['kode_barang', 'nama_barang'];

    protected $validationRules    = ['kode_barang' => 'required|is_unique[barang.kode_barang]',
                                    'nama_barang' => 'required'];
    protected $validationMessages = ['kode_barang' => [
        'required' => 'Maaf. Kode Barang tidak boleh kosong.',
        'is_unique' => 'Maaf. Kode Barang sudah digunakan oleh data yang lain.'
    ],
        'nama_barang' => [
            'required' => 'Maaf. Nama Barang tidak boleh kosong.', 
        ]];
    protected $skipValidation     = false;
}

?>

Kemudian, buatlah sebuah class untuk menampung response dari server wsdl dengan nama file Serverresponse.php di direktori app/Libraries.

<?php
namespace App\Libraries;

class Serverresponse {
    public $responseCode = 0;
    public $responseMessage = 'Unknown error!';
    public $returnBarang = NULL;
}   
?>

Buatlah sebuah class Server untuk menangani fungsi – fungsi server wsdl pada NuSoap dengan nama Serverwsdl.php pada direktori app/Libraries. Pada class ini juga akan dibuat fungsi pembacaan data (getListBarang) yang akan disertakan sebagai fungsi atau operasi yang dapat diakses oleh client. Fungsi atau operasi yang akan tersedia pada service wsdl harus di definisikan sebelum masuk ke bagian program bagian dari kelas. Hal ini dikarenakan fungsi yang akan di register sebagai service harus merupakan fungsi top-level bukan fungsi atau method yang dimiliki oleh object.

<?php

function getListBarang($limit, $offset)
{
    $barangModel = new \App\Models\BarangModel();
    $responseObject = new \App\Libraries\Serverresponse();
    
    $responseObject->returnBarang = array();  
    if ($limit == 0)
    {
        $barang = $barangModel->findAll();
    }else{
        $barang = $barangModel->findAll($limit, $offset);
    }

    $responseObject->returnBarang = $barang;
    $responseObject->responseCode = 1;
    $responseObject->responseMessage = 'Successful!';
    return $responseObject; 
}

use econea\nusoap;
namespace App\Libraries;

class Serverwsdl extends \soap_server {
    private $serviceName;
    private $domainName;

    function __construct($service_name, $domain)
    {
        parent::__construct();
        $this->configureWSDL($service_name, $domain);
        $this->soap_defencoding = 'utf-8';
        $this->decode_utf8 = false;
        $this->encode_utf8 = true;
    }

    public function prepareGetListBarang()
    {
        $this->wsdl->addComplexType(
            'Barang', // name
            'complexType', // typeClass (complexType|simpleType|attribute)
            'struct', // phpType: currently supported are array and struct (php assoc array)
            'all', // compositor (all|sequence|choice)
            '', // restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
            // elements = array ( name = array(name=>'',type=>'') )
            array(
                'id_barang' => array(
                    'name' => 'id_barang',
                    'type' => 'xsd:int'
                ),
                'kode_barang' => array(
                    'name' => 'kode_barang',
                    'type' => 'xsd:string'
                ),
                'nama_barang' => array(
                    'name' => 'nama_barang',
                    'type' => 'xsd:string'
                )
            )
        );

        $this->wsdl->addComplexType(
            'ArrayBarang', // name
            'complexType', // typeClass (complexType|simpleType|attribute)
            'array', // phpType: currently supported are array and struct (php assoc array)
            '', // compositor (all|sequence|choice)
            'SOAP-ENC:Array', // restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
            // elements = array ( name = array(name=>'',type=>'') )
            array(),
            // attrs
            array(
                array(
                    'ref' => 'SOAP-ENC:arrayType',
                    'wsdl:arrayType' => 'tns:Barang[]'
                )
            ),
            'tns:Barang'
        );

        $this->wsdl->addComplexType(
            'ResponseObject', // name
            'complexType', // typeClass (complexType|simpleType|attribute)
            'struct', // phpType: currently supported are array and struct (php assoc array)
            'all', // compositor (all|sequence|choice)
            '', // restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
            // elements = array ( name = array(name=>'',type=>'') )
            array
            (
                'responseCode' => array('type' => 'xsd:int'),
                'responseMessage' => array('type' => 'xsd:string'),
                'returnBarang'   => array('type' => 'tns:ArrayBarang')
            )
        );

        //die(var_dump(function_exists('getListBarang')));
        
        $this->register('getListBarang',                // method name
            array('limit' => 'xsd:int', 'offset' => 'xsd:int'),        // input parameters
            array('return' => 'tns:ResponseObject'),    // output parameters
            $this->domainName,                    // namespace
            $this->domainName.'#getListBarang',                // soapaction
            'rpc',                                // style
            'encoded',                            // use
            'Get List Barang, untuk semua barang set limit = 0'            // documentation
        );
    }

    public function startService($rawInput)
    {
        $this->service(isset($rawInput) ? $rawInput : '');
        exit(0);
    }
}
?>

Langkah berikutnya adalah membuat controller sebagai alamat dari service wsdl. Buatlah sebuah controller dengan nama file Wsbarang.php pada lokasi app/Controllers.

<?php

namespace App\Controllers;
use App\Libraries\Serverwsdl;

//use econea\nusoap;

class Wsbarang extends BaseController
{
    public function index()
    {
        $myNamespace = 'http://localhost/wsbarang/public/wsbarang';

        $server = new Serverwsdl('Wsbarang', $myNamespace);
        $server->prepareGetListBarang();
        $raw_input = file_get_contents('php://input');
        $server->startService($raw_input);
        exit(0);
    }
}

Pada controller jangan lupa menyertakan class library Serverwsdl yang telah dibuat sebelumnya. $myNamespace dapat menggunakan kombinasi base_url() dan nama routing dari controller ini. Nama service ‘Wsbarang’ pada new Serverwsdl merupakan nama layanan dan tidak harus sama dengan nama controller.

Buka browser dan ketikkan url dari server wsdl seperti yang terlihat pada gambar berikut :

http://localhost/wsbarang/public/wsbarang?wsdl merupakan alamat yang natinya digunakan oleh client untuk mengakses service wsdl yang kita buat. Untuk mengujicoba service yang telah berjalan, anda dapat menggunakan aplikasi boomerang atau ekstensi boomerang pada browser chrome.

Masukkan alamat server wsdl dan klik tombol LOAD. Lalu akan muncul nama service yang kemudian klik add. Pada sidebar kiri akan muncul nama service dan fungsi atau operasi yang dapat dijalankan. Klik kanan pada operasi getListBarang lalu pilih “New Request”. 

Isi nilai limit dan offset sesuai dengan banyaknya data yang ingin ditampilkan. Pastikan anda mengisi dulu data secara manual ke dalam tabel barang agar hasil respon dari server wsdl terlihat.

Tekan tombol SEND yang terletak disebelah kolom alamat server. Jika tidak ada error, maka server wsdl akan memberikan respon yang sesuai.

Sampai pada tahapan ini, server wsdl telah siap untuk melayani client. Semoga artikel ini bermanfaat, pada artikel selanjutnya akan dibahas bagaimana aplikasi client pada server wsdl menggunakan Visual Basic .Net sebagai client, stay tuned….

Source code dapat dilihat pada halaman unduhan source code, silahkan klik link berikut :

Halaman Unduh Source Code

No comments

Leave your comment

In reply to Some User
Related Articles
  • Simple File Hosting With PHP
    Simple File Hosting With PHP
    Information
    1 year(s) 4 month(s) 15 day(s) ago
    Source Code aplikasi simple file hosting dengan PHP merupakan aplikasi layanan file hosting yang dapat digunakan untuk pengelolaan file pada aplikasi web seperti upload, download dan hapus file.
  • Source Code Web Service WSDL NuSOAP CodeIgniter 4 PHP 7
    Source Code Web Service WSDL NuSOAP CodeIgniter 4 PHP 7
    Information
    2 year(s) 6 month(s) 9 day(s) ago
    Deskripsi : - Codeigniter 4 - PHP 7.4 - MySQL (you can find the database sql script in root directory) - NuSOAP 0.98   Download Link : Download : webservice_nusoap_ci4_php7.zip
  • Koneksi ke Database MySQL Menggunakan PHP: Tutorial Lengkap untuk Pemula
    Koneksi ke Database MySQL Menggunakan PHP: Tutorial Lengkap untuk Pemula
    Information
    1 year(s) 3 month(s) 23 day(s) ago
    PHP menyediakan beberapa cara untuk melakukan koneksi dan manipulasi data ke database MySQL. Salah satunya adalah menggunakan ekstensi mysqli atau mysql improved. Anda dapat menggunakan pendekatan prosedural dengan menggunakan fungsi - fungsi mysqli, atau menggunakan pendekatan object oriented. Pada tutorial ini kita akan membahas koneksi menggunakan pendekatan prosedural dengan menggunakan fungsi mysqli_connect.
  • Array pada PHP
    Array pada PHP
    Information
    1 year(s) 4 month(s) 17 day(s) ago
    Array merupakan salah satu tipe data yang dimiliki oleh semua bahasa pemrograman modern saat ini. Pada PHP, array merupakan salah satu tipe data yang cukup penting. Pada artikel kali ini, akan dibahas secara sederhana penggunaan Array dalam pemrograman PHP.
  • Include dan Require Pada PHP
    Include dan Require Pada PHP
    Information
    1 year(s) 4 month(s) 24 day(s) ago
    Dalam proses pembuatan web menggunakan PHP, sering kali kita perlu menggunakan file-file yang sudah ada seperti library atau membagi kode program menjadi beberapa bagian kedalam beberapa file terpisah yang dapat digunakan kembali. Untuk tujuan ini, PHP menyediakan dua perintah yaitu include dan require yang dapat digunakan untuk menyertakan file script php kedalam sebuah script php lain agar variabel dan fungsi dari file script yang disertakan dapat digunakan oleh script pemanggil.
  • Bermain dengan HTML Form dan PHP
    Bermain dengan HTML Form dan PHP
    Information
    1 year(s) 5 month(s) 17 day(s) ago
    Saat kita browsing sebuah website, seringkali kita menemukan beberapa fitur interaktif yang memungkinkan kita untuk memberikan informasi atau melakukan aksi tertentu, seperti mengisi survey, melakukan pemesanan, atau mengirim pesan. Sebagai contoh pada layanan berbagi pesan atau sosial media yang menggunakan browser dimana anda dapat mengirimkan pesan, membagikan photo, status dan lain sebagainya.
  • Membuat Table Sederhana Pada DBMS MySQL Menggunakan phpMyAdmin
    Membuat Table Sederhana Pada DBMS MySQL Menggunakan phpMyAdmin
    Information
    1 year(s) 5 month(s) 20 day(s) ago
    Table dalam database adalah struktur data yang terdiri dari kolom dan baris, yang digunakan untuk menyimpan informasi terkait dengan suatu topik atau objek. Setiap kolom dalam tabel merepresentasikan jenis data tertentu, seperti teks, angka, atau tanggal, sementara setiap baris merepresentasikan entitas atau item individu yang terkait dengan topik tersebut.
  • Cara Konfigurasi Virtual Host Pada Xampp Apache Web Server
    Cara Konfigurasi Virtual Host Pada Xampp Apache Web Server
    Information
    1 year(s) 5 month(s) 23 day(s) ago
    Pada paket web server Xampp semua direktori web berada pada folder htdocs secara default. Sehingga jika anda membuat sebuah web baru maka anda akan meletakkan web tersebut di dalam sub folder dari folder htdocs tersebut. Sebagai contoh katakanlah anda membuat sebuah project web baru dengan nama sisfo_barang dan anda letakkan di dalam sub folder dari folder htdocs.
  • Cara mudah instalasi CodeIgniter 4 di localhost
    Cara mudah instalasi CodeIgniter 4 di localhost
    Information
    1 year(s) 5 month(s) 24 day(s) ago
    CodeIgniter 4 adalah sebuah kerangka kerja atau framework aplikasi web PHP modern dan ringan yang dirancang untuk memudahkan pengembangan aplikasi web dengan cepat dan efisien. Dirilis pada tahun 2020, CodeIgniter 4 menawarkan sejumlah fitur baru dan perbaikan yang signifikan dibandingkan dengan versi sebelumnya dimana salah satunya telah mendukung PHP 7.2 ke atas.
  • Cara Mudah Instalasi Xampp di OS Windows
    Cara Mudah Instalasi Xampp di OS Windows
    Information
    1 year(s) 6 month(s) 1 day(s) ago
    Pada artikel kali ini, kita akan membahas langkah - langkah instalasi xampp di sistem operasi windows. Pada artikel kali ini sistem operasi yang digunakan adalah sistem operasi Windows 10. Sebelum kita mulai pada tahapan instalasi, ada baiknya kita mengenali dulu apa itu Xampp.
  • Cara Mudah Membuat Database Pada MySQL Server Menggunakan phpMyAdmin
    Cara Mudah Membuat Database Pada MySQL Server Menggunakan phpMyAdmin
    Information
    1 year(s) 10 month(s) 28 day(s) ago
    phpMyAdmin merupakan software berbasis web yang dibuat menggunakan PHP. phpMyAdmin digunakan untuk mengelola database pada server MySQL. Dikarenakan software ini dibuat menggunakan PHP, maka phpMyAdmin membutuhkan apache web server dan browser pada client untuk menjalankannya seperti chrome, firefox, opera, dll. Pada artikel kali ini, akan dibahas langkah - langkah mudah dalam membuat database pada MySQL menggunakan phpMyAdmin.
  • Setting dan Instalasi MySQL untuk PHP pada Ubuntu
    Setting dan Instalasi MySQL untuk PHP pada Ubuntu
    Information
    2 year(s) 5 month(s) 14 day(s) ago
    Pada artikel kali ini kita akan membahas bagaimana melakukan instalasi mysql yang akan digunakan bersama PHP pada Ubuntu. Versi Ubuntu yang digunakan pada artikel ini adalah 20.04. Pastikan apache2 dan PHP telah tersintall terlebih dahulu. Untuk instalasi apache2 dapat dilihat pada artikel ini : Instalasi apache2 web server pada Ubuntu, dan untuk instalasi PHP dapat dilihat pada artikel ini : Instalasi PHP pada Ubuntu.
  • PHP - Perkenalan
    PHP - Perkenalan
    Information
    2 year(s) 6 month(s) 7 day(s) ago
    PHP atau yang sering disebut dengan Hypertext Preprocessor merupakan bahasa pemrograman open source yang bertujuan untuk pengembangan web. PHP dapat juga disebut dengan HTML-embedded scripting language karena implementasi nya yang tertanam pada dokumen HTML. Walaupun begitu, PHP tidak lagi hanya di-implementasikan pada dokumen HTML saja, namun dapat di-implementasikan pada berbagai kebutuhan dan layanan seperti XML, SOAP dan layanan-layanan lainnya.