Routes - Alamat API Kita
Routes adalah "alamat" untuk setiap endpoint API. Format yang kita
gunakan:
Format Standar Route
Route::method('uri', [Controller::class,
'method'])->name('route.name');
✅ Contoh Benar:
// CRUD Routes - gunakan apiResource
Route::apiResource('products', ProductController::class);
// Custom Routes - format jelas
Route::post('posts/{post}/publish', [PostController::class, 'publish'])
->name('posts.publish');
Controllers - Manajer Request
Controller tugasnya: terima request, validasi, panggil service,
return response
Checklist Controller yang Baik
- ✓ Validasi input di awal
- ✓ Panggil service untuk logic bisnis
- ✓ Handle exception dengan benar
- ✓ Return response yang konsisten
✅ Contoh Benar:
public function store(Request $request)
{
try {
// 1. Validasi
$data = $request->validate([...]);
// 2. Panggil service
$user = $this->userService->create($data);
// 3. Return response
return response()->json([
'success' => true,
'data' => $user
], 201);
} catch (Exception $e) {
return response()->json([
'success' => false
], 422);
}
}
Services - Pusat Logic Bisnis
Service adalah tempat semua logic bisnis (yang "berat") dikerjakan
Struktur Folder Service
📁 app/Services/
📁 User/
📄 UserService.php
📁 Payment/
📄 PaymentService.php
✅ Contoh Service yang Baik:
public function create(array $data): User
{
// Logic bisnis pembuatan user
$data['password'] = Hash::make($data['password']);
$user = User::create($data);
// Trigger event
event(new UserRegistered($user));
return $user;
}
Models - Representasi Data
Model adalah "cermin" dari tabel database. Isinya harus lengkap!
Keamanan Model
-
• Selalu gunakan
$fillable
-
• Gunakan
$casts untuk
tipe data
- • Define relationships dengan jelas
✅ Model Lengkap & Aman:
class User extends Model
{
// Mass assignment protection
protected $fillable = [
'name', 'email', 'password'
];
// Type casting
protected $casts = [
'email_verified_at' => 'datetime',
'is_active' => 'boolean'
];
// Relationships
public function posts()
{
return $this->hasMany(Post::class);
}
}