
Laravel terus berkembang dengan fitur-fitur baru yang memudahkan pengembang dalam membangun aplikasi. Dengan dirilisnya Laravel 12, framework ini semakin optimal untuk membangun sistem manajemen konten (CMS) dan API backend. Berbagai pembaruan telah diterapkan agar proses pengembangan menjadi lebih cepat, efisien, dan sesuai dengan standar industri.
Bagi para developer yang ingin membuat aplikasi berbasis web atau API dengan struktur yang rapi dan mudah dipelihara, Laravel 12 menjadi pilihan yang sangat menarik.
Mempelajari Laravel 12 sebagai Backend Developer
Pada artikel ini, kita akan mempelajari dasar-dasar coding Laravel 12 sebagai seorang backend developer. Fokus utama kita adalah memahami bagaimana framework ini digunakan untuk menangani berbagai aspek backend, seperti pengelolaan database, autentikasi pengguna, dan pengembangan API.
Jika Anda ingin membangun sistem yang scalable dan mudah diintegrasikan dengan berbagai layanan lain, Laravel 12 menyediakan banyak fitur bawaan yang akan sangat membantu. Mari kita mulai perjalanan belajar Laravel 12 dengan memahami konsep-konsep dasarnya!
Membuat Proyek Laravel 12 Tanpa Starter Kit dan Konfigurasi Database MySQL
Untuk memulai proyek Laravel 12 tanpa menggunakan starter kit, pastikan Anda sudah menginstal Composer dan memiliki PHP versi terbaru. Berikut adalah langkah-langkahnya.
1. Membuat Proyek Laravel 12
Gunakan perintah berikut di terminal atau command prompt untuk membuat proyek baru:
composer create-project laravel/laravel my-laravel12-app
Perintah ini akan mengunduh dan menginstal Laravel 12 ke dalam folder my-laravel12-app
. Setelah proses selesai, masuk ke dalam direktori proyek:
cd my-laravel12-app
2. Mengatur File .env untuk Koneksi Database
Buka file .env yang ada di root proyek dan ubah bagian konfigurasi database sesuai dengan pengaturan MySQL yang Anda gunakan. Contohnya:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=root
DB_PASSWORD=yourpassword
Jika Anda belum memiliki database, buat database baru dengan perintah SQL berikut di MySQL:
CREATE DATABASE nama_database;
Pastikan nama database di .env sama dengan yang Anda buat.
3. Menjalankan Migrasi Database
Setelah konfigurasi database selesai, jalankan perintah berikut untuk membuat tabel-tabel default Laravel:
php artisan migrate
Jika terjadi error karena database belum terkoneksi dengan baik, pastikan MySQL berjalan dan periksa kembali pengaturan di file .env.
4. Menjalankan Proyek Laravel
Untuk menjalankan aplikasi Laravel, gunakan perintah berikut:
php artisan serve
Setelah perintah ini dijalankan, Anda bisa mengakses aplikasi Laravel melalui browser di alamat:
<http://127.0.0.1:8000>
Dengan langkah-langkah di atas, proyek Laravel 12 sudah siap digunakan tanpa menggunakan starter kit. Anda bisa langsung mulai mengembangkan fitur sesuai kebutuhan.
Membuat Model dan Migration Menggunakan Artisan
Dalam Laravel, model dan migration digunakan untuk mengelola struktur database dengan lebih mudah. Berikut adalah cara membuat model dan migration untuk tabel Category, Course, dan User.
1. Membuat Model dan Migration
Gunakan perintah berikut untuk membuat model beserta file migration-nya:
php artisan make:model Category -m
php artisan make:model Course -m
php artisan make:model User -m
Opsi -m
akan membuat file migration secara otomatis untuk setiap model.
2. Menyesuaikan Migration
Buka file migration yang ada di folder database/migrations dan edit sesuai kebutuhan.
Migration untuk Category
Buka file migration dengan nama yang mengandung create_categories_table dan ubah menjadi seperti berikut:
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration {
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('categories');
}
};
Migration untuk Course
Buka file migration dengan nama yang mengandung create_courses_table dan ubah menjadi seperti berikut:
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration {
public function up()
{
Schema::create('courses', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description')->nullable();
$table->unsignedBigInteger('category_id');
$table->timestamps();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});
}
public function down()
{
Schema::dropIfExists('courses');
}
};
Migration untuk User
Buka file migration dengan nama yang mengandung create_users_table dan ubah menjadi seperti berikut:
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration {
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
};
3. Menjalankan Migration
Setelah semua file migration selesai diedit, jalankan perintah berikut untuk mengeksekusi migration dan membuat tabel di database:
php artisan migrate
Jika berhasil, tabel categories, courses, dan users akan dibuat dalam database.
4. Menyesuaikan Model
Setelah tabel dibuat, sesuaikan model masing-masing agar mendukung hubungan antar tabel.
Model Category
Buka file app/Models/Category.php dan ubah isinya menjadi:
namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Database\\Eloquent\\Model;
class Category extends Model
{
use HasFactory;
protected $fillable = ['name', 'description'];
public function courses()
{
return $this->hasMany(Course::class);
}
}
Model Course
Buka file app/Models/Course.php dan ubah isinya menjadi:
namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Database\\Eloquent\\Model;
class Course extends Model
{
use HasFactory;
protected $fillable = ['title', 'description', 'category_id'];
public function category()
{
return $this->belongsTo(Category::class);
}
}
Model User
Buka file app/Models/User.php dan pastikan isinya seperti berikut:
namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Foundation\\Auth\\User as Authenticatable;
use Illuminate\\Notifications\\Notifiable;
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $fillable = ['name', 'email', 'password'];
}
Dengan langkah-langkah di atas, model dan migration untuk Category, Course, dan User sudah siap digunakan dalam proyek Laravel 12.
Membuat Seeder dan Factory untuk Category, Courses, dan Users
Seeder dan Factory di Laravel memungkinkan pengisian data dummy ke database dengan cepat untuk keperluan testing atau development. Berikut adalah langkah-langkah implementasi untuk Category, Courses, dan Users.
1. Membuat Factory
Gunakan perintah berikut untuk membuat factory untuk masing-masing tabel:
php artisan make:factory CategoryFactory --model=Category
php artisan make:factory CourseFactory --model=Course
php artisan make:factory UserFactory --model=User
Buka file database/factories/CategoryFactory.php dan sesuaikan dengan kode berikut:
namespace Database\\Factories;
use App\\Models\\Category;
use Illuminate\\Database\\Eloquent\\Factories\\Factory;
class CategoryFactory extends Factory
{
protected $model = Category::class;
public function definition()
{
return [
'name' => $this->faker->word(),
'description' => $this->faker->sentence(),
];
}
}
Buka file database/factories/CourseFactory.php dan sesuaikan dengan kode berikut:
namespace Database\\Factories;
use App\\Models\\Course;
use App\\Models\\Category;
use Illuminate\\Database\\Eloquent\\Factories\\Factory;
class CourseFactory extends Factory
{
protected $model = Course::class;
public function definition()
{
return [
'title' => $this->faker->sentence(),
'description' => $this->faker->paragraph(),
'category_id' => Category::factory(),
];
}
}
Buka file database/factories/UserFactory.php dan sesuaikan dengan kode berikut:
namespace Database\\Factories;
use App\\Models\\User;
use Illuminate\\Database\\Eloquent\\Factories\\Factory;
use Illuminate\\Support\\Str;
class UserFactory extends Factory
{
protected $model = User::class;
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => bcrypt('password'),
'remember_token' => Str::random(10),
];
}
}
2. Membuat Seeder
Gunakan perintah berikut untuk membuat seeder:
php artisan make:seeder CategorySeeder
php artisan make:seeder CourseSeeder
php artisan make:seeder UserSeeder
Buka file database/seeders/CategorySeeder.php dan isi dengan kode berikut:
namespace Database\\Seeders;
use Illuminate\\Database\\Seeder;
use App\\Models\\Category;
class CategorySeeder extends Seeder
{
public function run()
{
Category::factory()->count(10)->create();
}
}
Buka file database/seeders/CourseSeeder.php dan isi dengan kode berikut:
namespace Database\\Seeders;
use Illuminate\\Database\\Seeder;
use App\\Models\\Course;
use App\\Models\\Category;
class CourseSeeder extends Seeder
{
public function run()
{
Course::factory()->count(20)->create();
}
}
Buka file database/seeders/UserSeeder.php dan isi dengan kode berikut:
namespace Database\\Seeders;
use Illuminate\\Database\\Seeder;
use App\\Models\\User;
class UserSeeder extends Seeder
{
public function run()
{
User::factory()->count(5)->create();
}
}
3. Memanggil Seeder di DatabaseSeeder
Buka file database/seeders/DatabaseSeeder.php dan tambahkan pemanggilan seeder berikut:
namespace Database\\Seeders;
use Illuminate\\Database\\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call([
UserSeeder::class,
CategorySeeder::class,
CourseSeeder::class,
]);
}
}
4. Menjalankan Seeder
Jalankan perintah berikut untuk mengisi database dengan data dummy:
php artisan db:seed
Jika ingin mengosongkan database terlebih dahulu sebelum menjalankan seeder, gunakan perintah berikut:
php artisan migrate:fresh --seed
Dengan langkah-langkah ini, Seeder dan Factory telah dibuat untuk Category, Courses, dan Users, sehingga data dummy dapat dihasilkan dengan cepat untuk testing dan development.
Menerapkan Service Repository Pattern untuk Categories
Service Repository Pattern membantu dalam memisahkan logika bisnis dari controller, sehingga kode lebih bersih dan mudah dipelihara. Berikut adalah cara penerapannya untuk Categories di Laravel 12.
1. Membuat Repository
Buat folder app/Repositories, lalu buat file CategoryRepository.php di dalamnya:
namespace App\\Repositories;
use App\\Models\\Category;
class CategoryRepository
{
public function getAll()
{
return Category::all();
}
public function findById($id)
{
return Category::findOrFail($id);
}
public function create(array $data)
{
return Category::create($data);
}
public function update($id, array $data)
{
$category = Category::findOrFail($id);
$category->update($data);
return $category;
}
public function delete($id)
{
$category = Category::findOrFail($id);
return $category->delete();
}
}
2. Membuat Service
Buat folder app/Services, lalu buat file CategoryService.php di dalamnya:
namespace App\\Services;
use App\\Repositories\\CategoryRepository;
class CategoryService
{
protected $categoryRepository;
public function __construct(CategoryRepository $categoryRepository)
{
$this->categoryRepository = $categoryRepository;
}
public function getAllCategories()
{
return $this->categoryRepository->getAll();
}
public function getCategoryById($id)
{
return $this->categoryRepository->findById($id);
}
public function createCategory($data)
{
return $this->categoryRepository->create($data);
}
public function updateCategory($id, $data)
{
return $this->categoryRepository->update($id, $data);
}
public function deleteCategory($id)
{
return $this->categoryRepository->delete($id);
}
}
3. Membuat Controller
Gunakan perintah berikut untuk membuat controller:
php artisan make:controller CategoryController
Buka file app/Http/Controllers/CategoryController.php dan ubah isinya menjadi:
namespace App\\Http\\Controllers;
use App\\Services\\CategoryService;
use Illuminate\\Http\\Request;
class CategoryController extends Controller
{
protected $categoryService;
public function __construct(CategoryService $categoryService)
{
$this->categoryService = $categoryService;
}
public function index()
{
return response()->json($this->categoryService->getAllCategories());
}
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string'
]);
return response()->json($this->categoryService->createCategory($data));
}
public function show($id)
{
return response()->json($this->categoryService->getCategoryById($id));
}
public function update(Request $request, $id)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string'
]);
return response()->json($this->categoryService->updateCategory($id, $data));
}
public function destroy($id)
{
return response()->json(['deleted' => $this->categoryService->deleteCategory($id)]);
}
}
4. Menambahkan Route
Buka file routes/api.php dan tambahkan kode berikut untuk mengakses data kategori melalui API:
use App\\Http\\Controllers\\CategoryController;
Route::get('/categories', [CategoryController::class, 'index']);
Route::post('/categories', [CategoryController::class, 'store']);
Route::get('/categories/{id}', [CategoryController::class, 'show']);
Route::put('/categories/{id}', [CategoryController::class, 'update']);
Route::delete('/categories/{id}', [CategoryController::class, 'destroy']);
5. Testing API
Gunakan tool seperti Postman atau cURL untuk menguji API ini:
- Mendapatkan semua kategori
GET <http://127.0.0.1:8000/api/categories>
- Membuat kategori baru
POST <http://127.0.0.1:8000/api/categories> Content-Type: application/json { "name": "Web Development", "description": "Kategori kursus untuk pengembangan web" }
- Mendapatkan kategori berdasarkan ID
GET <http://127.0.0.1:8000/api/categories/1>
- Mengupdate kategori
PUT <http://127.0.0.1:8000/api/categories/1> Content-Type: application/json { "name": "Updated Web Development", "description": "Kategori kursus yang telah diperbarui" }
- Menghapus kategori
DELETE <http://127.0.0.1:8000/api/categories/1>
Dengan langkah-langkah ini, Service Repository Pattern telah diterapkan untuk tabel Categories, membuat kode lebih terstruktur dan mudah dipelihara.
Menerapkan Service Repository Pattern untuk Courses
Service Repository Pattern memisahkan logika bisnis dari controller, sehingga kode lebih terstruktur, mudah dipelihara, dan dapat digunakan kembali. Berikut adalah implementasi lengkap untuk Courses di Laravel 12.
1. Membuat Repository
Buat folder app/Repositories, lalu buat file CourseRepository.php di dalamnya:
namespace App\\Repositories;
use App\\Models\\Course;
class CourseRepository
{
public function getAll()
{
return Course::with('category')->get();
}
public function findById($id)
{
return Course::with('category')->findOrFail($id);
}
public function create(array $data)
{
return Course::create($data);
}
public function update($id, array $data)
{
$course = Course::findOrFail($id);
$course->update($data);
return $course;
}
public function delete($id)
{
$course = Course::findOrFail($id);
return $course->delete();
}
}
2. Membuat Service
Buat folder app/Services, lalu buat file CourseService.php di dalamnya:
namespace App\\Services;
use App\\Repositories\\CourseRepository;
class CourseService
{
protected $courseRepository;
public function __construct(CourseRepository $courseRepository)
{
$this->courseRepository = $courseRepository;
}
public function getAllCourses()
{
return $this->courseRepository->getAll();
}
public function getCourseById($id)
{
return $this->courseRepository->findById($id);
}
public function createCourse($data)
{
return $this->courseRepository->create($data);
}
public function updateCourse($id, $data)
{
return $this->courseRepository->update($id, $data);
}
public function deleteCourse($id)
{
return $this->courseRepository->delete($id);
}
}
3. Membuat Controller
Gunakan perintah berikut untuk membuat controller:
php artisan make:controller CourseController
Buka file app/Http/Controllers/CourseController.php dan ubah isinya menjadi:
namespace App\\Http\\Controllers;
use App\\Services\\CourseService;
use Illuminate\\Http\\Request;
class CourseController extends Controller
{
protected $courseService;
public function __construct(CourseService $courseService)
{
$this->courseService = $courseService;
}
public function index()
{
return response()->json($this->courseService->getAllCourses());
}
public function store(Request $request)
{
$data = $request->validate([
'title' => 'required|string|max:255',
'description' => 'nullable|string',
'category_id' => 'required|exists:categories,id'
]);
return response()->json($this->courseService->createCourse($data));
}
public function show($id)
{
return response()->json($this->courseService->getCourseById($id));
}
public function update(Request $request, $id)
{
$data = $request->validate([
'title' => 'required|string|max:255',
'description' => 'nullable|string',
'category_id' => 'required|exists:categories,id'
]);
return response()->json($this->courseService->updateCourse($id, $data));
}
public function destroy($id)
{
return response()->json(['deleted' => $this->courseService->deleteCourse($id)]);
}
}
4. Menambahkan Route
Buka file routes/api.php dan tambahkan kode berikut untuk mengakses data Courses melalui API:
use App\\Http\\Controllers\\CourseController;
Route::get('/courses', [CourseController::class, 'index']);
Route::post('/courses', [CourseController::class, 'store']);
Route::get('/courses/{id}', [CourseController::class, 'show']);
Route::put('/courses/{id}', [CourseController::class, 'update']);
Route::delete('/courses/{id}', [CourseController::class, 'destroy']);
5. Testing API
Gunakan tool seperti Postman atau cURL untuk menguji API ini:
- Mendapatkan semua courses
GET <http://127.0.0.1:8000/api/courses>
- Membuat course baru
POST <http://127.0.0.1:8000/api/courses> Content-Type: application/json { "title": "Belajar Laravel", "description": "Kursus Laravel untuk pemula", "category_id": 1 }
- Mendapatkan course berdasarkan ID
GET <http://127.0.0.1:8000/api/courses/1>
- Mengupdate course
PUT <http://127.0.0.1:8000/api/courses/1> Content-Type: application/json { "title": "Updated Laravel Course", "description": "Kursus Laravel dengan materi lebih lengkap", "category_id": 1 }
- Menghapus course
DELETE <http://127.0.0.1:8000/api/courses/1>
Dengan langkah-langkah ini, Service Repository Pattern telah diterapkan untuk Courses, membuat kode lebih modular, terstruktur, dan mudah dipelihara.
Menerapkan Authentication Sanctum API di Laravel 12 dan Membungkus Categories CRUD agar Hanya Bisa Diakses Setelah Login
Laravel Sanctum memungkinkan autentikasi API yang ringan dan sederhana. Berikut adalah cara implementasi autentikasi menggunakan Sanctum dan membatasi akses ke Categories CRUD agar hanya bisa diakses oleh pengguna yang sudah login.
1. Instalasi Laravel Sanctum
Jalankan perintah berikut untuk menginstal Sanctum:
composer require laravel/sanctum
Publikasikan konfigurasi Sanctum:
php artisan vendor:publish --provider="Laravel\\Sanctum\\SanctumServiceProvider"
Jalankan migrasi untuk membuat tabel personal_access_tokens:
php artisan migrate
Tambahkan HasApiTokens ke dalam model User di app/Models/User.php:
namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Foundation\\Auth\\User as Authenticatable;
use Illuminate\\Notifications\\Notifiable;
use Laravel\\Sanctum\\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
protected $fillable = ['name', 'email', 'password'];
}
Tambahkan middleware Sanctum di app/Http/Kernel.php pada bagian $middlewareGroups['api']
:
protected $middlewareGroups = [
'api' => [
\\Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,
],
];
2. Membuat Controller untuk Authentication
Gunakan perintah berikut untuk membuat AuthController:
php artisan make:controller AuthController
Buka file app/Http/Controllers/AuthController.php dan tambahkan kode berikut:
namespace App\\Http\\Controllers;
use App\\Models\\User;
use Illuminate\\Http\\Request;
use Illuminate\\Support\\Facades\\Hash;
use Illuminate\\Validation\\ValidationException;
class AuthController extends Controller
{
public function register(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|unique:users',
'password' => 'required|string|min:8',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json(['token' => $token], 201);
}
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' => ['The provided credentials are incorrect.'],
]);
}
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json(['token' => $token]);
}
public function logout(Request $request)
{
$request->user()->tokens()->delete();
return response()->json(['message' => 'Logged out']);
}
}
3. Membungkus Categories CRUD dalam Middleware Auth
Buka file routes/api.php dan ubah menjadi seperti berikut:
use App\\Http\\Controllers\\AuthController;
use App\\Http\\Controllers\\CategoryController;
use Illuminate\\Support\\Facades\\Route;
// Routes untuk Authentication
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
// Routes yang membutuhkan autentikasi
Route::middleware('auth:sanctum')->group(function () {
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/categories', [CategoryController::class, 'index']);
Route::post('/categories', [CategoryController::class, 'store']);
Route::get('/categories/{id}', [CategoryController::class, 'show']);
Route::put('/categories/{id}', [CategoryController::class, 'update']);
Route::delete('/categories/{id}', [CategoryController::class, 'destroy']);
});
4. Uji Coba API Menggunakan Postman
Register User
- Method:
POST
- URL:
http://127.0.0.1:8000/api/register
- Headers:
Content-Type: application/json
- Body (JSON):
{ "name": "John Doe", "email": "[email protected]", "password": "password123" }
- Response:
{ "token": "generated_token_here" }
Login User
- Method:
POST
- URL:
http://127.0.0.1:8000/api/login
- Headers:
Content-Type: application/json
- Body (JSON):
{ "email": "[email protected]", "password": "password123" }
- Response:
{ "token": "generated_token_here" }
Mencoba Akses CRUD Categories Tanpa Login
- Method:
GET
- URL:
http://127.0.0.1:8000/api/categories
- Response:
{ "message": "Unauthenticated." }
Akses CRUD Categories dengan Token
- Tambahkan Header:
Authorization: Bearer generated_token_here
- Mendapatkan Semua Categories
- Method:
GET
- URL:
http://127.0.0.1:8000/api/categories
- Method:
- Menambahkan Category Baru
- Method:
POST
- URL:
http://127.0.0.1:8000/api/categories
- Body (JSON):
{ "name": "Programming", "description": "Kategori untuk kursus pemrograman" }
- Method:
- Mengupdate Category
- Method:
PUT
- URL:
http://127.0.0.1:8000/api/categories/1
- Body (JSON):
{ "name": "Updated Programming", "description": "Kategori pemrograman terbaru" }
- Method:
- Menghapus Category
- Method:
DELETE
- URL:
http://127.0.0.1:8000/api/categories/1
- Method:
Logout User
- Method:
POST
- URL:
http://127.0.0.1:8000/api/logout
- Response:
{ "message": "Logged out" }
Setelah logout, jika mencoba akses Categories CRUD lagi tanpa login, API akan mengembalikan pesan "Unauthenticated."
Dengan langkah-langkah ini, Sanctum API Authentication telah diterapkan, dan akses ke Categories CRUD telah diamankan sehingga hanya pengguna yang login yang bisa mengaksesnya.
Kesimpulan yang Telah Dipelajari pada Artikel Ini
- Laravel Sanctum untuk API Authentication Laravel Sanctum digunakan untuk mengelola autentikasi berbasis token, memungkinkan pengguna untuk melakukan login, mendapatkan token akses, dan mengamankan API hanya untuk pengguna yang sudah terautentikasi.
- Implementasi Service Repository Pattern Dengan menerapkan Service Repository Pattern, logika bisnis dipisahkan dari controller, sehingga kode menjadi lebih modular, mudah dikelola, dan dapat digunakan kembali.
- Membatasi Akses API dengan Middleware Auth Middleware
auth:sanctum
digunakan untuk melindungi endpoint API, sehingga hanya pengguna yang telah login yang bisa mengakses CRUD Categories, sementara pengguna yang tidak terautentikasi akan mendapatkan pesan "Unauthenticated." - Pengujian API dengan Postman Setiap endpoint diuji menggunakan Postman, termasuk:
- Register dan login untuk mendapatkan token.
- Menggunakan token untuk mengakses Categories CRUD.
- Logout dan mencoba kembali mengakses API tanpa login untuk memastikan proteksi berjalan dengan baik.
- Pengelolaan User Authentication dan Logout
- Saat pengguna login, Laravel Sanctum menghasilkan personal access token yang digunakan untuk mengakses API.
- Logout akan menghapus semua token aktif pengguna, sehingga akses API menjadi tidak valid hingga pengguna login kembali.
Dengan penerapan Laravel Sanctum dan Service Repository Pattern, API menjadi lebih aman, terstruktur, dan mudah dipelihara untuk proyek-proyek berbasis backend Laravel.
Penutup dan Saran
Membangun API yang aman dan terstruktur dengan Laravel tidak hanya membutuhkan pemahaman tentang framework itu sendiri, tetapi juga penerapan praktik terbaik seperti Service Repository Pattern dan Sanctum Authentication. Dengan menerapkan metode ini, kita bisa membuat aplikasi yang lebih scalable, mudah dipelihara, dan siap untuk produksi.
Namun, belajar sendiri terkadang bisa membingungkan dan memakan waktu. Untuk itu, bagi para web developer yang ingin meningkatkan skill mereka secara lebih efektif, belajar bersama mentor expert di BuildWithAngga adalah pilihan yang tepat.
Di BuildWithAngga, Anda bisa mendapatkan berbagai benefit eksklusif, seperti:
✅ Akses Materi Seumur Hidup – Belajar kapan saja tanpa batasan waktu.
✅ Sertifikat Kelulusan – Sebagai bukti keahlian untuk meningkatkan kredibilitas Anda.
✅ Portfolio Berkualitas – Membangun proyek nyata yang bisa menjadi modal utama untuk mendapatkan pekerjaan impian.
Jangan ragu untuk terus mengembangkan skill Anda bersama mentor terbaik! 🚀