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)
4. Pada http.conf hilangkan tanda pagar(#) di
LoadModule rewrite_module modules/mod_rewrite.s.
Dalam <Directory “C:/xampp/htdocs”>..</Directory> ubah AllowOverride none menjadi AllowOverride all.
5. Aktifkan Apache dan MySQL dengan klik Start.
6. Untuk menginstall Slim, kita gunakan composer sebagai Dependency Manager for PHP. Download Composer-Setup.exe di
https://getcomposer.org/download/.
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"
10. 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';
$app = new \Slim\app;
$app-> get('/', function(){
echo "Hello World by slimteknorial";
});
$app->run();
buka localhost/slimteknorial di browser dan Home kita akan seperti screenshot berikut.
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.
3. Dalam tabel produk insert data-data berikut.
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.
5. Buka kembali index.php, tambahkan kode berikut untuk konfigurasi database.
<?php
require 'vendor/autoload.php';
require 'libs/NotORM.php';
$app = new \Slim\app;
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'slimteknorialdb';
$dbmethod = 'mysql:dbname=';
$dsn = $dbmethod.$dbname;
$pdo = new PDO($dsn, $dbuser, $dbpass);
$db = new NotORM($pdo);
$app-> get('/', function(){
echo "Hello World by slimteknorial";
});
$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();
$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.
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.
Untuk mengambil salah satu data berdasarkan id, buat route GET baru
seperti berikut. Setiap menambahkan route harus letakan di atas
$app->run().
$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.
– 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.
$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.
Jika Status true , maka kita berhasil menambahkan data ke database. Buka phpMyAdmin untuk melihat data yang telah kita tambah.
– PUT
Sekarang kita akan mencoba mengupdate data yang telah kita post, buat route PUT baru seperti berikut.
$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).
Buka phpMyadmin dan lihat id_produk 4 telah berhasil kita edit.
– DELETE
Terakhir kita akan mencoba menghapus produk dalam database. Kita aka
menggunakan method DELETE untuk menghapus produk. Tambahkan route DELETE
seperti berikut.
$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.
Jika true maka kita berhasil menghapus data dalam database berdasarkan id_produk.
Berikut Source code keselurahan dari RESTful webservice yang telah kita buat.
<?php
require 'vendor/autoload.php';
require 'libs/NotORM.php';
$app = new \Slim\app;
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'slimteknorialdb';
$dbmethod = 'mysql:dbname=';
$dsn = $dbmethod.$dbname;
$pdo = new PDO($dsn, $dbuser, $dbpass);
$db = new NotORM($pdo);
$app-> get('/', function(){
echo "Hello World by slimteknorial";
});
$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);
});
$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"
));
}
});
$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,
));
});
$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"));
}
});
$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"));
}
});
$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.
Unknown
Wednesday, September 6, 2017
Related Posts