Laravel · Bab 18
Proyek Akhir API: Tantangan Mandiri
Dua tantangan tanpa panduan langkah — membuka tabel Supplier lewat API lengkap dengan relasinya, lalu membangun API orisinal minimal tiga tabel dengan login token dan role.
Setelah Lab 8–12, Smart Retail App punya API yang bisa dipakai aplikasi lain. Bab ini berisi dua tantangan tanpa panduan langkah demi langkah. Kerjakan di proyek Laravel di laptopmu, lalu uji dengan Thunder Client, Postman, atau feature test dari Bab 17. Setiap pengujian galat (401, 403, 404, 422, 429) mengirim header Accept: application/json.
Tantangan 1: API Supplier
Tantangan 1 di Bab 11 menambahkan tabel suppliers dan kolom supplier_id pada products. Kalau belum, kerjakan dulu bagian migrasi, model, dan relasinya. Sekarang buka data itu lewat API:
- Resource. Buat
SupplierResourceberisiid,name,phone,address,products_count(memakaiwhenCounted), danproducts(memakaiProductResource::collection($this->whenLoaded('products'))). Tambahkansupplier(hanyaiddanname, memakaiwhenLoaded) keProductResource. - Controller dan rute. Buat
Api/V1/SupplierControllerdenganapiResource('suppliers', ...)di grupv1.index()memakaiwithCount('products')danpaginate(),show()memuatproducts. - Validasi. Buat
SupplierRequest:namewajib dan unik (abaikan supplier yang sedang diubah),phonewajib dan maksimal 20 karakter,addressboleh kosong. Tambahkan aturansupplier_id(nullable|exists:suppliers,id) keProductRequest. - Keamanan.
indexdanshowterbuka;storedanupdatewajib token (auth:api);destroyhanya untuk roleadminlewatSupplierPolicy. - Muat relasi di produk.
GET /api/v1/productsmemuatsuppliersekaligus (with(['category', 'supplier'])), bukan satu kueri per produk.
Tantangan 2: API Orisinal
Pakai salah satu opsi di Tantangan 2 Bab 11 (Motorcycle Workshop, School Lab Equipment Loan, Outpatient Clinic) atau skenario bisnis kontekstual lain. Bangun API JSON dengan minimal 3 tabel (2 master, 1 transaksi) yang memenuhi semua syarat berikut:
- Rute ber-versi
/api/v1/...denganapiResourceuntuk setiap tabel. - JsonResource untuk setiap model; relasi transaksi ke kedua master dimuat dengan
whenLoaded. - FormRequest untuk setiap endpoint tulis, dengan pesan 422 per kolom.
- Pagination dan pencarian: daftar transaksi memakai
paginate()dan minimal satu filter?search=atau?sort=dengan daftar putih kolom. - Login token:
POST /api/loginmengembalikan token; endpoint tulis memakaiauth:api(atauauth:sanctumbila kamu mengerjakan Jobsheet Laptop Sanctum di Bab 15). - Role: minimal dua role; satu aksi (misalnya menghapus transaksi) hanya boleh untuk role tertentu lewat Policy, dan ditolak 403 untuk role lain.
- Rate limit pada login dengan
throttle. - Feature test minimal lima: satu sukses (200/201), satu tanpa token (401), satu role salah (403), satu data tidak valid (422), dan satu data tidak ada (404). Pakai
getJson()/postJson()agarAccept: application/jsonterkirim otomatis.