Anda di halaman 1dari 42

Panduan Lengkap Belajar API Laravel +

Studi Kasus

API Laravel – Halo semuanya, kali ini kita akan mempelajari sekaligus mendalami tentang API
pada Laravel..

jadi untuk tutorial kali ini akan kita bagi menjadi 2 jenis, yaitu yang pertama belajar membuat
API, dan yang kedua belajar menggunakan API..
Pada tahap belajar membuat API, nanti kita akan perkenalan dengan jenis-jenis method nya,
kemudian juga akan berkenalan dengan aplikasi yang bernama postman..

Dimana postman ini akan kita gunakan untuk testing API yang sudah kita buat, apakah berjalan
atau tidak..

Kemudian nanti kita juga akan mempelajari laravel passport, dimana laravel passport ini
digunakan untuk membuat otentikasi pada API nya.

Jadi sebetulnya fungsinya sama seperti laravel auth, cuma beda nya disini kita menggunakan
token untuk proses auth pada API nya..

Nanti juga akan ada studi kasus nya, dimana kita akan belajar menggunakan API yang sudah
dibuat oleh developer lain..

Misalnya kita akan coba mempelajari API daerah Purwakarta..

Menarik sekali bukan? Yuk langsung saja kita mulai..

Daftar Isi [hide]

 1 API Laravel – Apa sih API itu?


 2 Persiapan
o 2.1 1. Instalasi Laravel
o 2.2 2. Instalasi POSTMAN
o 2.3 3. Membuat Database
 3 Mulai Membuat API
o 3.1 Membuat Sample API Sederhana
o 3.2 Membuat GET API Table tests
o 3.3 Membuat POST API Table tests
o 3.4 API Method PUT untuk Update Data
o 3.5 API Method DELETE untuk Hapus Data
o 3.6 Membuat Filtering / Pencarian Data
o 3.7 Membuat Pagination dengan API
o 3.8 Menentukan sendiri nilai paginate nya
 4 Instalasi Laravel Passport
 5 Belajar Auth pada API
o 5.1 Buat Register Akun Terlebih Dahulu
o 5.2 Buat API Login
o 5.3 Membuat Route Group Middleware Auth
 6 Belajar Menggunakan API
o 6.1 Apa itu PHP CURL?
o 6.2 Get API Purwakarta
 7 Akhir Kata
API Laravel – Apa sih API itu?
Tak kenal maka tak sayang, sebelum kita mempelajari nya, alangkah baiknya kita coba
mengetahui terlebih dahulu tentang definisi nya..

Jadi API itu adalah singkatan dari Application Programming Interface, bisa dibilang kalo API ini
adalah suatu interface yang bisa digunakan untuk menghubungkan suatu aplikasi dengan aplikasi
lainnya..

Contoh umum nya yang paling banyak digunakan yaitu menghubungkan aplikasi Android
dengan aplikasi Web..

Dimana aplikasi android nya hanya digunakan sebagai user interface nya saja, tapi untuk
pemrosesan data nya menggunakan aplikasi web yang sudah dihosting di cloud.. Nah untuk
menghubungkan nya yaitu dengan menggunakan API..

ibarat nya aplikasi android itu adalah front end nya, aplikasi web adalah backend nya, dan
sementara API itu adalah perantara nya..

Persiapan
Nah setelah tadi pengenalan, sekarang kita mulai untuk praktek nya..

Ada beberapa hal yang perlu di persiapkan

1. Instalasi Laravel

Disini saya menggunakan laravel versi terbaru untuk saat ini, yaitu versi 8, untuk cara instalasi
nya kalian bisa kunjungi halaman official laravel nya disini..

2. Instalasi POSTMAN

Kemudian kita juga wajib instalasi postman, apa fungsinya?

Jadi Postman ini akan kita gunakan untuk testing API nya, pada setiap kali kita selesai membuat
URI API, akan kita test melalui postman ini, untuk mengetahui apakah API nya berjalan atau
tidak..

Untuk download postman, bisa kalian download disini..

3. Membuat Database

Sekarang kita buat database baru dengan nama API..


Kemudian didalam database API kita buat sebuah table baru dengan nama “tests”.. Untuk
struktur dari table nya adalah seperti pada gambar berikut:

Kemudian kalian setting juga file .env nya, di sesuaikan dengan nama database, db user dan db
password yang ada di komputer kalian..

Oke persiapan sudah selesai..

Mulai Membuat API

Setelah persiapan nya matang, sekarang kita akan coba mulai membuat API nya..

Didalam laravel sendiri, dia sudah memiliki file sendiri untuk kita membuat route2 api nya..

Kalo biasanya kita membuat route didalam folder web.php, maka untuk membuat route api, kita
bisa menaruh nya di file api.php

File api.php dan file web.php masih didalam satu folder yang sama, yaitu folder routes..
Bedanya apa? Beda nya yaitu kalo kita membuat route didalam file api.php, maka secara
otomatis akan ada tambahan segment/prefix didepan nya dengan nama “api”..

Misalkan kita membuat route api seperti ini:

Route::get('sample',[Sample_controller::class,'sample']);

Maka nanti kita mengakses nya seperti ini:

http://127.0.0.1:8000/api/sample
Kita bisa perhatikan pada url di atas, jadi ada tambahan 1 segment didepan nya, atau ada
tambahan 1 prefix didepan nya, yaitu ../api/..

Membuat Sample API Sederhana

Nah sekarang kita coba buka file api.php nya, kemudian buat route api baru didalam nya, kita
taruh dibagian paling bawah saja..

../routes/api.php
....
Route::get('/test',function(){
return response()->json([
'success'=>true,
'message'=>'ok'
]);
});

Coba kita perhatikan route di atas, kita membuat nya dengan method get, url nya adalah ‘/test’..

Kemudian untuk setiap route api yang akan kita buat, return nya harus berbentuk json..

Untuk membuat json, kalian bisa menggunakan perintah bawaan nya php yaitu json_encode..

Atau bisa juga menggunakan bawaan laravel seperti diatas..

return response()->json([
'success'=>true,
'message'=>'ok'
]);

Pokok nya setiap variabel atau setiap object atau setiap array, itu harus di return dengan
menggunakan json, kalo bukan json, nama nya bukanlah API..

Sekarang coba kita buka postman nya, kemudian kita akses url API yang barusan kita buat
kedalam postman..

http://127.0.0.1:8000/api/test
Kita coba perhatikan, pada kotak no 1, kita bisa memilih jenis method nya, apakah GET ataukah
POST atau yang lain nyaa.. Ini kita sesuaikan dengan yang kita buat di file api.php nya, tadi kita
membuat nya dengan method get, maka dikotak no 1 juga kita pilih method GET..

Pada kotak merah no 2 adalah tempat kita mengakses url nya..

kemudian kotak merah no 3 adalah hasil response nya, ini sesuai dengan yang kita define pada
response json nya..

Membuat GET API Table tests

Sekarang kita akan membuat API untuk narik data yang ada didalam table tests..

Oleh karena itu sekarang kalian isi dulu table tests dengan dummy data, kalian bisa gunakan
teknik Seeding Faker pada Laravel yang sudah kita bahas pada postingan sebelumnya: Belajar
Seeding dan Faker pada Laravel..
Disana saya mengisi data dummy field keterangan dengan random nama seseorang
menggunakan Faker, keren kan?

Sekarang kita buat Controller baru terlebih dahulu, jalankan perintah:

php artisan make:controller Api_controller

Setelah itu kita buat Route baru lagi didalam file api.php

../routes/api.php
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Htpp\Controllers\Api_controller;
/*
|--------------------------------------------------------------------------
| 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::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Route::get('/test',function(){
return response()->json([
'success'=>true,
'message'=>'ok'
]);
});
Route::get('get-tests',[Api_controller::class,'index']); error

Catatan WW:

Route::get('get-users', 'App\Http\Controllers\Api_controller@index');
Pake ini baru bisa….

Coba perhatikan file api.php di atas, pertama pada baris ke 6 kita memanggil Api_controller nya
terlebih dahulu..

Kemudian pada baris ke 30, kita membuat route api baru dengan menggunakan method get,
untuk url nya yaitu “get-tests”, menggunakan Api_controller dan mengarahkan nya ke function
index..

Sekarang buka file Api_controller nya dan buat sebuah function baru disana dengan nama index..

../app/Http/Controllers/Api_controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class Api_controller extends Controller
{
public function index(){
$data = \DB::table('tests')->get();
return response()->json($data);
}
}
Didalam function index, kita membuat sebuah variabel bernama data yang fungsinya digunakan
untuk menampung data-data dari table tests..

$data = \DB::table('tests')->get();

Setelah itu kita return variabel data nya berupa json..

return response()->json($data);

Sekarang kita coba test menggunakan postman..

Kita menggunakan method GET, URL nya yaitu: http://127.0.0.1:8000/api/get-tests

Dan seharusnya akan menghasilkan response seperti gambar diatas

Membuat POST API Table tests

Kalo tadi kita membuat Route API untuk get data, sekarang kita akan buat route API untuk
POST data nya atau untuk Store data nyaa..

Misal sebagai contoh, kita akan membuat proses insert data kedalam table tests..

Buat route baru terlebih dahulu didalam file api.php..

../routes/api.php
....
Route::post('store-tests',[Api_controller::class,'store']);

Untuk store data kita menggunakan metho post, url nya mengarah ke “store-tests”, dan masih
menggunakan Api_controller..

Maka di file Api_controller nya sekarang kita buat function baru dengan nama store..

public function store(Request $request){


\DB::table('tests')->insert([
'keterangan'=>$request->inputan_keterangan
]);
return response()->json([
'status'=>true,
'message'=>'success'
]);
}

Pada function store kita membawa parameter request karena kita akan mengambil nilai dari
inputan form-data..

public function store(Request $request){

Kemudian didalam function store nya kita menjalankan query untuk insert data nya kedalam
table tests

....
\DB::table('tests')->insert([
'keterangan'=>$request->inputan_keterangan
]);
....

Setelah itu kita buat return nya berupa json dengan beberapa key..

return response()->json([
'status'=>true,
'message'=>'success'
]);

Jadi ada key ‘status’ yang nilai nya berisi true, dan ada key ‘message’ yang nilai nya berisi pesan
‘success’..

Sekarang mari kita coba di postman


Silahkan teman-teman coba eksekusi di postman seperti pada gambar di atas yaa.. dan pastikan
hasil response nya sesuai dengan yang sudah kita define pada controller nyaa..

API Method PUT untuk Update Data

Kalo tadi method POST untuk store data, maka sekarang method PUT untuk update data..

Jadi akan kita coba buat route API untuk pemrosesan update suatu data, nanti terdapat parameter
id nya juga sebagai patokan data mana yang akan di update..

../routes/api.php
....
Route::put('edit-tests/{id}',[Api_controller::class,'update']);

Coba perhatikan route diatas, kita menggunakan method put, kemudian url nya yaitu
“edit-tests/{id}”, pada url nya terdapat 1 parameter yaitu parameter id..

Masih menggunakan Api_controller dan di arahkan ke function update..

Oleh karena itu langsung saja kita buka file Api_controller nya dan buat sebuah function baru
dengan nama update..

public function update(Request $request,$id){


\DB::table('tests')->where('id',$id)->update([
'keterangan'=>$request->inputan_keterangan
]);
return response()->json([
'status'=>true,
'message'=>'update success'
]);
}

Pada function update di atas, sama seperti pada function store, terdapat parameter request karena
kita ingin mengambil nilai dari suatu form, dan juga terdapat parameter id, ini sesuai dengan
seperti yang ada pada route nya..

public function update(Request $request,$id){

Kemudian didalam function update nya terdapat query update data, dimana kita menggunakan
parameter id nya sebagai patokan data mana yang akan di update, kita taruh didalam kondisi
where()..

\DB::table('tests')->where('id',$id)->update([
'keterangan'=>$request->inputan_keterangan
]);

Kemudian setelah itu kita lakukan return data berupa json..

return response()->json([
'status'=>true,
'message'=>'update success'
]);

Sekarang kita coba test menggunakan postman, apakah berhasil atau tidak..
Coba kalian sesuaikan seperti pada gambar di atas..

Method nya menggunakan PUT, kemudian pada url nya terdapat parameter id, sebagai contoh
kita isi 1, maka data yang di update yaitu yang ID nya adalah 1..

Untuk value dari inputan_keterangan nya bisa kalian sesuaikan sendiri..

Dan untuk hasil response nya seharusnya sama seperti pada gambar di atas, ini sesuai dengan
yang sudah kita define pada controller nyaa..

API Method DELETE untuk Hapus Data

Sekarang kita akan membuat API untuk proses hapus data nya..

Untuk proses hapus data nya, kita menggunakan method DELETE..

Kita buat route baru lagi didalam file api.php

....
Route::delete('delete-tests/{id}',[Api_controller::class,'delete']);

Pada route tersebut kita menggunakan method delete, dan url nya mengarah ke
“delete-tests/{id}”, pada url tersebut juga kita menggunakan 1 parameter id sebagai patokan data
mana yang akan dihapus..
Kita masih menggunakan Api_controller dan mengarahkan nya ke function delete..

Maka sekarang didalam file Api_controller nya, kita tambahkan sebuah function baru dengan
nama delete..

public function delete($id){


\DB::table('tests')->where('id',$id)->delete();
return response()->json([
'status'=>true,
'message'=>'delete success'
]);
}

Pada function delete terdapat 1 parameter yaitu parameter ID, ini sesuai dengan route nya..

Kemudian didalam function delete, terdapat query untuk hapus data yang mana kondisi nya
berdasarkan parameter id nya..

....
\DB::table('tests')->where('id',$id)->delete();
....

Kemudian return nya berupa json seperti berikut:

....
return response()->json([
'status'=>true,
'message'=>'delete success'
]);
....

Kemudian silahkan kalian coba akses menggunakan POSTMAN, silahkan lakukan konfigurasi
seperti pada gambar berikut:
Membuat Filtering / Pencarian Data

Nah sekarang kita akan membuat Modul API untuk melakukan pencarian data berdasarkan
keyword tertentu..

Yang kita tau, didalam table tests terdapat 2 kolom, yaitu kolom “id” dan kolom “keterangan”..

Kita akan melakukan pencarian kedalam kolom keterangan dengan keyword tertentu..

Kita buat route baru lagi didalam file api.php

../routes/api.php
....
Route::post('filter-tests',[Api_controller::class,'filter']);
Route diatas menggunakan method post, url nya yaitu “../filter-tests“, menggunakan
Api_controller dan mengarah ke function filter..

Sekarang kita tambahkan function baru lagi didalam Api_controller dengan nama filter..

../app/Http/Controllers/Api_controller
....
public function filter(Request $request){
$keyword = $request->keyword;
$data = \DB::table('tests')->where('keterangan','like','%'.$keyword.'%')->get();
return response()->json([
'status'=>true,
'message'=>'success',
'data_filter'=>$data
]);
}
....

Perhatikan function diatas, kita membawa parameter request karena nanti nya kita akan nge get
keyword berdasarkan inputan yang ada di form nya..

....
public function filter(Request $request){
....

Kemudian kita buat variable keyword untuk menampung data keyword nya..

Dan kita buat query untuk melakukan pencarian keyword kedalam table tests berdasarkan
keyword yang tadi sudah kita get..

....
$keyword = $request->keyword;
$data = \DB::table('tests')->where('keterangan','like','%'.$keyword.'%')->get();
....

Kemudian kita return kedalam bentuk json..

....
return response()->json([
'status'=>true,
'message'=>'success',
'data_filter'=>$data
]);
....

Sekarang coba kalian test menggunakan postman seperti berikut:


Diatas kita coba melakukan pencarian data dengan keyword “ali“..

Maka pastikan juga response nya adalah data-data yang memiliki keyword dengan kata “ali“..

Membuat Pagination dengan API

Misalkan kita memiliki ribuan data yang dapat ditarik..

Jika kita menarik nya langsung sekaligus secara keseluruhan, maka pasti akan lambat, bahkan
bisa menyebabkan freeze di browser nya, atau malah error 500 server timeout..

Solusi nya yaitu menggunakan pagination..

Dengan pagination, kita bisa mentukan berapa jumlah data yang ingin ditampilkan dalam satu
halaman..

Jika ingin melihat data yang lain nya, kita bisa next ke halaman selanjut nya..

Nah pada kasus ini, sebagai contoh kita ingin menampilkan 3 data dalam satu halaman, oke?

Kita buat dulu route nya terlebih dahulu didalam file api.php
../routes/api.php
....
Route::get('get-paging',[Api_controller::class,'index_paging']);
....

Kita membuat nya dengan method get, url nya yaitu “../get-paging”, menggunakan
Api_controller dan mengarah ke function index_paging..

Sekarang buat function baru didalam Api_controller nya dengan nama index_paging seperti
berikut..

....
public function index_paging(){
$data = \DB::table('tests')->paginate(3);
return response()->json([
'status'=>true,
'message'=>'success',
'data_filter'=>$data
]);
}
....

Coba kita perhatikan function diatas, didalam nya kita memiliki sebuah variabel data untuk
menampung data tests..

Bedanya nya kalo biasanya kita menggunakan perintah “->get()“, sekarang kita menggunakan
perintah “paginate()“..

....
$data = \DB::table('tests')->paginate(3);
....

Didalam perintah paginate() terdapat angka, angka disana untuk menentukan jumlah data yang
ditampilkan dalam 1 halaman, diatas kita set 3, maka nanti yang tampil adalah 3 data
perhalaman..

Sekarang coba kita test di postman seperti berikut:


Jika berhasil, maka seharusnya akan menghasilkan response seperti diatas..

Kemudian dibagian response nya, kalian coba scroll ke bagian bawah, maka akan menemukan
seperti berikut:

Disana terdapat object first_page_url yang nilai nya adalah sebuah url, ini digunakan untuk
mengarahkan kita kehalaman paling pertama.. cara nya bisa kalian akses url tersebut..

Kemudian ada last_page_url, fungsinya untuk mengarahkan kita halaman paling akhir, tinggal
akses aja url yang ada di object tersebut..

Lantas bagaimana kalau kita mau mengarah ke halaman selanjut nya?? Coba kalian scroll lagi
response nya kebagian paling bawah, nanti akan menemukan seperti berikut:
Kita bisa menemukan object next_page_url, fungsinya untuk mengakses ke halaman selanjut
nya, cara nya yaitu dengan tinggal akses aja value url dari object tersebut..

Kemudian kalo kita ingin kembali ke halaman sebelum nya, kita tinggal panggil aja object
prev_page_url nya, disana masih null karena kita sedang berada dihalaman pertama, tapi kalo
sedang berada dihalaman ke 2, maka object tersebut akan memiliki nilai..

Menentukan sendiri nilai paginate nya

Lantas bagaimana jika kita ingin merubah atau menentukan sendiri nilai paginate nya, karena tak
selamanya kita akan menampilkan 3 data dalam satu halaman, bisa aja 10 data atau 20 data..

Bagaimana caranya? Cara nya yaitu dengan menambahkan 1 parameter baru di url nya untuk
menentukan berapa jumlah data yang akan ditampilkan dalam 1 halaman..

Kita modifikasi route nya, yang awal nya seperti ini:

....
Route::get('get-paging',[Api_controller::class,'index_paging']);
....

Menjadi Seperti ini:

....
Route::get('get-paging/{jumlah_data}',[Api_controller::class,'index_paging']);
....

Coba perhatikan pada route di atas, kita menambahkan 1 parameter untuk menentukan jumlah
data yang akan ditampilkan..

Berarti kita ubah juga di Controller nya seperti berikut:

....
public function index_paging($jumlah_data){
$data = \DB::table('tests')->paginate($jumlah_data);
return response()->json([
'status'=>true,
'message'=>'success',
'data_filter'=>$data
]);
}
....

DI function nya, kita membawa sebuah parameter juga..

public function index_paging($jumlah_data){

Kemudian pada query get data nya, kita masukkan variabel $jumlah_data nya kedalam property
paginate()..

$data = \DB::table('tests')->paginate($jumlah_data);

Sekarang coba test di postman, misalkan kita ingin menampilkan 10 data dalam 1 halaman,
konfigurasi seperti berikut:

Jika berhasil, pastikan response nya seperti diatas..

Instalasi Laravel Passport


Sebelum lanjut lagi ke tahap selanjutnya, kita akan coba mempelajari tentang laravel passport
terlebih dahulu..

Apa itu Laravel Passport? Laravel Passport digunakan untuk membuat otentikasi atau auth pada
Route API yang akan kita buat..

Misalkan sebagai contoh kita memiliki sebuah route untuk akses data user, dimana untuk route
tersebut tidak boleh di akses oleh sembarang orang, hanya orang-orang yang punya akses aja yg
dapat mengeksekusi route tersebut..

Nah untuk membatasi akses nya kita bisa gunakan laravel passport ini, ibarat kata kalo dalam
user interface suatu aplikasi, yaitu sebuah halaman login, yang bisa masuk adalah user-user yang
memang sudah memiliki akun untuk bisa login..

Cara kerja dari Laravel passport ini yaitu akan meng-generate sebuah token, dimana token ini
akan selalu dibawa didalam header agar bisa mengakses route-route yang sudah dibatasi dengan
otentikasi..

Langung saja ke proses instalasi nya, jalankan perintah:

composer require laravel/passport

Kemudian tunggu beberapa saat sampai proses instalasi nya selesai, jika ditengah jalan terdapat
error “Conclusion: remove paragonie/random_compat v9.99.99″..

Silahkan kalian jalankan perintah

composer require paragonie/random_compat:2.*

Kemudian jalankan kembali perintah

composer require laravel/passport

Kalo misalkan masih error juga, coba jalankan composer update terlebih dahulu..

Kalo instalasi Laravel Passport nya sudah berhasil, ada beberapa hal yang perlu kita konfigurasi..

Pertama di file config/app.php, tambahkan potongan kode berikut pada bagian providers..

../config/app.php
Laravel\Passport\PassportServiceProvider::class,
Setelah itu pada terminal atau CMD jalankan perintah:

php artisan migrate


Diatas kita bisa lihat ada beberapa file yang sudah berhasil di migrasi, dan kalo kamu cek
kedalam database mu, maka seharusnya akan memiliki table seperti berikut:

Kemudian kalian generate token keys dengan perintah:


php artisan passport:install

Kita bisa cek pada gambar di atas, kita sudah dapat Client ID nya..

Kemudian kita masih perlu melakukan konfigurasi lagi pada beberapa file, misal seperti file
Model User, config auth, dan juga service provider nya..

Kita akan coba mulai satu persatu, di mulai dari file Model User nya:

../app/Models/User.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}

Coba kita perhatikan, pada baris ke 9, kita memanggil sebuah class HasApiTokens..

....
use Laravel\Passport\HasApiTokens;
....

Kemudian pada baris ke 13, kita juga memanggil HasApiTokens didalam class User nya..

use HasFactory, Notifiable, HasApiTokens;

Sekarang konfigurasi file AuthServiceProvider nya..

../app/Providers/AuthServiceProvider.php
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
//
}
}

Pada baris ke 5 kita memanggil class Passport..

Kemudian pada baris ke 28 didalam function boot, kita menambahkan sebuah script..

Passport::routes();

Terakhir kita konfigurasi file Auth.php..

../config/auth.php
....
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
],
....

pada file auth.php, kalian cari key guards, kemudian key api.. kalian ganti value “driver” menjadi
“passport” seperti pada script diatas..

Belajar Auth pada API


Setelah berhasil instalasi dan konfigurasi Laravel Passport nya, sekarang mari kita coba
praktekan kegunaan nya..

Buat Register Akun Terlebih Dahulu

Baca juga:

 Mengenal Lebih Dalam 21 Fitur Pada Windows 11


 Belajar Seeding dan Faker di Laravel dari 0
Agar bisa menggunakan fitur Auth, pertama kita harus siapkan dulu Modul untuk registrasi Akun
nya..

Dimana nanti untuk setiap akun yang sudah didaftarkan, dapat digunakan untuk login atau untuk
mengakses route-route yang sudah dibungkus dengan Auth..

Kita buat route baru nya terlebih dahulu didalam file api.php

../routes/api.php
....
Route::post('register',[Api_controller::class,'register']);

Kita membuat route baru dengan method POST, url nya “/register”, masih menggunakan
Api_controller dan mengarah ke function register..

Sekarang didalam file controller Api_controller kita buat function baru dengan nama register..

../app/Http/Controllers/Api_controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class Api_controller extends Controller
{
protected $successStatus = 200;
public function index(){
$data = \DB::table('tests')->get();
return response()->json($data);
}
public function store(Request $request){
\DB::table('tests')->insert([
'keterangan'=>$request->inputan_keterangan
]);
return response()->json([
'status'=>true,
'message'=>'success'
]);
}
public function update(Request $request,$id){
\DB::table('tests')->where('id',$id)->update([
'keterangan'=>$request->inputan_keterangan
]);
return response()->json([
'status'=>true,
'message'=>'update success'
]);
}
public function delete($id){
\DB::table('tests')->where('id',$id)->delete();
return response()->json([
'status'=>true,
'message'=>'delete success'
]);
}
public function register(Request $request){
$validator = \Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
'c_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('nApp')->accessToken;
$success['name'] = $user->name;
return response()->json(['success'=>$success], $this->successStatus);
}
}

Perhatikan function diatas, pada baris ke 7 kita panggil dulu Model User nya..

Kemudian pada baris ke 11 kita buat property baru “protected $successStatus = 200;“..

Nah baru pada baris ke 51 kita buat function baru dengan nama register..

Didalam function register kita buat validasi nya terlebih dahulu dengan ketentuan sebagai
berikut:

....
$validator = \Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
'c_password' => 'required|same:password',
]);
....
Semua inputan wajib diisi, inputan email harus diisi email, dan inputan c_password isi nya
harus sama dengan inputan password..

Jika validasi nya error, kita akan mereturn sebuah json dengan menampilkan error validasi nya

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

Kemudian kita get semua nilai yg dari form, kita insert ke dalam table users nya..

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

Kemudian kita return success berupa json..

....
$success['token'] = $user->createToken('nApp')->accessToken;
$success['name'] = $user->name;
return response()->json(['success'=>$success], $this->successStatus);
....

Pada array success di atas, kita juga menggenerate token dari user tersebut, dimana nanti token
tersebut bisa langsung digunakan untuk login, nanti akan kita pelajari cara-cara nya..

Sekarang coba kalian test di postman seperti pada gambar berikut..


Pastikan return nya seperti pada gambar di atas..

Buat API Login

Setelah berhasil membuat API untuk register akun, sekarang kita akan buat modul untuk login
nya..

Buat route baru seperti berikut:

....
Route::post('login',[Api_controller::class,'login']);

Diatas kita menggunakan metho POST, url nya “login”, menggunakan Api_controller dan
mengarah ke function login..

Sekarang didalam file Api_controller nya, kita buat sebuah function baru dengan nama login
seperti berikut:

....
public function login(Request $request){
if(\Auth::attempt(['email' => request('email'), 'password' => request('password')])){
$user = \Auth::user();
$success['token'] = $user->createToken('nApp')->accessToken;
return response()->json(['success' => $success], $this->successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
....

Coba perhatikan script diatas, pertama kita cek dulu apakah email dan password yang kita
masukkan benar atau tidak..

....
if(\Auth::attempt(['email' => request('email'), 'password' => request('password')])){
....

Jika benar maka kita akan menyimpan session auth nya, kemudian mencatat token nya kedalam
array success.. Setelah itu kita response berupa json.

....
$user = \Auth::user();
$success['token'] = $user->createToken('nApp')->accessToken;
return response()->json(['success' => $success], $this->successStatus);
....

Sekarang kalian coba di postman, jika email dan password yang kalian masukkan benar, maka
akan memberikan response seperti berikut:
Response diatas akan didapatkan jika kamu berhasil login, kalo gagal akan menampilkan
response seperti berikut:
Kalo gagal login akan memberikan response error “Unauthorised” seperti diatas..

Membuat Route Group Middleware Auth

Setelah kita selesai membuat proses Login dan Register nya..

Sekarang kita akan membuat route group yang terdapat middleware auth nya..

Jadi nanti setiap url atau setiap route yang di tempatkan didalam Route group tersebut, hanya
dapat diakses oleh user yang sudah login saja..

Kunci nya yaitu ada di token nya, jika kita mengakses route2 yang dibungkus dengan route
group middleware auth tanpa membawa token, maka kita tidak akan bisa mengakses nya..

Sekarang kita coba buat dulu route group nya.. tambahkan script berikut di dalam file api.php..

....
Route::group(['middleware'=>'auth:api'],function(){
// Letakkan Kumpulan route2 disini yang hanya bisa di akses oleh user2 yang sudah login saja..
});

Diatas adalah route group nya yang sudah diberi middleware auth, nanti didalam route group
tersebut, kamu bisa meletakkan banyak route didalam nya..
Sekarang kita coba buat route baru terlebih dahulu didalam route group tersebut..

....
Route::group(['middleware'=>'auth:api'],function(){
// Letakkan Kumpulan route2 disini yang hanya bisa di akses oleh user2 yang sudah login saja..
Route::get('test-auth',function(){
return response()->json([
'success'=>true,
'message'=>'ok'
]);
});
});

Diatas kita membuat sebuah route dengan method get, url nya yaitu “test-auth”..

Sekarang kita coba akses melalui postman..

Silahkan konfigurasi seperti pada gambar diatas..

Ada 1 catatan penting, untuk mengakses route2 yang memiliki auth, pada tab header kita wajib
menambahkan 1 key yaitu “Accept“, dimana key tersebut kita kasih value “application/json“..

Kalo berhasil dijalankan, kita akan mendapatkan response “..Unauthenticated” seperti gambar
di atas, jangan anggap ini error yaa, muncul seperti itu karena kita tidak membawa token login
nya..
Sekarang kita coba login dulu menggunakan akun yang sudah kita daftarkan sebelumnya, tujuan
nya untuk mendapatkan token nya..

Kalo sudah berhasil login, silahkalian kalian copy token nya.. di copy semua nyaa yaa, tanpa
tanda kutip..

Sudah di copy token nya?? Kalo sudah coba akses lagi route test-auth yang sebelum nya, jangan
lupa token nya di paste dibagian header, silahkan konfigurasi seperti gambar dibawah ini:
Perhatikan dibagian header, kita menambahkan sebuah key baru dengan nama “Authorization“,
untuk value nya yaitu “Bearer tokennya“..

Jadi yang perlu diperhatikan, value dari key Authorization nya diisi dengan token yang sudah
kamu copy tadi, tapi di depan nya ditambahkan sebuah kata “Bearer “..

Kita lihat response nya, sudah bukan “.. Unauthenticated” lagi, tapi sudah success seperti
gambar diatas..

Belajar Menggunakan API


Barusan kita sudah belajar cara membuat API pada Laravel, sekaligus cara membuat Otentikasi
nya..

Sekarang kita akan coba belajar cara menggunakan API yang telah dibuat oleh developer lain..

Jadi API tersebut akan kita integrasikan kedalam sistem kita, dengan kata lain, hasil return atau
data-data yang dibawa oleh API tersebut akan kita proses didalam sistem kita..

Untuk mengakses API dari developer lain, kita akan menggunakan PHP CURL..

Apa itu PHP CURL?

PHP CURL adalah sebuah library PHP yang digunakan untuk mengirim atau mengambil data
melalui sebuah URL..

Jadi agar dapat berkomunikasi dengan aplikasi lain, aplikasi kita harus mampu melakukan HTTP
Request, salah satu cara nya adalah dengan PHP CURL..

Get API Purwakarta

Kita akan coba praktekan PHP CURL dengan get API Purwakarta..

Apa itu API Purwakarta? Yaps Purwakarta itu adalah nama daerah yang berada di provinsi Jawa
Barat..

Jadi API Purwakarta ini adalah sebuah API yang berisi informasi tentang Daerah Purwakarta..

Dokumentasi API Purwakarta ini berisi data :

 Komunitas
 Hotel
 Kuliner
 Pengumuman
 Rute Angkot
 Tempat Ibadah
 Wisata

Kita akan coba satu saja yaitu akan kita get data Kuliner yang ada di Purwakarta, nanti akan kita
buat view nya berupa table untuk menampilkan data tersebut..

Untuk URL Api Kuliner adalah sebagai berikut:

https://dev.farizdotid.com/api/purwakarta/kuliner

Langsung saja kita buat route nya terlebih dahulu didalam file web.php, kita buat nya didalam
file web.php yaa, bukan di file api.php..

Kenapa di web.php?? Karenan nanti kita akan mengakses nya dengan web browser..

../routes/web.php
....
Route::get('get-kuliner-purwakarta',[Api_controller::class,'kuliner']);  Error
....

Catatan WW:
Route::get('get-kuliner-purwakarta', 'App\Http\Controllers\Api_controller@kuliner');
Ini baru benarrrrr….

Pada route tersebut kita menggunakan method get, url nya kita buat ke “get-kuliner-
purwakarta“, masih menggunakan Api_controller, dan mengarah ke function kuliner..

Sekarang kita tambahkan function baru dengan nama kuliner didalam file Api_controller
seperti berikut:

....
public function kuliner(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://dev.farizdotid.com/api/purwakarta/kuliner",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 300,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
'Accept:application/json'
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$data = json_decode($response);
return view('purwakarta.kuliner',compact('data'));
}
....

Perhatikan script diatas..

Pada baris ke 3 kita membuat pembukaan php curl..

Kemudian pada baris ke 6, kita masukkan URL API Kuliner Purwakarta nya..

Baris ke 12 digunakan untuk memasukkan jenis method nya, yaitu method GET..

Baris ke 14 adalah header Accept nya..

Kemudian baris ke 23 kita buat variabel dengan nama data, guna nya untuk menampung hasil
response nya yang sudah di json_decode..

Kemudian baris ke 25 kita arahkan ke view purwakarta.kuliner, tidak lupa pula kita
mempassing variabel data nya kedalam view tersebut dengan perintah compact..

Sebelumnya saya sudah cek bentuk response dari API Kuliner purwakarta, saya akses dengan url
berikut “https://dev.farizdotid.com/api/purwakarta/kuliner” menggunakan method “GET“..

Saya berikan gambaran terlebih dahulu hasil response dari API Kuliner Purwakarta adalah
seperti berikut:

Jadi didalam API tersebut terdapat beberapa objek.. mulai dari data, kemudian kuliner, dan
didalam kuliner terdapat beberapa objek lagi seperti yang diberi kotak merah pada gambar
diatas..

Data yang berada di kotak merah tersebut lah yang akan kita tampilkan..

Sekarang coba kita buat view nya, dan isi seperti berikut..
../resources/views/purwakarta/kuliner.blade.php
<!DOCTYPE html>
<html>
<head>
<title>sangcahaya.id</title>
<link rel="stylesheet" type="text/css"
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Nama</th>
<th>Alamat</th>
<th>Jam Buka Tutup</th>
<th>Gambar</th>
<th>Kategori</th>
</tr>
</thead>
<tbody>
@foreach($data->kuliner as $dt)
<tr>
<td>{{$dt->nama}}</td>
<td>{{$dt->alamat}}</td>
<td>{{$dt->jam_buka_tutup}}</td>
<td>
<img src="{{$dt->gambar_url}}" style="width: 200px;">
</td>
<td>{{$dt->kategori}}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-
894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/
+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-
referrer"></script>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script>
</body>
</html>

Di atas, pada baris ke 14 kita buat struktur table nyaa..

Kemudian pada baris ke 25 kita foreach object data->kuliner, sesuai dengan response yang
dikirim oleh API Purwakarta nya..

Sekarang kalo kita akses url berikut:

http://127.0.0.1:8000/get-kuliner-purwakarta

Maka seharusnya akan tampil seperti berikut:

Akhir Kata
Terima kasih bagi teman-teman yang sudah mengikuti tutorial ini, semoga bermanfaat..

Dan jika ada kesulitan, silahkan bertanya di kolom komentar yaa..

https://sangcahaya.id/api-laravel/

Anda mungkin juga menyukai