Tiap request (pesan dari browser ke server) membawa method: kata kerja yang bilang mau ngapain, misalnya ambil atau hapus data. Tiap response (balasan server) membawa status code: angka tiga digit yang bilang hasilnya, misalnya berhasil atau gak ketemu.
🧪 Tebakan cepat: tombol "Beli" yang mengirim
POSTgak sengaja kamu klik dua kali. Berapa pesanan yang dibuat? Tebak dulu, jawabannya ada di bagian "Aman diulang atau gak".
Method di request, status code di response
Browser minta server bikin user baru, lalu server menjawab:
POST /api/users HTTP/1.1
Content-Type: application/json
{"nama": "Budi"}
HTTP/1.1 201 Created
Location: /api/users/3
POSTadalah method, kata kerjanya: "bikin data baru"./api/usersadalah path, alamat data di server itu.Content-Type: application/jsonadalah header, baris keterangan: "body-nya JSON".{"nama": "Budi"}adalah body, data yang dikirim.201 Createdadalah status code dan teks pendeknya: "data baru sudah dibuat". HeaderLocationmemberi alamat data barunya.
Lima method yang paling sering
| Method | Artinya | Contoh |
|---|---|---|
GET |
ambil data | lihat daftar produk |
POST |
bikin data baru | daftar akun |
PUT |
ganti seluruh data | simpan ulang seluruh profil |
PATCH |
ubah sebagian data | ganti nama saja |
DELETE |
hapus data | hapus postingan |
PUT mengirim data lengkap dan menggantikan semuanya, jadi field yang gak dikirim ikut hilang. PATCH cuma mengirim field yang berubah, sisanya tetap.
Aman diulang atau gak
Idempotent artinya: request yang sama dikirim sekali atau sepuluh kali, hasil akhirnya di server sama.
GET,PUT, danDELETEidempotent.DELETEkedua memang dibalas404, tapi datanya tetap sama-sama hilang.POSTgak idempotent: tiap kiriman bisa bikin data baru. Jadi jawaban tebakannya: dua klik bisa jadi dua pesanan.PATCHgak dijamin idempotent. "Tambah 1 ke stok" hasilnya beda tiap kali dikirim.
Status code: lima kelompok
Digit pertama menunjukkan kelompoknya: 1xx info, 2xx sukses, 3xx redirect (datanya ada di alamat lain), 4xx client error (permintaannya yang salah), 5xx server error (server-nya yang bermasalah).
200 OKberhasil.201 Createddata baru dibuat, jawaban yang pas untukPOSTyang berhasil.204 No Contentberhasil tanpa body, sering untukDELETE.301 Moved Permanentlypindah alamat selamanya.304 Not Modifiedbelum berubah, pakai salinan yang kamu simpan.400 Bad Requestformat permintaannya salah.401 Unauthorizedbelum login.403 Forbiddensudah login tapi gak punya izin.404 Not Foundgak ketemu.429 Too Many Requestskebanyakan request dalam waktu singkat (rate limit), tunggu dulu.500 Internal Server Errorada error di server.503 Service Unavailableserver lagi gak bisa melayani.
Teks di belakang angka itu baku. Latihan memakainya persis, termasuk huruf besarnya: Not Found, bukan not found.
Dari angka ke kelompok, pakai JavaScript
const status = 404
let kelompok = "unknown"
if (status >= 200 && status < 300) kelompok = "success"
else if (status >= 400 && status < 500) kelompok = "client-error"
const ARTI = { 200: "OK", 404: "Not Found" }
const arti = ARTI[status] || "Unknown"
console.log(kelompok + ":" + arti) // client-error:Not Found
status >= 400 && status < 500artinya "dari 400 sampai 499".ARTI[status]mengambil teks dari object, dengan angkanya sebagai kunci.|| "Unknown"dipakai kalau angkanya gak ada di object, karenaARTI[418]hasilnyaundefined.
⚠️ Jebakan yang sering ketemu
- Semua dibalas
200. Error yang dibalas200plus pesan "gagal" di body bikin kode di browser mengira semuanya berhasil. 401dan403ketuker.401artinya "kamu siapa?" (belum login).403artinya "aku tahu kamu, tapi kamu gak boleh".fetchgak gagal untuk404atau500.fetchcuma melempar error kalau jaringannya putus. Cek sendirires.ok(true untuk 200 sampai 299) ataures.status.
💡 Dua method lain.
HEADsama kayakGETtapi tanpa body, buat ngecek header saja.OPTIONSmenanyakan apa yang boleh dilakukan, dan browser memakainya untuk preflight CORS.
TL;DR: Method bilang mau apa: GET ambil, POST bikin, PUT ganti semua, PATCH ubah sebagian, DELETE hapus. GET, PUT, dan DELETE idempotent, POST gak. Status code bilang hasilnya, dikelompokkan dari digit pertama: 1xx info, 2xx sukses, 3xx redirect, 4xx salah di client, 5xx salah di server.