Membangun REST API Dengan Otentikasi Laravel Passport

API (Application Programming Interface) dikenal sebagai Web Services atau layanan web (selanjutnya kita sebut layanan web). Layanan web sangat penting ketika Anda mengembangkan aplikasi cross-platform. Anda harus membuat API jika Anda akan mengembangkan aplikasi mobile.

Seperti yang telah kita ketahui bahwa Laravel memiliki fitur untuk membuat layanan web API. Tetapi jika Anda seorang pemula dan tidak tahu apa itu layanan web API, maka Anda tepat sudah mengunjungi situs ini. Dalam tulisan ini, saya akan membahas bagaimana cara membangun REST API di Laravel dengan otentikasi menggunakan Passport.

Apa Itu Passport?

Dalam bahasan ini, istilah Passport bukanlah dokumen yang memuat identitas untuk melakukan perjalanan keluar negeri. Passport merupakan salah satu proyek Laravel juga, mereka menyebutnya adalah Laravel Passport.

API biasanya menggunakan token untuk mengautentikasi pengguna dan tidak melihat status sesi di antara permintaan. Otentikasi API di Laravel sangat mudah dengan menggunakan Laravel Passport, yang mengimplementasikan OAuth2 Server untuk pengembangan aplikasi Laravel Anda dalam waktu yang cukup singkat.

Membuat Layanan Web API

Anda hanya perlu mengikuti beberapa langkah saja untuk membuat layanan web API, seperti Login, Register dan melihat Rincian Pengguna. Ikuti langkah-langkah dibawah ini untuk memulai.

1. Buat Proyek Baru Laravel

Langkah pertama, kita perlu membuat proyek aplikasi Laravel baru dengan menggunakan perintah di terminal atau command prompt, seperti di bawah ini: Panduan lebih lengkap, lihat cara Membangun Aplikasi Dasar dengan Laravel.

laravel new laravel-api-passport
Output

Crafting application...
...

Package manifest generated successfully.
Application ready! Build something amazing.

Setelah selesai membuat proyek baru, buka direktori proyek menggunakan Atom atau software code editor lainnya.

2. Aktifkan Otentikasi Bawaan Laravel

Anda perlu mengaktifkan fitur otentikasi bawaan Laravel melalui terminal atau command prompt. Pastikan terminal atau command prompt mengarah ke direktori proyek. Jalankan perintah dibawah ini:

$ php artisan make:auth

Perintah diatas akan mengaktifkan otentikasi default Laravel. Dimana pada saat aplikasi Anda sudah mendukung pendaftaran pengguna baru dan login.

Baca Juga:  Cara Instal Nginx Web Server di Ubuntu 16.04

3. Instal Passport

Setelah berhasil mengikuti langkah satu dan dua. Sekarang Anda perlu menginstal Laravel Passport menggunakan composer.

Untuk menginstal Laravel Passport, Anda hanya perlu menjalankan perintah dibawah ini melalui terminal atau command prompt:

$ composer require laravel/passport

Laravel Pasport akan membuat tabel yang dibutuhkan aplikasi untuk menyimpan klien dan mengakses token. Jadi sebelum menlanjutkan Anda harus melakukan migrasi database terlebih dahulu. Jalankan perintah berikut di terminal atau command prompt.

$ php artisan migrate

Catatan
Sebelum Anda menjalankan perintah dibawah ini. Pastikan Anda sudah mengkonfigurasi koneksi database pada file .env dan database sudah dibuatkan di server database.

Sekarang, Anda harus menjalankan perintah passport:install. Perintah ini akan membuat kunci enkripsi untuk menghasilkan access token yang aman. Selain itu, perintah tersebut akan membuat klien personal access dan password grant yang digunakan untuk menghasilkan access token.

php artisan passport:install 

4. Konfigurasi Passport

Pada langkah ini, kita harus melakukan konfigurasi pada model, service provider dan konfigurasi auth. Jadi, Anda harus melakukan perubahan pada tiga bagian itu.

Buka file model User yang ada di direktori app/User.php, kemudian tambahkan dan sesuaikan beberapa baris kode seperti 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;
}

Selanjutnya, Anda harus menambahkan metode Passport:routes() ke metode boot di dalam file app/Providers/AuthServiceProvider.php. Metode ini akan mendaftarkan rute yang diperlukan untuk mengeluarkan access token dan menghapus access token, clients, dan personal access tokens:

<?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 langkah ini adalah merubah file config/auth.php. Konfigurasi ini akan menginstruksikan aplikasi Anda untuk menggunakan Passport ketika mengautentikasi permintaan API:

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

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

5. Tambahkan Rute API

Pada langkah ini, kita akan membuat rute API. Laravel menyediakan file rute khusus untuk layanan web API. Jadi, mari kita tambahkan rute baru pada file routes/api.php:

<?php

use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::post('login', 'Api\UserController@login');
Route::post('register', 'Api\UserController@register');
Route::group(['middleware' => 'auth:api'], function() {
    Route::post('details', 'Api\UserController@details');
});

6. Buat Controller Untuk Layanan Web API

Pada langkah terakhir kita harus membuat Controller pengguna dan juga menambahkan tiga metode login, register dan details. Anda perlu menjalankan perintah dibawah ini untuk membuat UserController.php yang akan ditambahkan ke direktori app/Http/Controllers/Api dan sesuaikan kode didalamnya:

$ php artisan make:controller Api\UserController
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use App\User;
use Validator;

class UserController extends Controller
{
    public $successStatus = 200;

    /**
     * Login - API
     *
     * @return \Illuminate\Http\Response
     */
    public function login()
    {
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
            $user = Auth::user();
            $success['token'] =  $user->createToken('Breakpoin Appliction')->accessToken;
            return response()->json(['success' => $success], $this->successStatus);
        }
        else {
            return response()->json(['error'=>'Unauthorised'], 401);
        }
    }

    /**
     * Registrasi Pengguna Baru - API
     *
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'email' => 'required|email',
            'password' => 'required',
            'confirm_password' => 'required|same:password',
        ]);

        if ($validator->fails()) {
            return response()->json(['error' => $validator->errors()], 401);
        }

        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        $user = User::create($input);

        $success['token'] =  $user->createToken('Breakpoin Appliction')->accessToken;
        $success['name'] =  $user->name;

        return response()->json(['success' => $success], $this->successStatus);
    }

    /**
     * Rincian Pengguna Login - API
     *
     * @return \Illuminate\Http\Response
     */
    public function details()
    {
        $user = Auth::user();
        return response()->json(['success' => $user], $this->successStatus);
    }
}

Pengujian REST API

Saatnya kita mencoba REST API yang sudah dibuat sesuai langkah-langkah diatas. Anda dapat menguji melalui aplikasi Postman. Metode pengujian dilakukan dengan mengirimkan HTTP POST ke URL rute API; dalam hal ini adalah http://localhost:8080/api/[rute].

Validasi Register Pengguna

Pengujian pertama, kita menguji validator registrasi pengguna. Dimana metode register() pada UserController mewajibkan field name diisi, sementara kita akan menguji nya dengan mengirimkan data tanpa field nameke http://localhost:8080/api/regsiter.

Laravel API Passport Test 1

Register Pengguna

Setelah validasi berfungsi dengan benar. Kita coba untuk mendaftarkan pengguna baru dengan mengirimkan HTTP POST ke alamat http://localhost:8080/api/register.

Laravel API Passport Test 2

Setelah mengirimkan HTTP POST untuk mendaftarkan pengguna baru, Laravel merespon dengan memberikan rincianaccess token dan nama Breaper dalam format JSON.

Catatan
Salin output seperti gambar diatas ke notepad. Data tersebut akan digunakan untuk menguji API (mengambil) rincian pengguna. Terutama nilai Bearer akan digunakan sebagai pengganti kredensial biasa (email dan kata sandi).

Baca Juga:  Mengenal Laravel PHP Framework Lebih Dekat

Mengambil Rincian Pengguna

Sekarang, kita akan menguji API untuk mengambil rincian pengguna. Dalam pengujian ini, di Postman Anda harus membuat tab baru dan mengisi parameter di header (bukan body):

Salin nilai Bearer (respon pada saat registrasi pengguna) ke header Authorization dengan penulisan seperti:

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImMzODBlNmRmMzRiYjRhNzBjN2I0Y2E2MTljZWUzZThlMTAyMTI4ZWUwYjJmM2EyZGM4M2JmYjUwNzZhYTIxZDZiMTg1MTAzNGYxNzc1NjZhIn0.eyJhdWQiOiIxIiwianRpIjoiYzM4MGU2ZGYzNGJiNGE3MGM3YjRjYTYxOWNlZTNlOGUxMDIxMjhlZTBiMmYzYTJkYzgzYmZiNTA3NmFhMjFkNmIxODUxMDM0ZjE3NzU2NmEiLCJpYXQiOjE1NTY1NzUzMjYsIm5iZiI6MTU1NjU3NTMyNiwiZXhwIjoxNTg4MTk3NzI2LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.IL3VS2DOwfDSq_VzRGY8x_KkYo9aPM8pUzJ_-LGIazGQCTQulMOFoHVVWCqrCSZAUkaSUgT0KE9nPVP25-Zi2F5KyHb-cPFPRciMOLiBiuri60MxcLE7vbuoPYrI0L4Evhda3p96-eS6TyH_OVFahIf-_NY8nqHnnz9uDe6GuPVK-S5DswkSQPYMJ54Cg9dMpVBmJxpFgy_74wUVJXd6RcoCMMNoTvQazQ6NLGQ75OtRr0OFCjTYZnobIh66s9-WeYFAb_98M_y_lA-1XbMYP_K4BhRZh8cAGXvReax8a0PNSkHL1XPgsKj7solRw-DDZUI7MR0CvtaZyF4Y05eY_nm-9mgp_3SmwC0YMSTogC7qBBekTFCis5337c10gWQJ_lVyNdoZk_nsTcQ9OoDPVnKUqzH5B0hMwM9Rvy7tnjRrj5Qts_2eXPYpRs5pbr2LCureNuDD7t7kPuf6NyA_oD_S4E9A2o6Ky-Kd34nU3hHQ_Zanu6gzbDz-3hzdz9vTlM-VBWTHACllxKTE0YblA0yNZCJOEyY2IcvkNqSMKqdS2YXK4Qrewk8t8dJI3-33VyIkMh0XsKgzCrJtEIX2JvEF6UnicVCMgGOn5-_8WsXSt767fh6QwvkRZWJjLCSL-CtN2tX-1s6h1ZGZIC7LecvuEHJJzigRZZopN-hNk

Setelah mengatur tiga nilai parameter header dan mengirimkan data, Anda akan mendapatkan respon seperti gambar dibawah ini:

Laravel API Passport Test 3

Source Code

Panduan ini disertai dengan source code. Anda dapat menyalin dan menggunakan source code ini untuk mengoreksi konfigurasi di setiap langkah-langkah yang ada pada panduan ini.


Download Source Code

Kesimpulan

Dengan Laravel Anda dapat mengembangkan aplikasi yang skalabel dan kaya fitur yang dapat memenuhi kebutuhan Anda. Laravel sendiri sebenarnya memiliki produk khusus untuk membangun layanan web API; yang memiliki performa lebih baik. Produk tersebut yaitu Lumen; merupakan micro-framework yang luar biasa cepat untuk membangun layanan web API.

Jangan lupa beri komentar dibawah tulisan ini; semoga tulisan ini menjadi referensi tambahan bagi pemula yang sedang mempelajari layanan web API menggunakan Laravel.