Dynamic Blinkie Text Generator at TextSpace.net

Feedburner

I heart FeedBurner

Selasa, 02 Januari 2018

Instalasi Framework Laravel Lumen

Apa itu Lumen?

Untuk tau apa itu lumen yang pertama kita lakukan adalah berselancar di official web dari lumen ini. Silahkan Buka http://lumen.laravel.com
The stunningly fast micro-framework by Laravel.
Diatas adalah penjelasan singkat dari lumen, Emm… menarik bukan? Ya, Lumen ini adalah sebuah micro-framework dari laravel yang lebih di khusukan untuk membuat web API, dimana komponen didalam nya sama seperti laravel namun bayak komponen dari laravel yang di hilangkan.
Kenapa sih laravel ini membuat micro-framework Lumen ini?
Menurut saya begini, jadi laravel itu buanyak sekali fitur — fitur nya dan dari banyaknya fitur yang ada itu justru membuat laravel itu menjadi lambat, nah lumen ini di buat dengan mengutamakan speed dan simplify dari fitur — fitur yang ada di laravel. Nah seberapa cepat sih lumen ini kita akan bahas lebih dalam lagi.

Kenapa harus membuat web API dengan lumen?

Pertama kali saya melihat lumen itulah pertanyaan pertama yang timbul di benak saya. Yah karena saya terbiasa pake full framework laravel di tambah lagi fitur route baru laravel yang support untuk api. Tapi saya penasaran denga lumen ini, untuk memenuhi hasrat penasaran saya akhir nya saya coba buka official web lumen ini. Setelah beberapakali scroll saya menemukan satu alasan yang cukup menarik.
Yah disamping adalah grafik Benchmark dari lumen dengan beberapa api framework PHP yang lain. Cukup menarik bukan, lumen bisa menangani 1900 request perdetik. Kalau mau coba benchmarking sendiri bisa baca caranya disini.

Persiapan membuat web API dengan lumen

Ok untuk menggunakan lumen kita perlu menginstall beberapahal package php berikut ini :
  • PHP >= 5.6.4
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
Sama seperti laravel untuk reqruitement nya jika temen — temen sudah pernah install laravel pasti sudah familiar dengan ini.
Kali ini kita akan coba membuat web api ini dengan fitur auth sederhana dimana nanti user akan login dan mendapatkan api_token dimana nanti akan digunakan untuk mendapatkan akses ke api yang kita buat. Kenapa disini saya bahas fitur auth? Yah menurut saya ini cukup penting dalam sebuah web API karna untuk di web API sendiri itu adalah jembatan untuk masuk kedalam sistem dari aplikasi yang kita buat, untuk itu kita perlu melakukan proteksi terhadap akses API yang kita buat.

Membuat project web API Laravel Lumen 5.3

Ok sekarang kita akan membuat project disini kita pakai cara paling mudah menggunakan composer. Silahkan install lumen dengan memjalankan perintah berikut ini :
composer create-project --prefer-dist laravel/lumen lumen-web-api

Konfigurasi Lumen

Setelah selesai install sekarang kita melakukan konfigurasi untuk koneksi database seperti biasa kita lakukan jika menggunakan laravel yaitu di file .env seperti ini :
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:JHdpwwjAk2lQxJtLfvoLxy8D2vQZW8ats0GEYF9GuLaCY=
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=lumen-web-api
DB_USERNAME=root
DB_PASSWORD=alphaomega*9
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
Disini kita menggunakan database mysql dan dengan nama databasenya lumen-web-api.
Selanjutnya kita masuk ke file boostrap/app.php. Disini kita akan mengaktifkan auth dan eloquent. Untuk itu kita perlu menghilangkan komen di beberapa bagian seperti berikut ini :
$app->withFacades();
$app->withEloquent();
$app->routeMiddleware([
    'auth' => App\Http\Middleware\Authenticate::class,
]);

$app->register(App\Providers\AuthServiceProvider::class);
Sekarang buka console masuk ke direktori public dan kita jalankan dengan perintah berikut ini :
php -S localhost:1000
Buka di web browser dan buka http://localhost:1000/ jika sudah tampil Lumen (5.3.0) (Laravel Components 5.3.*) maka kita sudah berhasil melakukan installasi lumen.

Database migration Lumen

Database migration adalah salah satu fitur kesukaan saya dari framework laravel dimana dengan menggunakan database laravel ini kita bisa membuat schema database tanpa kita membuat query mysql yang cukup panjang. OK pada kasus ini kita akan membuat schema untuk user. Di lumen ini juga ada php artisan juga salah satu fitur kesukaan saya dimana artisan kita bisa membuat kelas dengan menggunakan console. Ok langsung kita buat database migrationya dengan menjalankan perintah seperti berikut ini :
php artisan make:migration create_users_table --create=users
Dan kemudian masuk /lumen-web-api/database/migrations/2016_09_17_192026_create_users_table.php dan buat schema seperti berikut ini
Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('username');
            $table->string('email')->unique();
            $table->string('password');
            $table->string('api_token');
            $table->rememberToken();
            $table->timestamps();
            $table->softDeletes();
});
Schema ini standar yang biasa kita gunakan ketika membuat table user. Migration laravel sudah suport banyak fitur dalam membuat schema database untuk mengetahui lebih lanjut bisa baca selengkapnya disini.
Jika sudah selesai dengan membuat schema sekarang kita lakukan migrationya dengan menjalankan peritah berikut ini
php artisan migrate
Jika berhasil maka kita akan mendapar pesan Migration table created successfully. Jika masih belum mendapatkan pesan itu perika lagi codingan teman — teman pasti masih ada yang salah.

Konfigurasi Model

Sudah selesai dengan migration sekarang kita akan melakukan konfigurasi model. Dengan model ini nanti akan mempermudah kita untuk melakaukan query ke database. Silahkan buka file /lumen-web-api/app/User.php. Class ini sudah ada setelah kita menginstall lumen. Untuk memahami lebih banya tentang model ini bisa baca disini. Untuk konfigurasinya seperti berikut ini :
/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
 protected $fillable = [
        'username', 'email', 'password', 'api_token'
 ];
/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
 protected $hidden = [
        'password', 'api_token'
 ];
Dari code di atas yang perlu di perhatikan adalah variable $fillable dimana ini berfungsi memberikan izin colom mana saja dari database users ini yang bisa kita pakai. Dan untuk variable $hidden ini nanti berfungsi agar tidak ditampilkan ketika kita melakukan query untuk mendapatkan semua data dari colom yang ada di database users.

Routing pada Lumen

Sekarang kita bahas sedikit tentang routing pada lumen. Pada dasarnya konsep routing di lumen ini sama dengan laravel. Berikut ini ada sedikit perbedaan routing lumen 5.3 dengan laravel 5.3
  • Lokasi file route app/Http/routes.php
  • Cara mendaftarkan route dengn variable $app->typeroute() (get, post, put, patch, delete, options). Berikut ini contohnya :
Ex. $app->get(‘/’, function () { return ‘Hello World’;});
Selebih nya sama saja temen — temen bisa di perlajari tentang routing ini lebih lanjut disini :
Ok sekarang kita akan coba membut route sesuai kebutuhan dari API yang akan kita buat. Berikut ini route dari web API yang akan kita buat :
$app->get('/', function () use ($app) {
  $res['success'] = true;
  $res['result'] = "Hello there welcome to web api using lumen tutorial!";
  return response($res);
});
$app->post('/login', 'LoginController@index');
$app->post('/register', 'UserController@register');
$app->get('/user/{id}', ['middleware' => 'auth', 'uses' =>  'UserController@get_user']);
Pada line terakhir diatas route nya berbeda, karna disini kita akan mengguanakan middleware dari lumen ini untuk melakukan verifikasi akses token dari user yang akan menggunakan api yang kita buat ini. Unutk lebih lanjut penjelasan tentang middleware ini bisa baca disini :

Controller pada Lumen

Controller pada lumen ini sendiri sama dengan controller yang ada di Laravel dimana ini berfungsi untuk kita gunakan sebagai business logic dari aplikasi yang kita buat.
Untuk membuat controller pada lumen ini sedikit berbeda dengan laravel karna pada lumen ini tidak ada fitur membuat controller dengan artisan. Jadi disini kita membuat file controller secara manual.
Ok yang pertama kita akan membuat controller UserController. Sama seperti di laravel kita membuat file controller di folder app/Http/Controllers/. Berikut ini file UserController nya :
Setelah membuat fungsi untuk daftar kita akan buat class LoginController dimana dengan controller ini kita akan memberikan token kepada user yang akan di gunakan sebagai permission untuk meng akses seluruh aktifitas di dalam API ini. Berikut ini untuk class LoginController nya :

Validasi akses token dengan Middleware

Setelah kita mebuat fungsi untuk login, register dan get user sekarang kita akan buat validasi akses token nya menggunakan middle ware. Ok sebelum lanjut kita bahas sedikit apia itu middleware ini. Temen — temen bisa baca dukmentasi lengkapnya disini mengenai middleware pada lumen ini.
HTTP middleware provide a convenient mechanism for filtering HTTP requests entering your application
Jadi middleware ini adalah fungsi yang dijalankan sebelum request ini sampai ke dalam controller. Nah dengan middleware ini kita akan mengecek apakah user ini mempunyai izin untuk menakses dari API ini.
Nah untuk mengaktifkan middlleware seperti ini :
$app->withFacades();
$app->withEloquent();
$app->routeMiddleware([
    'auth' => App\Http\Middleware\Authenticate::class,
]);

$app->register(App\Providers\AuthServiceProvider::class);
Sebenarnya ini sudah ada di dalam file boostrap/app.php, namun secara default code — code diatas masih di comment jadi kita tidak perlu mengetik ulang untuk mengaktifkan middleware ini cukup uncomment code — code diatas.
Nah pada kasus ini kita akan membuat validasi bagaimana kita mengetahui apakah user ini mendapatkan ijin untuk mengakses api yang kita buat ini. Jadi begini logikanya ketika user melakukan request kita akan cek apakah dia mengirimkan token yang dia punya dan jika iya apakah tokenya itu ada di database. Disini nanti setiap user mempuai akses tokenya masing — masing jadi nanti berbeda — beda token dari setiap usernya.
Untuk itu kita perlu menambahkan code berikut ini pada file app/Http/Middleware/Authenticate.php berikut ini codenya

Providers

Apa itu Providers? Nah providers ini adalah class yang dijalan setelah user berhasil di verifikasi. Jadi jika user telah melakukan login dan mengakses api deng token yang mereka punya kita bisa mendapatkan informasi dari user yang memiliki token tersebut nah dalam hal ini Providers lah yang berperan bagaimana kita mendapatkan data user berdasarkan token ini.
Nah untuk case study kita kali ini akan menggunakan di class app/Providers/AuthServiceProvider.php untuk mendapatkan data user berdasarkan token yang telah di verifikasi. Disini secara default dalam study kita tidak perlu menulis lagi codenya karna disini kita menggunakan metode secara default bawaan lumen ini. Disini saya akan jelaskan sedikit bagaiman itu bekerja.
$this->app['auth']->viaRequest('api', function ($request) {
      if ($request->input('api_token')) {
         return User::where('api_token', 
                      $request->input('api_token'))->first();
      }
});
Nah code di atas adalah code yang berada didalam method boo() dimana boot ini sendiri adalh method yang digunakan untuk mendapatkan data user berdasarkan token yang telah di verifikasi oleh middleware.
Pada kasus ini kita melakukan query kedalam table users berdasarkan api_token yang telah kita terima dari middleware.

Testing API Service

Ok sekarang kita melakukan testing untuk mengetahui apakah API yang kita buat telah berfungsi atau belum. Disini kita akan menggunakan postman untuk melakukan testing nya. Silah kan untuk teman — teman yang belum ada postman bisa download disini.
Di sini saya menggunakan server nginx dan dengan setingan servername nya api, jadi saya bisa mengaksesnya melalui http://api/ silahkan sesuaikan dengan setingan server teman — teman untuk melakukan akses url nya. Kita juga bisa menggunakan server default nya php dengan menjalankan perintah berikut ini :
php -S localhost:1000
Dengan begitu kita akan bisa mengakses ke http://localhost:1000/. Ok untuk test case yang pertama kita akan menguji fungsi untuk register seperti berikut ini :
Sudah selesai register sekarang kita coba untuk login seperti berikut ini, disini kita coba melakukan input login yang salah :
Ok sudah benar dan sekaran case yang benar kita coba.
Ok sekarang kita sudah berhasil login dan mendapatkan api_token dan sekarang kita coba test case untuk menguji apakah akses token sudah berjalan seperti berikut ini :
Yang pertama disini kita membuat case yang salah dan ternyata sudah berjalan proses pengecekanya, sekarang lakukan lagi test case yang benar :
Silahkan lakukan test — test yang lain dan lakukan variasi test — test karna pasti selalu ada permasalahan dalam kondisi yang berbeda dan untuk itu kita perlu melakukan test ya temen — temen. Saran saya untuk melakukan test sebaiknya kita buat input error nya, yah karena test itu sendiri fungsinya untuk mencari error. Dan jangan takut kalau terjadi error karna semakin sering kita menemui error semakin banyak pelajaran yang kita dapatkan dari situ.
Nah cukup disini dulu next artikel kita akan belajar bagaimana membuat operasi CRUD (Create, Read, Update, Delete), yang mana ini adalah hal umum dalam proses API itu bekerja, dan cukup penting saya rasa, so tunggu next artikelnya ya :)
OK sampai disini dulu kalau ada pertanyaan silahkan hubungi saya via facebook atau social media yang lainya.
Untuk project latihan bisa akses source codenya disini

Sumber : https://medium.com/@ocittwo/membangun-web-api-dengan-lumen-5-3-part-1-d6a3522772a4

Tidak ada komentar:

Posting Komentar