Lompat ke konten
Kembali ke modul

API, Autentikasi, dan Keamanan · 1/7

Merancang HTTP API

Resource, method, status code, dan bentuk error yang benar-benar bisa dipakai frontend-mu.

Baca 28 menit

Setelah pelajaran ini kamu bisa

  • Merancang endpoint di sekitar resource alih-alih aksi
  • Memilih status code yang tepat tanpa perlu mencari
  • Mengembalikan error yang benar-benar bisa dipakai frontend
  • Menjelaskan kenapa idempotency penting untuk retry

API REST menamai benda, dan memakai method HTTP untuk kata kerjanya. Desain pemula yang paling umum menaruh kata kerjanya di URL, yang berarti setiap operasi baru butuh endpoint baru.

AksiKata kerja di URL (hindari)Berbasis resource (utamakan)
Daftar venueGET /getVenuesGET /venues
Satu venueGET /getVenue?id=42GET /venues/42
MembuatPOST /createVenuePOST /venues
MengubahPOST /updateVenuePATCH /venues/42
MenghapusPOST /deleteVenueDELETE /venues/42
Booking-nyaGET /getVenueBookings?id=42GET /venues/42/bookings

Status code

Kamu sudah menemuinya di modul 1. Ini keputusannya, sebagai urutan pertanyaan yang perlu ditanyakan.

Coba sendiri

Keputusannya sebagai sebuah function. Ini urutan berpikirnya, dan ia menghilangkan tebak-tebakan.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Body error yang bisa dipakai frontend

json
// ❌ Useless: which field? what do I show the user?
{ "error": "Validation failed" }

// ❌ Dangerous: leaks your schema and file paths to an attacker.
{ "error": "SQLITE_CONSTRAINT: UNIQUE constraint failed: users.name_key at /app/features/auth/users.ts:73" }

// ✅ Machine-readable code, plus per-field messages.
{
  "error": "validation_failed",
  "fields": {
    "nights": "Must be between 1 and 30",
    "email": "That does not look like an email address"
  }
}
Peta fields adalah bentuk dari pelajaran form — ia memungkinkan client menampilkan setiap pesan di sebelah input-nya sendiri. Kode error yang stabil memungkinkan client bercabang tanpa mencocokkan teks.

Idempotency

Kamu sudah menemui istilahnya di modul 1: melakukannya dua kali menghasilkan kondisi yang sama seperti sekali. Ini penting karena jaringan melakukan retry. Client mobile di kereta mengirim sebuah request, response-nya hilang, lalu ia mengirim lagi — server sekarang menerimanya dua kali.

Coba sendiri

Retry yang sama terhadap tiga desain. Hanya satu yang selamat.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Tugas praktik

Rancang endpoint untuk fitur progres di proyek ini: membaca progres milikmu sendiri, menandai sebuah pelajaran selesai, dan membatalkan tandanya. Tulis method, path, status code, dan body error untuk masing-masingnya. Lalu bandingkan desainmu dengan features/progress/actions.ts dan catat apa yang tidak lagi dibutuhkan karena memakai Server Action.

Hasil yang diharapkan

Sebuah URL, satu method per operasi — dan tidak perlu semua itu saat pemanggilnya adalah UI-mu sendiri.