PUT & DELETE: Mengubah dan Menghapus Todo
Melengkapi CRUD: memperbarui data dengan PUT dan menghapus dengan DELETE yang menjawab 204 No Content.
Melengkapi CRUD
CRUD adalah empat operasi dasar data: Create (POST), Read (GET), Update (PUT), Delete (DELETE). Dua yang tersisa:
| Endpoint | Sukses | Gagal |
|---|---|---|
PUT /todos/{id} | 200 + todo terbaru | 404 bila ID tidak ada, 400 bila JSON rusak |
DELETE /todos/{id} | 204 No Content (tanpa body) | 404 bila ID tidak ada |
PUT: mengganti data
PUT bermakna "ganti data ini dengan versi baru", sehingga client mengirim seluruh isi yang bisa diubah (di sini title dan done). Handler-nya mirip POST, hanya saja datanya sudah ada:
var in struct {
Title string `json:"title"`
Done bool `json:"done"`
}
json.NewDecoder(r.Body).Decode(&in)
todo, ok := a.store.Update(id, in.Title, in.Done)
if !ok { /* 404 */ }
writeJSON(w, http.StatusOK, todo)
DELETE: menghapus data
Di Store, penghapusan memakai fungsi bawaan delete(map, kunci):
delete(s.items, id)
Di handler, setelah berhasil kita tidak punya data untuk dikirim, jadi jawab 204 No Content tanpa body:
w.WriteHeader(http.StatusNoContent)
Helper parseID
Karena membaca {id} dipakai di GET, PUT, dan DELETE, kode di bab 6 dipindahkan ke fungsi parseID (sudah disediakan di latihan). Fungsi ini mengembalikan (id, true) bila sukses, atau langsung menjawab 400 dan mengembalikan (0, false).
PUT vs PATCH
PUT mengganti semua field; PATCH hanya mengubah field yang dikirim. Untuk kursus ini kita cukup memakai PUT.