Restful API Menggunakan Laravel Framework

Laravel telah dilengkapi fitur untuk membuat backend API, diantaranya:

  • Controller API
  • Passport untuk otentikasi
  • API routes

Pada tulisan kali ini, kita akan membuat backend API sampai user bisa melakukan request access_token. Tanpa berlama-lama, langsung kita buat project baru menggunakan composer dengan mengeksekusi perintah berikut :

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

Kita tunggu proses yang berjalan sampai selesai. Setelah proses selesai, kemudian kita buat 1 buah database baru dengan nama laravel_api. Setelah database selesai kita buat. Selanjutnya lakukan setting koneksi database dengan mengedit file .env mulai baris DB_CONNECTION sampai DB_PASSWORD menjadi seperti berikut :

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:Bh5GhWTG8/ympHwm19Jje6SQMGy8u8pniEWyafnCCFw=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_api
DB_USERNAME=root
DB_PASSWORD=root

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

Untuk DB_USERNAME dan DB_PASSWORD sesuaikan dengan settingan pada mysql yang digunakan.

Install Package Passport

Proses setting koneksi database selesai selanjutnya install passport dengan mengeksekusi perintah berikut :

composer require laravel/passport

Kita tunggu lagi sampai selesai, setelah selesai kita lanjut lakukan proses instalasi sesuai link berikut https://laravel.com/docs/5.7/passport#installation

Sewaktu kita jalan composer untuk install package laravel/passport, passport service provider mendaftarkan database migrationnya ke framework. Sehingga kita harus migrate database setelah proses instalasi package. Passport migration akan membuat tabel yang diperlukan untuk menyimpan client dan access_token yang akan kita gunakan.

Jalankan proses migrate database dengan mengeksekusi perintah berikut :

php artisan migrate

Kemudian jalankan perintah passport:install untuk membuat encryption key yang nantinya kita gunakan untuk men-generate access_token. Perintah tersebut akan men-generate “personal access” dan “password access” untuk membuat access_token.

php artisan passport:install

Setelah menjalankan perintah diatas, selanjutnya edit file App/User.php menjadi berikut :

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

Kemudian kita harus memanggil Passport:routes method pada method boot pada class App/Providers/AuthServiceProvider.php

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

Terakhir pada file config\auth.php, set driver api authentication guard menjadi passport

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Zizaco/Entrust

Setelah proses instalasi passport selesai, selanjutnya kita install package zizaco/entrust dengan menjalankan perintah berikut :

composer require zizaco/entrust

Untuk instalasi package tersebut pernah saya bahas di https://www.fadlur.com/blog/sistem-otentikasi-laravel-5-zizaco-entrust/

Untuk kali ini kita bikin lebih sederhana saja. Edit file config/app.php dan pada array provider tambahkan

Zizaco\Entrust\EntrustServiceProvider::class,

Masih di file config/app.php pada array alias tambahkan

'Entrust'   => Zizaco\Entrust\EntrustFacade::class,

Kemudian buka file config/auth.php dan edit bagian ini

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
            'table' => 'users',
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

Selanjutnya buka file app/Http/Kernel.php dan pada bagian array routeMiddleware tambahkan baris kode berikut :

'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,
'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,
'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,

Untuk membuat table relasi antara users dan roles, buat migration dengan menjalankan perintah:

php artisan entrust:migration

Kemudian migrate file migration yang barusan dibuat dengan menjalankan perintah berikut :

php artisan migrate

Setelah proses migrate selesai, buat 2 buah model yaitu Role dan Permission dengan menjalankan perintah

php artisan make:model Role
php artisan make:model Permission

Buka file app/Role.php dan edit menjadi seperti berikut

<?php namespace App;

use Zizaco\Entrust\EntrustRole;

class Role extends EntrustRole
{
}

Selanjutnya buka file app/Permission dan edit menjadi seperti berikut

<?php namespace App;

use Zizaco\Entrust\EntrustPermission;

class Permission extends EntrustPermission
{
}

UserTableSeeder

Untuk pengujian, kita membutuhkan username, password dan roles. Oleh karena itu kita harus membuat data dummy dengan membuat file seeder. Untuk membuat file seeder, jalankan perintah berikut

php artisan make:seeder UserTableSeeder

Buka file database/seeds/UserTableSeeder.php dan edit menjadi berikut

<?php

use Illuminate\Database\Seeder;
use App\Role;
use App\User;

class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Role::create([
            'name' => 'admin',
            'display_name'=>'Admin',
            'description'=>'Admin Aplikasi'
        ]);

        Role::create([
            'name' => 'member',
            'display_name'=>'Member',
            'description'=>'Admin Aplikasi'
        ]);

        User::create([
            'name'=>'Admin',
            'email'=>'[email protected]',
            'password'=>bcrypt('123456')
        ]);

        User::create([
            'name'=>'Member',
            'email'=>'[email protected]',
            'password'=>bcrypt('123456')
        ]);

        $itemadmin = User::where('email', '[email protected]')->first();
        $itemmember = User::where('email', '[email protected]')->first();

        $roleadmin = Role::where('name','admin')->first();
        $rolemember = Role::where('name', 'member')->first();

        $itemadmin->roles()->attach($roleadmin->id);
        $itemmember->roles()->attach($rolemember->id);
    }
}

Untuk memasukkan ke database, jalankan perintah berikut

php artisan db:seed --class=UserTableSeeder

Terakhir untuk pengujian, buka aplikasi postman dan jalankan aplikasi backend yang sudah kita buat dengan perintah

php artisan serve
aplikasi postman
Postman

Pada tab body, sesuaikan seperti gambar di atas. Untuk client_secret sesuaikan dengan client_secret hasil generate php artisan passport:install

Setelah diklik tombol send akan tampil response seperti berikut

response postman
Postman

Video proses pembuatannya bisa dilihat di bawah ini

Tinggalkan Balasan

This site uses Akismet to reduce spam. Learn how your comment data is processed.