Halo teman-teman YukCoding, kali ini kita akan mencoba membuat REST API sederhana menggunakan Slim Microframework. REST api memungkinkan kita melakukan pertukaran data melalui http, data yang dikirim / diterima merepresentasikan suatu resource.

Baca ArtikelMengenal RESTful Web Services

Sebelumnya kita butuh composer terinstal di komputer kita. Selain itu, untuk menguji aplikasi kita, kita juga butuh postman / http requester atau aplikasi lain untuk melakukan request ke REST api.

Install Slim

Oke langsung saja, pertama kita siapkan folder untuk aplikasi kita. Setelah kita masuk kedalam folder aplikasi kita, kita install slim menggunakan composer.

composer require slim/slim

Baca jugaCara Install Composer di Linux dan Windows

Kemudian buat file index.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';
//inisialisasi slim
$app = new \Slim\App;

//routing, saat route '/' dengan method get diminta, dia akan mengeksekusi action
$app->get('/', function (Request $request, Response $response, array $args) {
$data = array('status'=>'ok');
return $response->withJson($data); //response akan menampilkan json hasil konversi $data ke json
});

$app->run();

Di terminal anda, jalankan php -S 0.0.0.0:3000 lalu kita cek pada postman di alamat localhost:3000 dengan method GET, apakah aplikasi kita berjalan.

Oke, selanjutnya kita akan mulai membuat resource books, disini nanti kita akan membuat sejumlah routing / url sebagai berikut :

GET/booksAkan menampilkan daftar buku
GET/books/{id}Akan menampilkan salah satu buku berdasarkan id
POST/booksAkan menambahkan buku baru
PUT/books/{id}Akan mengubah info buku berdasarkan id
DELETE/books/{id}Akan menghapus buku berdasarkan id

Koneksi Database

Sebelumnya, kita buat terlebih dahulu class untuk koneksi ke MySQL

<?php
class DBConnection extends PDO
{
public function __construct()
{
parent::__construct("mysql:host=localhost;dbname=coba", "user", "password");
$this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
}

Setelah itu kita registerkan koneksi database kita sebagai container, tambahkan kode dibawah ini setelah line 7 pada file index.php :

.....

$app = new \Slim\App;
require 'DBConnection.php';
$container = $app->getContainer();
$container['db'] = function($container){
$db = new DBConnection();
return $db;
};

.....

Jangan lupa juga untuk membuat database dan tabel books dengan field id(integer), title(varchar), isbn(varchar)

Membuat Resource Route Books

Get /books

Di route ini kita akan menampilkan daftar semua buku yang ada.

Kita akan menggunakan route group, yang berguna mengelompokkan route untuk resource books, jadi semua route dalam group ini otomatis mendapat awalan /books. Untuk lebih jelasnya bisa dicek disini https://www.slimframework.com/docs/v3/objects/router.html#route-groups

$app->group('/books', function () { //ini adalah group route

// GET /books
$this->get('',function (Request $request, Response $response, array $args) {
try{
$sql = "SELECT * FROM books";
$stmt = $this->db->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
}catch(PDOException $e){
$result = array('error'=>$e->getMessage());
}
return $response->withJson($result);
});

});

Kita cek dengan membuka url localhost:3000/books pada postman

Get /books/{id}

Di route ini kita akan menampilkan salah satu books berdasarkan id.

$this->get('/{id}',function (Request $request, Response $response, array $args) {
try{
$sql = "SELECT * FROM books where id = :id";
$stmt = $this->db->prepare($sql);
$stmt->execute(array('id'=>$args['id']));
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
}catch(PDOException $e){
$result = array('error'=>$e->getMessage());
}
return $response->withJson($result);
});

Kita cek dengan membuka url localhost:3000/books/1 pada postman.

Post /books

Kita tambahkan data books baru dengan method POST pada url /books

$this->post('',function (Request $request, Response $response, array $args) {
$json = $request->getBody();
$data = json_decode($json, true);
try {
$sql = "INSERT INTO books (title, isbn) VALUES (:title, :isbn)";
$stmt = $this->db->prepare($sql);
$stmt->execute(array(
'title'=>$data['title'],
'isbn'=>$data['isbn']
));
$id = $this->db->lastInsertId();
$sql = "SELECT * FROM books where id = :id";
$stmt = $this->db->prepare($sql);
$stmt->execute(array('id'=>$id));
$data = $stmt->fetch(\PDO::FETCH_ASSOC);
}catch(PDOException $e){
$data = array('error'=>$e->getMessage());
}
return $response->withJson($data);
});

Untuk mengetesnya di postman, jangan lupa untuk mengubah type request dari get ke post, masukkan data books dengan json pada request body, misal

{“title”:”wiro sableng”,”isbn”:”WR23873687″} 

Jika sukses, dia akan merespons dengan objek yang baru saja kita input, tapi kali ini dengan id, balasan jika berhasil :

{"id": 8,"title": "wiro sableng","isbn": "WR23873687"}

Put /books/{id}

Selanjutnya adalah method untuk mengupdate data, kita akan menggunakan method put

$this->put('/{id}',function (Request $request, Response $response, array $args) {
$json = $request->getBody();
$data = json_decode($json, true);
try {
$sql = "UPDATE books set title=:title, isbn=:isbn where id=:id";
$stmt = $this->db->prepare($sql);
$stmt->execute(array(
'title'=>$data['title'],
'isbn'=>$data['isbn'],
'id'=>$args['id']
));
$sql = "SELECT * FROM books where id = :id";
$stmt = $this->db->prepare($sql);
$stmt->execute(array('id'=>$args['id']));
$data = $stmt->fetch(\PDO::FETCH_ASSOC);
}catch(PDOException $e){
$data = array('error'=>$e->getMessage());
}
return $response->withJson($data);
});

Lalu kita coba test di postman, pilih method put, dengan url localhost:3000/books/8 jangan lupa inputkan request body berupa data yang ingin kita timpakan ke id tersebut, misal

{“title”:”wiro sabyan”,”isbn”:”0202020220″} 

Delete /{id}

Sesuai namanya, kita akan menghapus data menggunakan method ini, setelah menghapus data kita akan menampilkan return berupa status / pesan data telah dihapus

$this->delete('/{id}',function (Request $request, Response $response, array $args) { 
try{
$sql = "DELETE FROM books where id = :id";
$stmt = $this->db->prepare($sql);
$stmt->execute(array('id'=>$args['id']));
}catch(PDOException $e){
$result = array('error'=>$e->getMessage());
}
return $response->withJson(array('status'=>'ok','message'=>'data has been deleted'));
});

Gunakan method delete pada postman dengan url localhost/books/8. Setelah menjalankan method delete, kita bisa cek semua data kita, apakah data yang kita hapus benar-benar terhapus dengan mengunjungi method get /books.

Semoga bermanfaat. Happy coding 🙂

TINGGALKAN KOMENTAR

Please enter your comment!
Please enter your name here