Membangun RESTful API Powerfull dengan Laravel 11 & Sanctum: Panduan dari Nol

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”.

  1. 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();
});
				
			

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.

  1. 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.

  1. Register: Kirim POST request ke {{BaseUrl}}/api/register dengan name, email, dan password.
  2. Login: Kirim POST request ke{{BaseUrl}}/api/login
    dengan email dan password. Anda akan menerima access_token.
  3. Akses Rute Terlindungi: Kirim GET request ke {{BaseUrl}}/api/products. Tambahkan Header Authorization dengan nilai Bearer <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 :

Repository Github

 

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Promo Shopee

CARI ARTIKEL DISINI

KATEGORI ARTIKEL

Capturing moments with creativity and precision.

Crafting Timeless Images, one shot at a time.

©2025, Yoda Creative Work . All Rights Reserved