HTTP method adalah kata kerja di depan setiap request: dia bilang mau diapakan resource di alamat itu. Alamatnya kata benda (/books/2), method-nya kata kerja (GET, DELETE). Bayangin rak di toko buku. Di rak yang sama kamu bisa melihat isinya, menaruh buku baru, mengganti satu buku dengan edisi baru, membetulkan label harganya saja, atau menarik buku dari rak. Raknya sama, yang beda cuma apa yang kamu lakukan.
🧪 Tebakan cepat: tombol Simpan di form admin Toko Buku ke-klik dua kali, dan tiap klik mengirim
POST /booksyang sama persis. Ada berapa buku baru di server? Tebak dulu, jawabannya ada di bagian "Aman dan idempoten".
Lima method di API Toko Buku
| Method | Artinya | Contoh | Jawaban kalau berhasil |
|---|---|---|---|
GET |
ambil | GET /books/2 |
200 OK + bukunya |
POST |
buat baru | POST /books |
201 Created + header Location: /books/4 |
PUT |
ganti seluruhnya | PUT /books/2 |
200 OK + buku versi baru |
PATCH |
ubah sebagian | PATCH /books/2 |
200 OK + buku versi baru |
DELETE |
hapus | DELETE /books/2 |
204 No Content, tanpa body |
GETuntuk mengambil data,POSTuntuk menambah data baru,DELETEuntuk menghapus.POSTdikirim ke koleksinya (/books), karena server yang memilih nomor buku barunya. Jawabannya201 Created, dan headerLocationmemberi alamat buku baru itu.PUT,PATCH, danDELETEdikirim ke satu buku (/books/2), karena kamu menunjuk buku yang mana.DELETEyang berhasil biasanya dijawab204 No Content(sukses, gak ada body). Kalau server mengirim body yang mengonfirmasi, misalnya buku yang barusan dihapus, status-nya200 OK.
Method yang gak cocok dengan alamatnya dijawab 405 Method Not Allowed plus header Allow. Contoh: PUT /books (tanpa nomor) dijawab Allow: GET, POST.
PUT mengganti, PATCH menambal
Buku nomor 2 di server, sebelum diubah:
{"id": 2, "title": "Bumi Manusia", "author_id": 2, "price": 125000, "stock": 0}
PATCH /books/2 dengan body {"stock": 7} cuma mengubah yang dikirim:
{"id": 2, "title": "Bumi Manusia", "author_id": 2, "price": 125000, "stock": 7}
PUT /books/2 dengan body {"title": "Bumi Manusia", "price": 99000} mengganti seluruh isinya dengan body itu:
{"id": 2, "title": "Bumi Manusia", "price": 99000}
author_id dan stock hilang, karena gak ikut dikirim. API yang lebih ketat akan menolak PUT yang kurang lengkap. Aturannya: PUT kirim semua field, PATCH kirim yang berubah saja.
Aman dan idempoten
Dua sifat yang menentukan kapan sebuah request boleh diulang:
- Aman (safe): gak mengubah data di server.
GETaman. - Idempoten: dikirim sekali atau sepuluh kali, data akhirnya di server sama.
GET,PUT, danDELETEidempoten.POSTtidak.PATCHgak dijamin.
| Request | Kirim pertama | Kirim kedua | Data akhir |
|---|---|---|---|
POST /books |
201, buku 4 dibuat |
201, buku 5 dibuat |
dua buku baru yang isinya sama |
PUT /books/2 |
200 |
200 |
sama: price 99000 |
DELETE /books/2 |
204 |
404 |
sama: buku 2 gak ada |
Jadi tombol yang ke-klik dua kali bikin dua buku baru, nomor 4 dan 5. Itu jawaban tebakannya. Perhatikan DELETE: balasan keduanya beda (404), tapi data di server sama, jadi tetap idempoten. Idempoten itu soal data, bukan soal balasan.
Ini penting waktu jaringan putus di tengah jalan. PUT dan DELETE aman dikirim ulang. POST yang dikirim ulang bisa bikin data dobel.
GET hanya untuk membaca
GET /api/siswa/5?nama=Budi+Baru kelihatannya praktis, tapi salah: GET gak boleh mengubah data. Browser, mesin pencari, dan cache boleh mengirim GET kapan saja, misalnya saat memuat halaman lebih dulu, tanpa ada orang yang berniat mengubah apa pun. Untuk mengubah nama, kirim PATCH /api/siswa/5 dengan body {"nama": "Budi Baru"}.
Latihan: empat endpoint untuk books
app di latihan punya satu function per method. Bentuknya selalu sama:
app.get("/books", (req, res) => {
res.json({ method: "GET" });
});
app.post("/books", (req, res) => {
res.status(201).json({ method: "POST" });
});
app.get,app.post,app.put,app.deletemendaftarkan endpoint untuk method itu.res.status(201)memasang status dulu, lalu.json(...)mengirim body-nya. Tanpares.status, status-nya200."/books/:id"dengan titik dua artinya bagian itu boleh diisi apa saja, dan isinya dibaca darireq.params.id. Pelajaran berikutnya membahasnya.- Di latihan ini
DELETEmenjawab200dengan body JSON{"method": "DELETE", "id": ...}, karena dia mengirim body konfirmasi.
⚠️ Jebakan yang sering ketemu
- Semuanya pakai POST.
POST /books/2/deletemenyembunyikan aksinya di URL. TulisDELETE /books/2. - POST yang berhasil dijawab 200. Data baru dijawab
201 Created, idealnya plus headerLocation. - PUT dengan body setengah. Mau ubah stok doang? Pakai
PATCH, supaya field lain gak ikut hilang. - Method yang gak cocok dengan alamatnya.
PUT /booksatauPOST /books/2dijawab405 Method Not Allowed.POSTke koleksi, yang lain ke satu item.
TL;DR: Method adalah kata kerja request. GET mengambil (200), POST membuat data baru di koleksi (201 Created + Location), PUT mengganti seluruh isi, PATCH mengubah sebagian, DELETE menghapus (204, atau 200 kalau ada body). GET aman, gak mengubah data, jadi jangan pakai GET untuk update. GET, PUT, DELETE idempoten: diulang pun data akhirnya sama. POST tidak: dua klik, dua buku. Method yang gak cocok dengan alamatnya dijawab 405 plus header Allow.