GET: Daftar Todo & Detail per ID

Membuat endpoint GET /todos dan GET /todos/{id}, termasuk jawaban 404 saat data tidak ada.

Part 6 dari 17 ± 35 menit Gratis

Dua endpoint untuk membaca data

EndpointFungsiRespons
GET /todosSemua todo200 + array JSON
GET /todos/{id}Satu todo200 + objek JSON, atau 404

Handler sebagai method dari struct

Handler butuh akses ke Store. Caranya: simpan Store di sebuah struct, lalu jadikan handler sebagai method dari struct itu. Method tetap memenuhi bentuk handler (w, r).

type API struct {
    store *Store
}

func (a *API) List(w http.ResponseWriter, r *http.Request) {
    writeJSON(w, http.StatusOK, a.store.All())
}

Mendaftarkannya: mux.HandleFunc("GET /todos", api.List). Perhatikan: api.List tanpa tanda kurung.

Daftar kosong harus [], bukan null

Store kita memakai make([]Todo, 0, ...) sehingga saat kosong hasilnya []. Slice nil akan di-encode menjadi null yang bisa membuat client error.

Membaca ID dari alamat

r.PathValue("id") selalu string. Ubah ke angka dengan strconv.Atoi, yang mengembalikan dua nilai: angkanya dan error (bila teks bukan angka, misal /todos/abc).

id, err := strconv.Atoi(r.PathValue("id"))
if err != nil {
    // 400 Bad Request: permintaan salah format
}

Dua jenis "tidak berhasil"

  • 400 Bad Request — kesalahan ada pada permintaan client (/todos/abc).
  • 404 Not Found — format benar, tetapi datanya tidak ada (/todos/99). Kita tahu dari ok == false di store.Get.

Setelah menjawab error, jangan lupa return supaya kode di bawahnya tidak ikut berjalan.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X