Membuat REST API mudah dan cepat dengan SLIM 4 php Microframework




Sampai saat ini sebenarnya aku masih menggunakan Slim 3, bukannya sudah terlanjur cinta. Tapi jujur saja aku sudah mager banget. Bahkan api servicenya sudah kayak gado-gado. Judulnya infobed, tapi isinya ada jadwal dokter hehe. Slim 3 sendiri sudah lama tidak dikembangkan. Karena sudah ada penerusnya, yaitu Slim 4. Biar kekinian aku mau mencoba menginstall slim 4. Lebih baik terlambat dari pada tidak sama sekali. 

Sekilas tentang Slim 4

Slim 4 dirilis tahun 2019, dan sekarang sudah 2021. buat ukuran framework sebenarnya framework ini sudah old banget ya? bandingkan saja dengan framework sebelah yang sudah level eh versi 8. Tapi dia nggak sendiri kok. User YII malah masih pakai versi 2 hehe. 

Sebenarnya buat programmer mager, masalah versi bukan issue utama. Justru kami lebih senang dengan yang jarang upgrade. Soalnya setiap rilis baru, bisa saja kan ada yang berubah di struktur frameworknya. Ntar diupdate bukannya lebih stabil, eh malah harus ketik ulang.

Slim 4 adalah framework mini yang digunakan untuk membuat service rest-api. Fungsinya cuma itu, jadi jangan berharap lebih. Kalau mau yang lebih pakai saja laravel atau code iginiter. 

Dokumentasi SLIM 4

Yang aku suka dari slim adalah dokumentasinya yang sederhana dan lengkap. Eh emang dokumentasinya mau dibikin seberapa wong cuma buat dipakai bikin rest tok hahaha. 

sobat bisa mengakses dokumentasi SLIM 4 pada link dibawah ini:
Slim 4 Documentation - Slim Framework

Instalasi SLIM 4

Langkah-langkah instalasi Slim 4 adalah begini:

1. Siapkan Komposer.

Sebelum menginstall Slim 4, sobat harus punya composer dulu. Kalau belum punya silahkan downlod dulu di:

Composer (getcomposer.org)

Kalau yang pakai windows mending langsung download yang installer. Nggak usah sok-sokan pakai yang terminal kalau ujung-ujungnya copy paste.

2. Install SLIM

    a. Buat folder baru untuk slim, misalnya rest-api

    b. Buka folder rest-api di visual code lewat open folder

open folder visual code


   c. Arahkan ke folder rest-api yang baru dibuat tadi.

Masuk Folder source


  d. Aktifkan terminal di visual code biar kekinian dan kelihatan keren.

menu terminal

2. Install SLIM 4

ketikkan magic word dibawah ini:

composer require slim/slim:"4.*"

tunggu sampai prosesnya selesai.

proses ini akan menciptakan file composer.json, composer.lock dan folder vendor beserta isinya. 

3. Install implementasi PSR 7 dan server request creator

Sebelum menjalankan Slim 4, install dulu PSR 7, dikemudian hari kita akan sering menggunakan perintah-perintah dengan standart PSR 7.

Install PSR-7

composer require slim/psr7


Nyholm PSR-7 dan Nyholm PSR-7 Server

composer require nyholm/psr7 nyholm/psr7-server


Guzzle PSR-7 dan Guzzle HTTP Factory

composer require guzzlehttp/psr7 http-interop/http-factory-guzzle

Lamina Diactoros

composer require laminas/laminas-diactoros

4. Buat files index.php di folder public

Untuk best practicenya sebaiknya sobat menggunakan standart terkini, yaitu dengan menempatkan aplikasinya di folder public. Duh semua kok jadi berasa kayak laravel. Bukannya niru laravel, tetapi standart keamanannya memang seperti itu.

Struktur file dan foldernya jadi seperti ini:



Langsung saja kopas kodingan dibawah ini ke file index.php:

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

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->run();

5. Test Service

Setelah selesai saatnya kita test servicenya. Buka browser kemudian masukkan alamat servicenya:

http://localhost/rest-api/public

dan lihat hasilnya, pasti error yang bunyinya seperti ini "Fatal error: Uncaught Slim\Exception\HttpNotFoundException: Not found. in bla bla bla".

Ternyata slim 4 tidak bisa berjalan di dalam subdirektory. Jadi harus di rootnya langsung.

Bagaimana cara mengatasinya? 

dilansir dari blognya mas Rob Allens, tepatnya diartikel ini, Running Slim 4 in a subdirectory – Rob Allen's DevNotes (akrabat.com). Ternyata SLIM 4 bisa jalan di subdirektori.

Disitu dijelaskan penelusuran beliau, kalau disini aku langsung ke penyelesaian saja. 

a. Buat file .htdocs di folder rest-api, lalu masukkan source ini

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

b. Tambahkan $app->setBasePath(namafolder)


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

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();
$app->setBasePath('/rest-api/public');
$app->get('/', function (Request $request, Response $response, $args) { $response->getBody()->write("Hello world!"); return $response; });
$app->run();       

Sekarang coba browsernya direfresh. Tralaaaaa

sudah nggak error

Di  SLIM 4, nggak cuma SLIM 4 sih, slim sebelumnya juga sama, sebuah alamat/end point api dibungkus didalam fungsi. Tepatnya dibarisan kode ini:

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

MEMBUAT SERVICE GET 

Service get digunakan untuk mengambil data. Sebenarnya pada contoh diatas kita sudah membuat service get. Sekarang kita buat yang lebih lengkap lagi.
 

Get Dengan end point selain root

coba kalian perhatikan perintah ini:
$app->get('/', function (Request $request, Response $response, $args) {
 
untuk membuat end pointnya tambahkan parameter/item dibelakang "/".

contohnya seperti ini:
$app->get('/mobil', function (Request $request, Response $response, $args) {
Alamat diatas berarti kamu membuat end point mobil. Sehingga alamat yang diakses seperti ini:

source codenya seperti ini:

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

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();    
$app->setBasePath('/rest-api/public');

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->get('/mobil', function (Request $request, Response $response, $args) {
    $teks = '<strong>Anda mencari mobil?</strong><br>Anda berada ditempat yang tepat.
             Anda bisa mencari beragam mobil disini. Benar disini, <br>
             mobil apa yang anda cari?';
    $response->getBody()->write($teks);
    return $response;
});


$app->run();
     

 sekarang masuk ke browser dan masukkan alamat ini:

http://localhost/rest-api/public/mobil
 

Get Dengan Parameter

kamu juga bisa memberikan parameter di get. Karena get menggunakan alamt url, maka parameternya nanti kita tambahkan di url. 
Misalnya kamu mau memberikan pilihan pada user untuk memilih mobil sport atau biasa, buatlah get baru dibawah fungsi get "/mobil". contoh kodenya seperti ini:
 
Untuk menambahkan parameter di get, kamu tinggal menambahkan "/{}" di end pointnya. Setiap parameter di dahului dengan "/". 
contohnya seperti ini:
   "/endpoint/{parameter1}/{parameter2}/{parameter3}"
parameter akan disimpan di array $args
contoh sourcenya seperti ini:

// get dengan parameter
$app->get('/mobil/{jenismobil}', function (Request $request, Response $response, $args) {
    $jenismobil = $args['jenismobil'];
    $teks = '<strong>Anda mencari mobil '.$jenismobil.' ?</strong><br>Anda berada ditempat yang tepat.
             Kami menyediakan jenis mobil '.$jenismobil.', <br>
             mobil apa yang anda cari?';
    $response->getBody()->write($teks);
    return $response;
});

hasilnya seperti ini:
 
hasil get dengan parameter

MEMBUAT SERVICE POST

Selain perintah get, perintah post juga lazim digunakan dalam web service. Jika perintah GET untuk mengambil data. Perintah POST digunakan untuk mengirim data. Perintah POST digunakan untuk mendapat parameter dari sebuah form.
Membuat service post sama saja dengan service get. Perbedaannya hanya di verb post.
contoh kodenya seperti ini:
// get dengan parameter
$app->post('/belimobil', function (Request $request, Response $response, $args) {
    $data = $request->getParsedBody();
    $teks = '<strong>Terima Kasih sudah membeli mobil '.$data['jenis'].' '.$data['nama'].' <br>Anda berada ditempat yang tepat.
             Kami memiliki  '.$data['jenis'].' '.$data['nama'];            
    $response->getBody()->write(json_encode($teks));
    return $response;
});

Untuk mengambil parameter-parameter posting, gunakan fungsi getParsedBody. hasil testing di postman seperti ini:
test post dengan slim 4


Selamat, sobat sudah membuat service rest-api sederhana. 




No comments for "Membuat REST API mudah dan cepat dengan SLIM 4 php Microframework"