Showing posts with label php. Show all posts
Showing posts with label php. Show all posts

Tuesday, July 12, 2022

Sistem rekomendasi Content-based Filtering menggunakan PHP - MySQL (part 2)

Artikel berikut ini merupakan kelanjutan dari posting sebelumnya tentang implementasi sistem rekomendasi berbasis konten (Content-based filtering Recommender System) pada PHP. Silahkan bisa menyimak terlebih dahulu artikel bagian pertama disini: Sistem rekomendasi Content-based Filtering menggunakan PHP - MySQL (part 1).

Pada project ini, saya menggunakan library Sastrawi untuk melakukan pre-processing data, dan menggunakan library Nette/Database untuk akses ke database mysql, bisa anda cek dokumentasi lengkap di sini: https://doc.nette.org/en/database/core. Dengan menggunakan composer, kita bisa tambahkan code berikut di file composer.json:

{
"require": {
"sastrawi/sastrawi": "^1.2",
"nette/database": "^3.1"
}
}


Kemudian bisa dijalankan perintah composer update pada terminal untuk mendownload beberapa library diatas ke project kita.

Pertama kita siapkan class di PHP untuk menghitung TF-IDF dan Cosine similarity seperti yang sudah dibahas di artikel bagian 1. Kali ini, saya menggunakan nama class Cbrs dan nama file disesuaikan menjadi Cbrs.php. Berikut ini kode lengkap dari class tersebut.

Selanjutnya, kita siapkan file index.php untuk menampilkan daftar list hotel secara random dari tabel di database. Untuk tampilan HTML digunakan Bootstrap CSS supaya lebih rapi. Dan pada bagian akhir, kita buat file detail.php dimana akan menampilkan 1 hotel yang dipilih, dan kemudian akan di cari similarity/kesamaan dari sejumlah hotel dengan score paling besar berdasarkan id hotel yang dipilih tersebut.

Pada kode diatas, terdapat function pre_process() dan get_hotel_detail(), dimana kegunaan fungsi pertama untuk melakukan pembersihan data sebelum masuk ke class perhitungan TF-IDF dan cosine similarity di class Cbrs dan fungsi kedua untuk menampilkan detail hotel berdasarkan parameter id. Variabel $n digunakan untuk menyimpan jumlah item rekomendasi yang akan ditampilkan (top-n). Dan pada bagian perulangan variabel $r ditambahkan keyword continue; untuk menghilangkan item kunci, dimana nilainya = 1 dikarenakan menghitung similarity dari item yang sama. Selain itu, digunakan juga keyword break; untuk keluar dari perulangan jika jumlah n rekomendasi sesuai dengan variabel $n.

Tampilan antar muka detail hotel dan rekomendasi 8 item (beserta score similarity)

Jika anda membutuhkan kode lengkap dari project diatas beserta file database sql, silahkan tuliskan alamat email di bagian komentar. InshaAllah akan segera saya kirimkan ke email anda.


Friday, July 8, 2022

Sistem rekomendasi Content-based Filtering menggunakan PHP - MySQL (part 1)

Sebelum menyimak dan mengikuti tutorial dalam membangun sistem rekomendasi berbasis konten (content-based filtering) di artikel ini, sebaiknya membaca terlebih dahulu 2 artikel yang saya tulis sebelumnya, karena hal tersebut berkaitan dan saya menggunakan case/domain yang sama seperti sebelumnya.

Berikut artikel yang berkaitan dengan posting ini:

  1. Preprocessing text Bahasa Indonesia di PHP dengan Sastrawi
  2. Menghitung TF-IDF menggunakan kode PHP
Domain item yang akan saya bahas disini adalah data hotel, seperti pada artikel-artikel sebelumnya. Tahapan dalam membangun aplikasi sistem rekomendasi ini diawali dengan melakukan preprocesisng menggunakan library Sastrawi yang ada di PHP, dilanjutkan dengan melakukan pembobotan kata menggunakan metode TF-IDF dan terakhir adalah mengukur jarak kedekatan(similarty) dari 1 item ke item lainnya.

Pada artikel ini akan saya bahas bagian terakhir, yaitu menghitung similarity antar item menggunakan metode cosine similarity dan membuat top-n rekomendasi berdasarkan item yang dipilih. Kedua tahapan sebelumnya sudah ada di artikel yang saya sertakan link diatas 👆.

Cosine similarity

Untuk memudahkan pemahaman cara kerja cosine similarity, saya akan gunakan Spreadsheet untuk perhitungan nya dengan menggunakan contoh data hotel seperti pada case di artikel sebelumnya. Pada contoh data ini terdapat 3 dokumen dan 10 terms/kata yang akan kita ujicoba untuk perhitungan dan sudah kita beri bobot untuk masing-masing terms. Selanjutnya untuk menghitung similarity 2 item kita gunakan rumus berikut:

Pertama kita akan hitung terlebih dahulu sumproduct dari item A dan B, selanutnya kita bagian dengan perkalian panjang vektor A dan B. Pada Spreadsheet kita bisa gunakan formula SUMPRODUCT() sendangkan panjang vektor kita gunakan rumus SQRT(SUMSQ()).

Hasil dari pembobotan kata pada setiap dokumen

Berikut ini contoh rumus dari file Spreadsheet diatas untuk mencari similarity dari item d1 dan d2:

=SUMPRODUCT(C17:L17,C18:L18)/(SQRT(SUMSQ(C17:L17))*SQRT(SUMSQ(C18:L18)))

Selanjutnya kita bisa buat matrix untuk menghitung setiap dokumen. Score cosine similarity mempunyai rentang dari 0 - 1, yang artinya nilai mendekati 1 bearti kedua item tersebut sangat mirip, sedangkan mendekati 0 artinya kedua item tidak mirip. Perhitungan kedua item yang sama akan menghasilkan nilai 1.

Matrix perhitungan similaity antar item

Silahkan tuliskan alamat email anda di bagian komentar jika ingin mendapatkan file Spreadsheet untuk perhitungan seperti pada gambar diatas.

Cosine similarity di PHP

Berdasarkan perhitungan dari Spreadsheet dan rumus diatas, di PHP kita dapat membuat fungsi baru untuk mencari similarity antara 2 item dan mengurutkan hasil kemiripan score dari yang paling besar.

# Fungsi menghitung similarity ke semua dokumen
# parameter input = id dari item
public function similarity($d1){
    $score = [];
    foreach($this->doc_weight as $ndw => $w){
        $score[$ndw] = $this->cosim($d1, $ndw);
    }
    
    arsort($score);
    return $score;
}

private function cosim($d1, $d2){
    $dw = $this->doc_weight;
    
    # sum square dari 2 doc
    $dw1 = $dw[$d1];
    $dw2 = $dw[$d2];
    
    $dx = 0;
    $dx1 = 0;
    $dx2 = 0;
    
    foreach($this->corpus_terms as $t => $terms){
        $dx += $dw1[$t] * $dw2[$t];
        $dx1 += $dw1[$t]*$dw1[$t];
        $dx2 += $dw2[$t]*$dw2[$t]; 
    }
    
    return round($dx / (sqrt($dx1) * sqrt($dx2)), 4);
    
}

Kedua fungsi diatas merupakan kelanjutan kode dari Tfidf.php pada artikel berikut ini: Menghitung TFIDF menggunakan kode PHP, yang perlu anda tambahkan di class Tfidf. Selanjutnya pada file index.php anda bisa menjalankan fungsi tersebut dengan menggunakan parameter index array sebagai dokumen kunci yang akan dicari kemiripannya.

$hotel = array();
$hotel[1] = "Hotel Modern yang Terjangkau";
$hotel[2] = "Akomodasi modern, nyaman, dan tenang";
$hotel[3] = "Hotel bintang 3 yang mewah namun dengan harga yang terjangkau";

foreach($hotel as $key=>$item){
    $hotel[$key] = pre_process($item);
}

$cbrs = new Tfidf();
$cbrs->create_index($hotel);
$cbrs->idf();
$w = $cbrs->weight();  
$r = $cbrs->similarity(1);

print '<pre>';
print_r($r);
print '</pre>';

Dari kode diatas akan menghasilkan score kemiripan dari dokumen kunci(index array) sesuai dengan parameter yang di inputkan pada fungsi similarity.

Array
(
    [1] => 1
    [3] => 0.2062
    [2] => 0.1203
)

Pada posting berikutnya akan saya bahas detail bagaimana menggunakan dataset yang sudah tersimpan di tabel pada database MySQL untuk menampilkan item rekomendasi dari dokumen yang kita pilih.



Tuesday, April 2, 2019

Membangun REST API dengan Laravel dalam 5 menit

Beneran 5 menit bisa jadi? Serius bisa koq 😉 Hehe.. 

Saya mulai mengenal laravel setelah mendapatkan kerjaan dari salah satu vendor telekomunikasi terbesar di Indonesia untuk memaintenance sistem yang sudah ada sekitar 2 tahun yang lalu. Selain itu beberapa programmer web jaman now ga keren klo belum menggunakan laravel untuk mengembangkan web di PHP. 

Dan semester ini saya diberi amanah untuk mengajar matakuliah Hybrid Web Development, dimana mahasiswa nantinya akan membuat suatu aplikasi back-end menggunakan REST API dan front-end menggunakan javascript, dan di bagian back-end akan digunakan framework laravel untuk membangun REST API tersebut.

Laravel dengan fitur Migration dan Eloquent-nya memungkinkan kita dengan cepat membangun aplikasi berbasis web. Masalah waktu 5 menit ini sebenarnya banyak faktor yang mempengaruhi, mungkin bisa lebih cepat lagi atau malah jauh lebih lama. Saya sendiri merasakan kemudahan dan kecepatan dalam membangun aplikasi menggunakan laravel dibanding beberapa framework yang lain. Jadi 5 menit ini sebenarnya hanya kiasan saja 👌

Untuk laravel bisa didownload menggunakan composer, saat artikel ini ditulis versi laravel yang digunakan adalah 5.8.3.

Bagi yang belum tau composer, bisa menuju ke artikel ini untuk penjelasannya. Berikut perintah untuk membuat project baru laravel dengan composer. Tuliskan pada command atau terminal.

$ composer create-project laravel/laravel laravel-api --prefer-dist

Silahkan menunggu proses download file-file laravel, lama tidaknya tergantung koneksi internet anda ya.. Selanjutnya kita akan membuat file Model Mhs beserta migration-nya, silahkan dilanjutkan dengan menulis perintah ini di command atau terminal.
$ php artisan make:model Mhs -m

Pada perintah diatas, selain membuat model, kita gunakan tambahan parameter -m yang berfungsi untuk membuat file migration. Buka file migration pada direktori database/migrations/2019_04_02_22551_create_mhs_table.php, kemudian tambahkan code berikut ini pada method up():

Schema::create('mhs', function (Blueprint $table) {
 $table->bigIncrements('id');
 $table->string('nim');
 $table->string('nama');
 $table->string('email');
 $table->string('hp');
 $table->timestamps();
});

Pada tutorial ini akan digunakan 1 tabel mhs dengan field seperti pada code diatas, yaitu: id, nim, nama, email, hp. Fungsi timestamp() disini otomatis akan men-generate field created_at dan updated_at pada tabel. Selanjutnya buka file app/Mhs.php dan lengkapi code untuk model Mhs seperti dibawah ini:

class Mhs extends Model{
    protected $fillable = ['nim', 'nama', 'email', 'hp'];
}

Variabel $fillable yang digunakan diatas merupakan salah satu variabel spesial pada Eloquent di laravel yang burfungsi untuk mendaftarkan field/kolom pada tabel yang dapat digunakan untuk insert atau update data. Selain itu terdapat juga variabel $hidden, $visible, $appends, dll. Lebih detailnya bisa menuju ke artikel id-laravel.com berikut ini.

Setelah melengkapi kedua code diatas, selanjutnya jalankan perintah migrasi di command atau terminal sebagai berikut:
$ php artisan migrate

Seeding pada laravel adalah fitur untuk melakukan pengisian data pada tabel di database. Disini akan digunakan library Faker yang dapat melakukan insert ke tabel menggunakan data testing, jadi mempermudah programmer tentunya dalam melakukan pengembangan sistem.

Untuk men-generate code Seeder tersebut silahkan tuliskan perintah berikut ini di command atau terminal:
$ php artisan make:seeder MhsTableSeeder

Dari hasil execute perintah diatas akan ter-generate file di /database/seeds/MhsTableSeeder.php. Pada function run() tambahkan code berikut ini untuk melakukan insert data menggunakan Faker.

$faker = Faker::create();
 foreach(range(0,10) as $i){
  DB::table('mhs')->insert([
  'nim' => $faker->randomNumber(8),
  'nama' => $faker->name,
  'email' => $faker->email,
  'hp' => $faker->phoneNumber
 ]);
}
Untuk menjalankan proses insert data testing ke dalam tabel gunakan perintah dibawah ini pada command atau terminal
$ php artisan db:seed --class=MhsTableSeeder

Dan cek menggunakan db manager untuk memastikan bahwa data-data tersebut telah ter-create


10 data telah ditambahkan melalui seeder


Tahap selanjutnya adalah membuat file controller untuk API dan memetakan end-point dengan menggunakan route di laravel. Pertama jalankan perintah untuk membuat file controller di command atau terminal.
$ php artisan make:controller MhsController

Berikutnya buka file routes/api.php dan tambahkan code dibawah ini untuk memetakan end-pont yang akan digunakan.

Route::get('mhs', 'MhsController@index');
Route::get('mhs/{id}', 'MhsController@show');
Route::post('mhs', 'MhsController@store');
Route::put('mhs/{id}', 'MhsController@update');
Route::delete('mhs/{id}', 'MhsController@delete');

Dan terakhir, buka file app/Http/Controllers/MhsController.php. Sesuaikan dengan code berikut ini:

use Illuminate\Http\Request;
use App\Mhs;

class MhsController extends Controller
{
    public function index(){
        return Mhs::all();
    }
 
    public function show($id){
        return Mhs::find($id);
    }

    public function store(Request $request){
        return Mhs::create($request->all());
    }

    public function update(Request $request, $id){
        $mhs = Mhs::findOrFail($id);
        $mhs->update($request->all());

        return $article;
    }

    public function delete(Request $request, $id){
        $mhs = Mhs::findOrFail($id);
        $mhs->delete();

        return 204;
    }
}

Tahap ini telah berhasil dibuat 5 buah end-point. InshaAllah pada artikel berikutnya akan saya bahas pengujian tiap-tiap end-point menggunakan tools postman.

Selamat mencoba, Semoga bermanfaat..

Wednesday, October 3, 2018

Deploy Aplikasi menggunakan PHPloy

Bagi pengembang aplikasi web saat ini, baik back-end, front-end ataupun fullstack, seharusnya sudah tidak menggunakan tools FTP Client untuk deploy aplikasi ke server. Sudah tidak lazim drap and drop file dari window satu ke window yang lainnya. Atau tidak perlu lagi menggunakan lagi cpanel file manager untuk upload file zip untuk membuat aplikasinya live di server.

Hehe.. ini menurut pendapat saya looh dan mungkin juga banyak yang setuju koq.. ✌😉

Pengertian deployment di web adalah proses memindahkan kode (terupdate) ke live server. Dan menurut Baki Goxhaj dalam blognya di wplancer.com, banyak developer paham tentang proses ini dan ternyata hanya sedikit orang saja yang melakukanya dengan cara yang professional.

Sudah ada beberapa tools untuk memudahkan proses deployment tersebut, seperti menggunakan Jenkins atau Capistrano. Sebelumnya saya juga menggunakan tools online seperti FTPloy dan Deploybot, tapi disini ada kelemahan yaitu hanya menyediakan 1 project saja untuk deployment, lebih dari itu maka silahkan menyesuaikan dengan tarif yang ada 😅


Untuk menggunakan PHPloy ini pastikan project anda sudah menggunakan Git sebagai code collaboration. Konsep kerja PHPloy ini adalah melakukan perubahan(upload/delete) file-file yang telah ter commit pada git ke server, sangat simple dan mudah digunakan. Proses deployment PHPloy menggunakan command pada terminal dengan perintah-perintah yang telah didefinisikan.

Untuk memulai menggunakan PHPloy anda bisa mengikuti langkah-langkah berikut ini:
  1. Gunakan composer dengan menambah paket di file composer.json. Belum tau apa itu composer? silahkan pelajari artikel di link berikut ini.
    {
        "require": {
            "banago/phploy":"4.8.5"
        }
    }
    
  2. Selanjutnya dari terminal jalankan perintah:
    composer update
    
  3. Copykan file /vendor/banago/phploy/bin/phploy ke root project anda
  4. Buat file baru dengan nama phploy.ini, yang berisi kode konfigurasi berikut
    [production]
    user = username
    pass = s0m3p455w0rd
    host = yourdomain.com
    path = /public_html/folder
    exclude[] = 'phploy'
    exclude[] = 'phploy.ini'
    exclude[] = 'composer.json'
    exclude[] = 'composer.lock'
    port = 21
    passive = true
    
  5. Setelah itu cek apakah phploy dan konfigurasinya sudah sesuai dengan menjalankan perintah di terminal
    [unix/mac]
    ./phploy -v
    
    [windows]
    php phploy -v
    
    [akan menampilkan seperti dibawah ini]
    C:\Users\Arif Laksito\www>php phploy -v
    -------------------------------------------------
    |                     PHPloy                    |
    -------------------------------------------------
    PHPloy v4.8.5
  6. Setelah melakukan perubahan kode-kode program, jalankan perintah git add dan git commit.
  7. Untuk melihat file-file apa saja yang akan di deploy, gunakan perintah berikut di terminal
    ./phploy -l
    
  8. Dan terakhir untuk proses deploy ketikan perintah phploy. Selanjutnya akan muncul proses deploy di terminal, silahkan menunggu proses tersebut.
    ./phploy
    
  9. Jika dirasa ingin membatalkan proses deployment tersebut bisa dilakukan rollback dengan perintah:
    ./phploy –rollback
    
Menurut saya tools ini sangat simple dan mudah sekali dalam penggunaan atau konfigurasinya. Bahkan PHPloy ini bisa juga digunakan untuk deployment ke beberapa server sekaligus.

Wednesday, August 15, 2018

Berkenalan dengan Composer

Pada artikel saya sebelumnya tentang Membangun REST API menggunakan Slim, saya menggunakan suatu package & dependencies manager yang akan saya bahas di posting kali ini.

Beberapa tahun terakhir ini, konsep pemrograman di php mengalami perubahan yang cukup membuat banyak programmer beralih karena kemudahannya. Dengan adanya suatu dependencies manager yang populer akhir-akhir ini yaitu composer, konsep pemrograman di php jadi lebih terstruktur dan rapi.

Dengan composer dan autoload-nya serta namespace, kita bisa bebas mengakses file-file php tanpa harus ribet meng-include atau me-require semua file atau class yang kita butuhkan, autoload dari composer sudah melakukan semua itu out of the box. Sehingga OOP dalam php benar-benar nyamaan.

Kemampuan composer dalam hal dependencies sangat membantu programmer saat menggunakan suatu paket tertentu dimana paket tersebut membutuhkan paket-paket lainnya juga. Secara otomatis composer akan mengatur dan menyesuaikan ketergantungan suatu paket dengan paket lainnya juga.

Paket yang dapat digunakan bisa diakses di https://packagist.org. Sampai saat artikel ini ditulis, jumlah paket yang sudah terdaftar adalah 191, 491.

Berikut ini beberapa kendala yang bisa diselesaikan menggunakan composer:
  1. Mengatasi masalah denpendencies PHP package,
  2. Mengatasi masalah include file dengan autoload,
  3. Mengatasi masalah update paket.

Instalasi Composer

Composer membutuhkan PHP dengan versi 5.3.2+. Berikut cara instalasi di Sistem Operasi Linux & Mac:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Sedangkan untuk pengguna Windows dapat melakukan instalasi dengan download file instaler dari alamat di https://getcomposer.org/Composer-Setup.exe.

Setelah instalasi selesai, anda bisa cek dengan menjalankan perintah berikut di command atau terminal:
composer -V

Penggunaan

Misalkan kita ingin menampilkan tanggal dengan berbagai macam format, disini sudah terdapat paket yang sering digunakan yaitu Carbon. Kita bisa mengetahui nama paket dengan melakukan pencarian pada web https://packagist.org. Setelah menemukan nama paketnya (contohnya disini: nesbot/carbon), kita jalankan perintah berikut di command atau terminal untuk mennggunakannya:
composer require nesbot/carbon
Maka composer akan otomatis mendownload paket tersebut dan membuat file baru composer.json, composer.lock dan folder vendor.

Perhatikan file composer yang otomatis ter-create tadi.
{
    "require": {
        "nesbot/carbon": "^1.33"
    }
}
Disitu terdapat informasi dalam format json dimana kita menggunakan paket nesbot/carbon dengan versi 1.33, jika ingin menambahkan paket yang lain, kita tinggal edit file tersebut dan jalankan perintah composer update.

Selanjutnya kita bisa buat satu file php, misal kita simpan dengan nama index.php. Pada baris awal kita tambahkan fungsi require autoload.php yang otomatis sudah menyertakan semua paket yang kita butuhkan. Kemudian kita bisa gunakan fungsi use untuk instansiasi class nya. Detail code di index.php seperti berikut ini:
<?php require 'vendor/autoload.php';

use Carbon\Carbon;

$date = Carbon::createFromDate(1990, 11, 19);
$now  = Carbon::now();

$str = "Usia anda saat ini %y tahun, %m bulan dan %d hari\n";
printf($date->diff($now)->format($str));
Hasil dari code diatas akan menampilkan usia yang dihitung dari tanggal pada variable date dengan selisih hari ini yang ditampilkan dalam format tahun, bulan dan hari. Lebih detail fitur-fitur yang ada di paket carbon silahkan pelajari pada dokumentasinya di tautan https://carbon.nesbot.com/docs/.

Menambahkan paket baru

Untuk menambah paket yang lainnya, silahkan edit file composer.json dan tambahkan nama paket yang akan digunakan. Contohnya akan ditambahkan paket untuk membuat qr-code dengan nama endroid/qr-code, berikut code di file composer.json setelah diupdate:
{
    "require": {
        "nesbot/carbon": "^1.33",
        "endroid/qr-code": "^3.2"
    }
}
Kemudian jalankan perintah berikut di command atau terminal:
composer update
Setelah proses download dan instalasi secara otomatis dari composer sukses, maka paket tersebut siap digunakan. Untuk menampilkan qr-code menggunakan paket tersebut sama seperti contoh sebelumnya, disini anda tidak perlu lagi meng-include / me-require nama paket yang baru, karena di fungsi require vendor sudah mengakomodasi semua paket yang terdownload melalui composer. Anda tinggal menginstansiasi saja nama class nya menjadi object di code php.

Berikut contoh code untuk menampilkan qr-code yang berisi suatu text "Hello World":
<?php require 'vendor/autoload.php';

use Endroid\QrCode\QrCode;

$qrCode = new QrCode('Hello World');

header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();
Kesimpulan dari artikel ini, silahkan segera beralih menggunakan composer bagi programmer php yang belum, karena seperti dituliskan diatas ada 3 kemudahan yang didapatkan saat anda mulai menggunakannya.

Yang penting segera dicoba degh 😉

Tuesday, August 14, 2018

Membangun REST API menggunakan Framework Slim PHP

Pada salah satu project penelitian saya tentang sinkronisasi database, dimana terdapat 2 aplikasi yaitu: rest api dan android, saya berkesempatan menggunakan Framework Slim PHP untuk membangun aplikasi rest api. 

Ternyata Slim menawarkan kemudahan dalam membangun rest api. Detailnya bisa langsung menuju ke official web dari Slim di tautan berikut: https://www.slimframework.com/

Untuk memulai menggunakan Slim cukup mudah, silahkan dari command atau terminal ketikan perintah berikut ini:
composer require slim/slim "^3.0"
Jika komputer anda belum terinstal composer, silahkan bisa download dari tautan berikut ini.

Setelah anda jalankan perintah composer tersebut, maka akan akan ter-create folder /vendor dan file composer.json dan composer.lock.

Selanjutnya kita buat 1 file index.php dengin menambahkan code seperti dibawah ini:
<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';
$app = new \Slim\App();

$app->get('/', function (Request $req,  Response $res, $args = []) {
    return $res->getBody()->write('Hello Slim Framework');
});

$app->run();
Anda bisa cek hasilnya melalui browser ke alamat project yang anda buat, atau bisa juga menjalankan menggunakan internal web server dari php dengan menjalankan perintah berikut ini melalui command atau terminal pada path project anda:
php -S localhost:8090
Dan akses melalui browser di alamat http://localhost:8090

Untuk mendapatkan output dalam format json, bisa anda ubah pada baris ke 10 dengan code berikut ini:
$data = array("hello" => "slim framework", "version" => "3.10");
return $res->withJson($data);
Maka akan diperoleh hasil seperti berikut ini:
{"hello":"slim framework","version":"3.10"}
Untuk menambahkan end-point yang lain pada rest api anda tinggal menambahkan code seperti pada baris-9 sampai baris-11 pada contoh code sebelumnya. Misalkan berikut ini end-point yang akan membaca parameter dari alamat web
$app->get('/name/{you}', function (Request $req,  Response $res, $args = []) {
    $name = $args['you'];
    $data = array("hello" => $name, "message" => "have a nice day");
    return $res->withJson($data);
});
Dan anda bisa melihat hasilnya dengan akses ke alamat http://localhost:8090/name/arif laksito, maka akan terlihat hasilnya di halaman browser. Perhatian, untuk web server Apache atau Nginx anda perlu menambahkan file .htaccess pada project anda supaya alamat web tersebut dapat dikenali. Berikut ini script dari file .htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Selain method GET seperti pada contoh diatas, anda bisa juga menggunakan method yang lainnya seperti POST, PUT, DELETE. Begitulah cerita saya dalam menggunakan Slim framework, lebih detail lagi anda bisa menuju ke halaman dokumentasi/manual dari Slim framework yang sudah cukup lengkap di https://www.slimframework.com/docs/.

Untuk contoh file project yang menggunakan Slim bisa anda dapatkan/clone di github saya dengan alamat https://github.com/ariflaksito/web-data-sync. Pilih di branch basic, karena branch master sudah terupdate fitur menggunakan Eloquent dan Middleware untuk validasi token. InshaAllah akan saya share juga artikel tentang penggunaan Eloquent dan Middleware tersebut.

Semoga bermanfaat, jangan lupa untuk dicoba yaa