Membangun RESTful API adalah salah satu skill paling esensial bagi backend developer saat ini. API menjadi jembatan yang menghubungkan server dengan berbagai klien, mulai dari aplikasi web (SPA), aplikasi mobile, hingga perangkat IoT. Laravel 11, versi terbaru dari framework PHP terpopuler, hadir dengan pendekatan yang lebih ramping, menjadikannya pilihan ideal untuk membangun API yang cepat dan terstruktur.
Panduan ini akan membawa Anda melalui proses pembuatan RESTful API dari nol menggunakan Laravel 11, dan mengamankannya menggunakan Laravel Sanctum untuk otentikasi berbasis token.
Langkah 1: Persiapan Proyek Laravel 11
Pertama, pastikan Anda memiliki Composer dan PHP (versi 8.2+) terinstal. Buat proyek Laravel baru melalui terminal:
composer create-project laravel/laravel api-proyek-saya
cd api-proyek-saya
Selanjutnya, konfigurasikan koneksi database Anda di file .env
. Untuk panduan ini, kita akan menggunakan SQLite untuk kesederhanaan. Buat file database.sqlite
di dalam folder database/
.
Ubah file .env
Anda:
DB_CONNECTION=sqlite
# Hapus atau beri komentar pada baris DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, dan DB_PASSWORD lainnya
Langkah 2: Model, Migrasi, dan Controller
Kita akan membuat API untuk mengelola data “Produk”.
Buat Model dan Migrasi: Jalankan perintah ini untuk membuat model
Product
beserta file migrasinya.
php artisan make:model Product -m
2 . Definisikan Skema Database: Buka file migrasi yang baru dibuat di database/migrations/
dan definisikan skema tabel produk.
// dalam method up()
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->decimal('price', 8, 2);
$table->timestamps();
});
Diskon 10%
Diskon 10%
Diskon 10%
Diskon 10%
Diskon 10%
3 . Jalankan Migrasi
migrasi disini selain melakukan migrasi untuk database namun juga melakukan data migrasi untuk membuat routes api berbeda dengan versi sebelumnya versi laravel 11 ini belum terinstall api routes sehingga kita perlu menginstallnya terlebih dahulu, eksekusi syntax di bawah ini:
##UNtuk melakukan migrasi database
php artisan migrate
#Untuk mengaktifkan Route api
php artisan install:api
4. Buat Controller API: Buat controller khusus untuk API. Flag --api
akan menghasilkan controller tanpa method create
dan edit
yang tidak diperlukan untuk API.
php artisan make:controller Api/ProductController --api
Langkah 3: Mendefinisikan Rute API
Buka file routes/api.php
dan daftarkan rute untuk resource produk Anda. Laravel 11 menyederhanakan ini; file ini mungkin kosong pada awalnya.
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\ProductController;
// Rute untuk resource produk
Route::apiResource('products', ProductController::class);
Perintah apiResource
secara otomatis akan membuatkan rute untuk endpoint standar CRUD (index, store, show, update, destroy).
Langkah 4: Implementasi Logika CRUD di Controller
Sekarang, isi ProductController
(app/Http/Controllers
/Api/ProductController.php
)
dengan logika untuk setiap method.
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ProductController extends Controller
{
// Menampilkan semua produk
public function index()
{
return response()->json(Product::all(), 200);
}
// Menambahkan produk baru
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'price' => 'required|numeric',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$product = Product::create($request->all());
return response()->json($product, 201);
}
// Menampilkan satu produk
public function show(Product $product)
{
return response()->json($product, 200);
}
// Memperbarui produk
public function update(Request $request, Product $product)
{
$validator = Validator::make($request->all(), [
'name' => 'string|max:255',
'description' => 'nullable|string',
'price' => 'numeric',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$product->update($request->all());
return response()->json($product, 200);
}
// Menghapus produk
public function destroy(Product $product)
{
$product->delete();
return response()->json(null, 204);
}
}
Jangan lupa untuk menambahkan properti $fillable
di model Product
(app/Models/Product.php
):
protected $fillable = ['name', 'description', 'price'];
Langkah 5: Mengamankan API dengan Laravel Sanctum
Sekarang, kita akan menambahkan otentikasi berbasis token.
Instal Sanctum:
composer require laravel/sanctum
2. Publish dan Migrasi:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
3. Buat Controller Otentikasi:
php artisan make:controller Api/AuthController
Isi AuthController.php
dengan logika untuk registrasi dan login.
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class AuthController extends Controller
{
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return response()->json(['message' => 'User registered successfully'], 201);
}
public function login(Request $request)
{
$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json(['message' => 'Invalid credentials'], 401);
}
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json(['access_token' => $token, 'token_type' => 'Bearer']);
}
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Logged out successfully']);
}
}
4. Tambahkan Rute Otentikasi dan Proteksi: Kembali ke routes/api.php
, tambahkan rute untuk otentikasi dan lindungi rute produk dengan middleware auth:sanctum
.
// (Tambahkan di atas file routes/api.php)
use App\Http\Controllers\Api\AuthController;
// Rute otentikasi publik
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
// Rute yang dilindungi
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('products', ProductController::class);
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/user', function (Request $request) {
return $request->user();
});
});
Pastikan model User
menggunakan trait HasApiTokens
dari Sanctum.
// app/Models/User.php
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
// ...
}
Langkah 6: Menguji API
Gunakan tools seperti Postman atau Insomnia untuk menguji endpoint Anda.
- Register: Kirim
POST
request ke {{BaseUrl}}/api/register
denganname
,email
, danpassword
. - Login: Kirim
POST
request ke{{BaseUrl}}
/api/login
denganemail
danpassword
. Anda akan menerimaaccess_token
. - Akses Rute Terlindungi: Kirim
GET
request ke {{BaseUrl}}/api/products
. TambahkanHeader
Authorization
dengan nilaiBearer <token_anda>
. Anda sekarang seharusnya bisa melihat daftar produk.
Anda sekarang telah berhasil membangun sebuah RESTful API yang fungsional dan aman menggunakan Laravel 11 dan Sanctum. Pendekatan minimalis Laravel 11 mempercepat proses setup, sementara Sanctum menyediakan solusi otentikasi yang ringan dan kuat, sempurna untuk SPA, aplikasi mobile, dan lainnya. Dari sini, Anda bisa terus mengembangkan API Anda dengan fitur-fitur yang lebih kompleks.
Untuk Detail Kode yang sudah jadi ada di sini :
Bagikan artikel ini ke:

Tentang Penulis
Yoda P Gunawan
Sarjana ekonomi dari jurusan manajemen dan bisnis yang sekarang lebih sering bekerja di bidang teknologi sebagai programmer & terkadang menjadi desainer untuk beberapa project.Pernah membuka Konsultan bisnis sendiri , dan juga bekerja untuk beberapa perusahaan, baik nasional maupun multinasional. Waktu berlalu saat ini penulis kembali merintis karir lagi dan mencari peluang rejeki di era yang dinamis seperti saat ini.