Metode HTTP: GET, POST, PUT, DELETE
Perbedaan method HTTP dan kapan menggunakannya
Tujuan Pembelajaran
- Memahami perbedaan 5 method HTTP utama
- Bisa memilih method yang tepat untuk setiap operasi
Analogi
RESTful API = Menu Restoran:
+-------------+----------------+------------------+
| Method | Operasi | Analogi Restoran |
+-------------+----------------+------------------+
| GET | Baca data | Lihat menu |
| POST | Tambah data | Pesan makanan |
| PUT | Ganti semua | Ganti pesanan |
| PATCH | Ganti sebagian | Tambah topping |
| DELETE | Hapus data | Batalkan pesanan |
+-------------+----------------+------------------+
Setiap method HTTP punya 'peran' seperti aksi di restoran
Penjelasan Konsep
Di chapter sebelumnya kita sudah kenalan dengan HTTP dan strukturnya. Sekarang kita akan bedah satu per satu method HTTP — yaitu kata kerja yang dipakai untuk memberi tahu server apa yang mau kita lakukan. Method ini adalah inti dari komunikasi web karena setiap request harus punya method. Tanpa method, server nggak akan tahu harus ngapain dengan request-mu.
Analoginya gini
Analoginya gini restoran punya aturan — kalau kamu bilang “lihat” berarti kamu cuma mau lihat menu.
Kalau bilang “pesan” berarti kamu mau order. Kalau bilang “ganti” berarti pesanan lama diganti. Kalau bilang “batal” berarti pesanan dicancel. Method HTTP bekerja dengan cara yang sama persis — mereka adalah “kata kerja” yang memberitahu server tindakan apa yang harus dilakukan.
GET — Lihat Data (Read)
Method GET dipakai untuk meminta data dari server.
Data ini tidak diubah, tidak dihapus — cuma dibaca.
Ini adalah method yang paling sering kamu pakai, meskipun kamu nggak sadar.
Setiap kali kamu buka website, browser kirim GET request untuk mengambil halaman HTML, CSS, gambar, dan semua resource yang dibutuhkan.
Karakteristik GET:
- Data dikirim lewat URL dalam bentuk query parameter (
?key=value) - Bisa di-bookmark (karena semua info ada di URL)
- Bisa di-cache oleh browser
- Bisa di-refresh tanpa masalah
- Jangan pernah pakai GET untuk operasi yang mengubah data! Misalnya jangan buat link
GET /hapus-user?id=123karena kalau search engine crawl atau orang refresh halaman,
User bisa terhapus!
Contoh penggunaan GET:
GET /users→ ambil daftar semua userGET /users/123→ ambil detail user dengan ID 123GET /products?category=elektronik&sort=harga→ filter dan sorting
POST — Tambah Data (Create)
Method POST dipakai untuk mengirim data baru ke server.
Ketika kamu daftar akun baru, kirim komentar, atau upload foto — semuanya menggunakan POST.
Data dikirim melalui body request, bukan URL,
Lebih aman untuk data sensitif dan bisa menampung ukuran yang lebih besar.
Karakteristik POST:
- Data dikirim lewat body request (bukan URL)
- Tidak bisa di-bookmark
- Tidak di-cache browser
- Data berubah di server (create new resource)
- Setiap kali dipanggil, biasanya membuat data baru (tidak idempoten)
Contoh penggunaan POST:
POST /users→ daftarkan user baruPOST /orders→ buat pesanan baruPOST /login→ kirim kredensial untuk autentikasi
PUT — Ganti Seluruh Data (Full Update)
Method PUT dipakai untuk mengganti seluruh data yang sudah ada dengan data baru.
Bayangkan kamu punya profil dengan nama, email, alamat, dan nomor telepon.
Kalau kamu pakai PUT, kamu harus kirim SEMUA field tersebut — meskipun cuma satu field yang berubah.
Kalau ada field yang tidak kamu kirim, biasanya akan di-set ke nilai default atau null.
Karakteristik PUT:
- Idempoten — memanggil 1x atau 100x hasilnya sama
- Mengganti seluruh resource dengan data baru
- Memerlukan semua field resource
PATCH — Ganti Sebagian Data (Partial Update)
Method PATCH dipakai untuk mengganti sebagian data saja.
Ini seperti edit profil — kalau kamu cuma mau ganti email, kamu kirim hanya field email. Field lainnya tidak berubah. PATCH lebih efisien daripada PUT untuk update kecil.
DELETE — Hapus Data
Method DELETE dipakai untuk menghapus data. Simple dan langsung.
Konsep Idempoten
Konsep Idempoten ini penting: GET, PUT, dan DELETE adalah idempoten — artinya memanggilnya berkali-kali hasilnya sama.
Tapi POST tidak idempoten — memanggil POST 3x berarti membuat 3 data baru. Ini adalah konsep fundamental dalam desain API yang harus selalu diingat.
Contoh Kode
// ====== GET: Ambil data ======
const getUsers = async () => {
const res = await fetch('/api/users');
const users = await res.json();
console.log('Daftar user:', users);
};
// ====== POST: Tambah data ======
const createUser = async (nama, email) => {
const res = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nama, email })
});
const newUser = await res.json();
console.log('User baru:', newUser);
};
// ====== PUT: Ganti semua data ======
const updateUser = async (id, nama, email) => {
const res = await fetch(`/api/users/${id}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nama, email, umur: 25, kota: 'Jakarta' })
});
return res.json();
};
// ====== PATCH: Ganti sebagian ======
const patchUser = async (id, emailBaru) => {
const res = await fetch(`/api/users/${id}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: emailBaru }) // cuma email yang diubah
});
return res.json();
};
// ====== DELETE: Hapus data ======
const deleteUser = async (id) => {
const res = await fetch(`/api/users/${id}`, {
method: 'DELETE'
});
console.log('User dihapus:', res.status === 204);
};Penjelasan Kode
Prompt AI
Bandingkan method PUT dan PATCH. Kapan sebaiknya menggunakan masing-masing? Berikan contoh kasus di dunia nyata.
Pertanyaan Reflektif
API mana yang lebih aman: GET /delete-user?id=123 atau DELETE /users/123? Kenapa? Mengapa GET request tidak seharusnya mengubah data?