POST: Membuat Todo dari Body JSON
Membaca body request dengan json.Decoder, menyimpan data, dan menjawab 201 Created.
Alur endpoint POST /todos
- Client mengirim body JSON:
{"title":"Belajar Go"} - Server membaca body itu ke sebuah struct (decode).
- Server menyimpan data baru ke store.
- Server menjawab 201 Created beserta data yang baru dibuat (lengkap dengan ID).
Membaca body request
Body request ada di r.Body. Gunakan json.NewDecoder untuk mengubahnya menjadi struct:
var in struct {
Title string `json:"title"`
}
err := json.NewDecoder(r.Body).Decode(&in)
if err != nil {
writeJSON(w, http.StatusBadRequest, map[string]string{"error": "JSON tidak valid"})
return
}
inadalah struct tanpa nama (anonim) khusus untuk input. Memisahkan struct input dariTodomencegah client mengisiidataudonesendiri.&in(alamat/pointer) wajib agarDecodebisa mengisi isi struct.- JSON rusak (
{rusak) membuatDecodemengembalikan error → jawab 400.
200 atau 201?
201 Created adalah status standar untuk "data baru berhasil dibuat". Gunakan http.StatusCreated.
Mencoba dengan curl
curl -i -X POST http://localhost:8080/todos \
-H "Content-Type: application/json" \
-d '{"title":"Belajar Go"}'