WebTech Interaktif

Laravel · Bab 19

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–13 (termasuk transaksi kasir di Bab 17) dan kebiasaan produksi di Bab 18, 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 18. 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:

  1. Resource. Buat SupplierResource berisi id, name, phone, address, products_count (memakai whenCounted), dan products (memakai ProductResource::collection($this->whenLoaded('products'))). Tambahkan supplier (hanya id dan name, memakai whenLoaded) ke ProductResource.
  2. Controller dan rute. Buat Api/V1/SupplierController dengan apiResource('suppliers', ...) di grup v1. index() memakai withCount('products') dan paginate(), show() memuat products.
  3. Validasi. Buat SupplierRequest: name wajib dan unik (abaikan supplier yang sedang diubah), phone wajib dan maksimal 20 karakter, address boleh kosong. Tambahkan aturan supplier_id (nullable|exists:suppliers,id) ke ProductRequest.
  4. Keamanan. index dan show terbuka; store dan update wajib token (auth:api); destroy hanya untuk role admin lewat SupplierPolicy.
  5. Muat relasi di produk. GET /api/v1/products memuat supplier sekaligus (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/... dengan apiResource untuk 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/login mengembalikan token; endpoint tulis memakai auth:api (atau auth:sanctum bila 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() agar Accept: application/json terkirim otomatis.