Membuat WebService dengan Slim Framework

Android 3 Mar 2016


Membuat WebService dengan Slim Framework. Pada tutorial kita akan belajar menggunakan slim framework 3.0 untuk membuat RESTful webservice. RESTful adalah arsitektur REST(Representational State Transfer) berbasis webservice. Dalam Arsitektur REST semuanya adalah resource. Untuk lebih mengenal RESTful bisa baca referensi ini http://www.ibm.com/developerworks/webservices/library/ws-restful/. Pada tutorial ini saya menggunakan XAMPP di Windows, bisa didownload di https://www.apachefriends.org/index.html. System Requirements yang dibutuhkan slim adalah Web server dengan URL rewriting dan PHP 5.5 atau versi terbaru.

Tutorial Membuat WebService dengan Slim Framework di Windows

1. Install XAMPP.
2. Konfigurasi Apache untuk mengaktifkan mod_rewrite.
Buka http.conf dengan klik config pada apache -> Apache(http.conf)
xampp control panel http conf
4. Pada http.conf hilangkan tanda pagar(#) di LoadModule rewrite_module modules/mod_rewrite.s.
mod rewrite apache
Dalam <Directory “C:/xampp/htdocs”>..</Directory> ubah AllowOverride none menjadi AllowOverride all.
allowoverride on apache
5. Aktifkan Apache dan MySQL dengan klik Start.
xampp control panel
6. Untuk menginstall Slim, kita gunakan composer sebagai Dependency Manager for PHP. Download Composer-Setup.exe di https://getcomposer.org/download/.
composer setup Disarankan untuk menginstall Shell Menus, kita dapat menggunakan composer dengan klik kanan pada folder project kita.
7. Buat folder untuk project kita dengan nama slimteknorial di htdocs yang terletak di C:\XAMPP\htdocs.
8. klik kanan pada folder slimteknorial dan pilih use composer here.
9. Untuk menginstall slim, masukan kode berikut di CMD yang sudah terbuka.

composer require slim/slim "^3.0"

composer slim on cmd10. Masuk ke folder slimproject dan buat file baru dengan nama index.php
11. Sekarang kita mencoba menampilkan Hello World di Slim. Buka index.php dan tambahkan kode berikut.

<?php 
require 'vendor/autoload.php';
//membuat dan mengkonfigurasi slim app
$app = new \Slim\app;

//mendefinisikan route app untuk home
$app-> get('/', function(){
    echo "Hello World by slimteknorial";
});

//run App
$app->run();

buka localhost/slimteknorial di browser dan Home kita akan seperti screenshot berikut.
hello world slim on teknorial

Tutorial Membuat CRUD(Create, Read, Update, Delete) dengan Slim

Pada tahap ini kita menggunakan MySQL dan library NotORM untuk memudahkan kita dalam bekerja dengan database.
1. Buka phpMyAdmin dan buat database dengan nama slimteknorialdb
2. Dalam slimteknorialdb , buat tabel dengan nama produk dan isi beberapa kolom seperti gambar berikut.
create database mysql fix
3. Dalam tabel produk insert data-data berikut.
table produk slimteknorial
4. Sekarang kita akan menggunakan library NotORM dengan download di http://www.notorm.com/. Buat folder baru dengan nama libs dan masukan hasil download NotORM ke dalam folder libs.
notORM as libs
5. Buka kembali index.php, tambahkan kode berikut untuk konfigurasi database.

<?php 
require 'vendor/autoload.php';
require 'libs/NotORM.php'; 
//membuat dan mengkonfigurasi slim app
$app = new \Slim\app;

// konfigurasi database
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'slimteknorialdb';
$dbmethod = 'mysql:dbname=';

$dsn = $dbmethod.$dbname;
$pdo = new PDO($dsn, $dbuser, $dbpass);
$db  = new NotORM($pdo);

//mendefinisikan route app di home
$app-> get('/', function(){
    echo "Hello World by slimteknorial";
});

//run App
$app->run();

6. Sekarang kita akan gunakan 4 HTTP method untuk RESTful webservice yaitu GET, POST, PUT, dan DELETE.
– GET
Kita akan mencoba mengambil data dari database. Buat route baru ketika user atau aplikasi masuk ke Base URL (localhost/slimteknorial) dan menambahkan /produks ,maka semua data dari database akan muncul dengan format JSON.
Ikuti kode berikut dan letakan dibawah route home dan diatas $app->run();

// Mendapatkan semua data produk 
$app ->get('/semuaproduk', function() use($app, $db){
    foreach($db->produk() as $data){
        $produk['semuaproduk'][] = array(
            'id_produk' => $data['id_produk'],
            'nama' => $data['nama'],
            'harga' => $data['harga'],
            'status' => $data['status']
            );
    }
    echo json_encode($produk);
});

Jika Anda coba membuka localhost/slimteknorial/semuaproduk dibrowser maka akan muncul error Object not found!, itu terjadi karena kita belum membuat file .htaccess , buat file baru dan tulis .htaccess setelah itu save.
htaccess for slim
Replace isi dari dari .htaccess dengan kode berikut.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

Sekarang coba kembali buka localhost/slimteknorial/semuaproduk dan hasilnya seperti berikut.
semuaproduk slimteknorialdb on slim
Untuk mengambil salah satu data berdasarkan id, buat route GET baru seperti berikut. Setiap menambahkan route harus letakan di atas $app->run().

// Mendapatkan salah satu data
$app ->get('/semuaproduk/{id}', function($request, $response, $args) use($app, $db){
    $produk = $db->produk()->where('id_produk',$args['id']);
    if($data = $produk->fetch()){
        echo json_encode(array(
            'id_produk' => $data['id_produk'],
            'nama' => $data['nama'],
            'harga' => $data['harga'],
            'status' => $data['status']
            ));
    }
    else{
        echo json_encode(array(
            'status' => false,
            'message' => "ID produk tidak ada"
            ));
    }
});

Coba buka localhost/slimteknorial/semuaproduk/2 di browser maka akan muncul seperti berikut.
salah satu data slimteknorialdb on slim

– POST
Kita sudah bisa mengambil data dari database,jika kita ingin menambahkan data ke database, gunakan method POST. Untuk melakukannya tambahkan route baru dibawah route GET sebelumnya.

//tambah produk baru
$app->post('/produk', function($request, $response, $args) use($app, $db){
    $produk = $request->getParams();
    $result = $db->produk->insert($produk);
    echo json_encode(array(
        "status" => (bool)$result,
        ));

});

Kita tidak bisa mencoba method POST di browser,gunakan rest client dengan aplikasi Postman, bisa download di https://www.getpostman.com/ dan pilih chrome App. Buka Postman , pilih method post, masukan URL http://localhost/slimteknorial/produk dan masukan data ingin ditambah ke database. id_produk AUTO_INCREMENT jadi tidak perlu menambahkan id_produk.
postman post rest
Jika Status true , maka kita berhasil menambahkan data ke database. Buka phpMyAdmin untuk melihat data yang telah kita tambah.
phpmyadmin post result

– PUT
Sekarang kita akan mencoba mengupdate data yang telah kita post, buat route PUT baru seperti berikut.

//update produk
$app->put('/produk/{id}', function($request, $response, $args) use($app, $db){
    $produk = $db->produk()->where("id_produk", $args);
    if($produk->fetch()){
        $post=$request->getParams();
        $result= $produk->update($post);
        echo json_encode(array(
            "status" => (bool) $result,
            "message" => "Produk sudah sukses diupdate "));
    }
    else{
        echo json_encode(array(
            "status" => false,
            "message" => "Produk tidak ada"));
    }
});

Pada saat kita mencoba method PUT di Postman dengan encode sebagai form-data, slim tidak bisa mendapatkan nilai dari params, seperti yang dijelaskan dalam W3, jenis konten “multipart/form-data” harus digunakan untuk mengirimkan form yang berisi file, data non-ASCII, dan data biner. Dalam kasus ini, kita harus mengirim data PUT dengan pilihan Postman “x-www-form-urlencoded” (lihat penjelasan “application/x-www-form-urlencoded” di W3).
put method rest
Buka phpMyadmin dan lihat id_produk 4 telah berhasil kita edit.
put method rest result phpmyadmin

– DELETE
Terakhir kita akan mencoba menghapus produk dalam database. Kita aka menggunakan method DELETE untuk menghapus produk. Tambahkan route DELETE seperti berikut.

//menghapus produk
$app->delete('/produk/{id}', function($request, $response, $args) use($app, $db){
    $produk = $db->produk()->where('id_produk', $args);
    if($produk->fetch()){
        $result = $produk->delete();
        echo json_encode(array(
            "status" => true,
            "message" => "Produk berhasil dihapus"));
    }
    else{
        echo json_encode(array(
            "status" => false,
            "message" => "Produk id tersebut tidak ada"));
    }
});

kita menghapus produk berdasarkan id_produk dalam database dan menggunakan method delete() dari NotORM. Untuk mengujinya fungsi dapat memilih method delete di postman.
delete method rest
Jika true maka kita berhasil menghapus data dalam database berdasarkan id_produk.
delete method rest result phpmyadmin
Berikut Source code keselurahan dari RESTful webservice yang telah kita buat.

<?php 
require 'vendor/autoload.php';
require 'libs/NotORM.php'; 
//membuat dan mengkonfigurasi slim app
$app = new \Slim\app;

// konfigurasi database
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'slimteknorialdb';
$dbmethod = 'mysql:dbname=';

$dsn = $dbmethod.$dbname;
$pdo = new PDO($dsn, $dbuser, $dbpass);
$db  = new NotORM($pdo);

//mendefinisikan route app dihome
$app-> get('/', function(){
    echo "Hello World by slimteknorial";
});

// Mendapatkan semua data produk 
$app ->get('/semuaproduk', function() use($app, $db){
    foreach($db->produk() as $data){
        $produk['semuaproduk'][] = array(
            'id_produk' => $data['id_produk'],
            'nama' => $data['nama'],
            'harga' => $data['harga'],
            'status' => $data['status']
            );
    }
    echo json_encode($produk);
});
// Mendapatkan salah satu data
$app ->get('/semuaproduk/{id}', function($request, $response, $args) use($app, $db){
    $produk = $db->produk()->where('id_produk',$args['id']);
    if($data = $produk->fetch()){
        echo json_encode(array(
            'id_produk' => $data['id_produk'],
            'nama' => $data['nama'],
            'harga' => $data['harga'],
            'status' => $data['status']
            ));
    }
    else{
        echo json_encode(array(
            'status' => false,
            'message' => "ID produk tidak ada"
            ));
    }
});
//tambah produk baru
$app->post('/produk', function($request, $response, $args) use($app, $db){
    $produk = $request->getParams();
    $result = $db->produk->insert($produk);
    echo json_encode(array(
        "status" => (bool)$result,
        ));

});
//update produk
$app->put('/produk/{id}', function($request, $response, $args) use($app, $db){
    $produk = $db->produk()->where("id_produk", $args);
    if($produk->fetch()){
        $post=$request->getParams();
        $result= $produk->update($post);
        echo json_encode(array(
            "status" => (bool) $result,
            "message" => "Produk sudah sukses diupdate "));
    }
    else{
        echo json_encode(array(
            "status" => false,
            "message" => "Produk id tersebut tidak ada"));
    }
});
//menghapus produk
$app->delete('/produk/{id}', function($request, $response, $args) use($app, $db){
    $produk = $db->produk()->where('id_produk', $args);
    if($produk->fetch()){
        $result = $produk->delete();
        echo json_encode(array(
            "status" => true,
            "message" => "Produk berhasil dihapus"));
    }
    else{
        echo json_encode(array(
            "status" => false,
            "message" => "Produk id tersebut tidak ada"));
    }
});

//run App
$app->run();

Kita sudah berhasil membuat RESTful webservice dengan HTTP method GET, POST, PUT, dan DELETE. Ini Awal yang bagus untuk bisa mengembangkan webservice dengan banyak method,route,dan autentikasi untuk keamanan. Untuk Aplikasi REST client bisa belajar di Tutorial Parsing Data JSON dengan Retrofit dan Tutorial ListView dengan Sumber Data JSON, saat ini tutorial aplikasi REST client masih tentang penggunaan method GET. Untuk method lainnya akan menyusul.

Demikian artikel Membuat WebService dengan Slim Framework. Ikuti terus teknorial.com untuk mengetahui banyak hal tentang pemrograman android. Jangan lupa untuk Like Fanspage Teknorial di Facebook dan Google Plus untuk mendapatkan update terbaru dari teknorial.com . Jika ada pertanyaan jangan ragu untuk bertanya dikotak komentar. Terima Kasih

Source code : https://github.com/rflash95/RESTfulWebservice-SlimFramework

Referensi.
http://www.slimframework.com/docs/
http://www.ibm.com/developerworks/webservices/library/ws-restful/
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
http://www.restapitutorial.com/lessons/httpmethods.html

Tag