Tutorial Membuat API dengan Laravel dan Sanctum

Laravel adalah salah satu framework PHP yang paling populer dan powerful untuk pengembangan aplikasi web, termasuk API. Laravel Sanctum adalah paket otentikasi sederhana yang memungkinkan kita untuk mengamankan API dengan token. Dalam tutorial ini, kita akan membahas cara membuat API dengan Laravel dan Sanctum secara lengkap, mulai dari instalasi hingga implementasi otentikasi dan CRUD API.
1. Persiapan Proyek Laravel
1.1 Instalasi Laravel
Pastikan Anda sudah menginstal Composer di sistem Anda. Jika belum, unduh dari Composer.
Jalankan perintah berikut untuk membuat proyek Laravel baru:
composer create-project laravel/laravel api-laravel-sanctum
Masuk ke direktori proyek:
cd api-laravel-sanctum
Jalankan aplikasi:
php artisan serve
Laravel sekarang dapat diakses di http://127.0.0.1:8000
.
2. Instalasi dan Konfigurasi Sanctum
Sanctum harus diinstal untuk mengelola autentikasi berbasis token. Jalankan perintah berikut:
composer require laravel/sanctum
Kemudian, jalankan perintah berikut untuk mempublikasikan konfigurasi Sanctum:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Selanjutnya, migrasikan database untuk membuat tabel terkait:
php artisan migrate
Tambahkan HasApiTokens
pada model User
agar dapat menggunakan token API:
use Laravel\Sanctum\HasApiTokens; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiTokens, Notifiable; }
Tambahkan middleware Sanctum di app/Http/Kernel.php
pada bagian api
:
protected $middlewareAliases = [ 'auth:sanctum' => \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, ];
Terakhir, aktifkan middleware api
di config/sanctum.php
:
'guard' => ['web', 'api'],
3. Membuat API Autentikasi (Register, Login, Logout)
3.1 Membuat Controller Autentikasi
Buat controller untuk autentikasi dengan Sanctum:
php artisan make:controller AuthController
Buka app/Http/Controllers/AuthController.php
dan tambahkan kode berikut:
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\ValidationException; class AuthController extends Controller { // REGISTER public function register(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'access_token' => $token, 'token_type' => 'Bearer', ]); } // LOGIN public function login(Request $request) { $request->validate([ 'email' => 'required|string|email', 'password' => 'required|string', ]); $user = User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { throw ValidationException::withMessages([ 'email' => ['Email atau password salah.'], ]); } $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'access_token' => $token, 'token_type' => 'Bearer', ]); } // LOGOUT public function logout(Request $request) { $request->user()->tokens()->delete(); return response()->json(['message' => 'Logout berhasil']); } }
3.2 Menambahkan Route API
Tambahkan route untuk autentikasi di routes/api.php
:
use App\Http\Controllers\AuthController; Route::post('/register', [AuthController::class, 'register']); Route::post('/login', [AuthController::class, 'login']); Route::middleware('auth:sanctum')->group(function () { Route::post('/logout', [AuthController::class, 'logout']); });
4. Membuat API CRUD untuk Data Produk
4.1 Membuat Model dan Migration
Buat model dan migration untuk produk:
php artisan make:model Product -m
Edit file migration di database/migrations/xxxx_xx_xx_xxxxxx_create_products_table.php
:
public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->text('description'); $table->decimal('price', 10, 2); $table->timestamps(); }); }
Jalankan migrasi:
php artisan migrate
4.2 Membuat Controller Produk
Buat controller:
php artisan make:controller ProductController
Tambahkan kode berikut di ProductController.php
:
namespace App\Http\Controllers; use App\Models\Product; use Illuminate\Http\Request; class ProductController extends Controller { public function index() { return response()->json(Product::all()); } public function store(Request $request) { $request->validate([ 'name' => 'required', 'description' => 'required', 'price' => 'required|numeric', ]); $product = Product::create($request->all()); return response()->json($product, 201); } public function show(Product $product) { return response()->json($product); } public function update(Request $request, Product $product) { $product->update($request->all()); return response()->json($product); } public function destroy(Product $product) { $product->delete(); return response()->json(null, 204); } }
4.3 Menambahkan Route API untuk Produk
Tambahkan route di routes/api.php
:
use App\Http\Controllers\ProductController; Route::middleware('auth:sanctum')->group(function () { Route::get('/products', [ProductController::class, 'index']); Route::post('/products', [ProductController::class, 'store']); Route::get('/products/{product}', [ProductController::class, 'show']); Route::put('/products/{product}', [ProductController::class, 'update']); Route::delete('/products/{product}', [ProductController::class, 'destroy']); });
5. Testing API
Gunakan Postman atau cURL untuk menguji API. Pastikan Anda menyertakan token Bearer di header Authorization untuk endpoint yang memerlukan autentikasi.
Kesimpulan
Dalam tutorial ini, kita telah:
• Menginstal Laravel dan Sanctum
• Mengimplementasikan autentikasi dengan register, login, dan logout
• Membuat API CRUD untuk produk
• Mengamankan API dengan token
Sekarang, Anda memiliki API yang dapat digunakan untuk aplikasi mobile atau frontend berbasis Vue/React!