Setiap kali kamu membuka sebuah halaman web, mengirim formulir, atau menekan tombol “suka” di sebuah foto, diam-diam browser-mu mengirim pesan kecil ke server. Pesan itu selalu diawali satu kata pendek: sebuah kata kerja. Bisa berbunyi GET, POST, atau DELETE. Kata inilah yang disebut HTTP method, dan tugasnya memberi tahu server tindakan seperti apa yang ingin kamu lakukan.
Bayangkan kamu sedang memesan di restoran. Hidangan yang kamu inginkan memang penting, tapi cara kamu memintanya juga penting: apakah kamu ingin melihat menu, memesan makanan, mengubah pesanan yang tadi sudah dibuat, atau membatalkannya sama sekali? Restorannya sama, tapi maksudnya jauh berbeda. Nah, HTTP method persis seperti kumpulan maksud itu, yang ditulis dengan cara yang disepakati bersama oleh browser dan server.
Di artikel ini kita akan membahas satu per satu method yang perlu diketahui pemula, fungsi masing-masing, serta dua istilah penting yang menggambarkan perilakunya: safe dan idempotent. Tidak perlu pengalaman sebelumnya.
Sebenarnya HTTP method itu apa?
HTTP (HyperText Transfer Protocol) adalah bahasa yang dipakai browser dan server untuk saling bicara. Satu percakapan punya dua bagian: browser mengirim permintaan (request), dan server membalas dengan respons (response).
Setiap permintaan diawali sebuah baris yang menyebut method dan alamat yang kamu tuju. Kira-kira bentuknya seperti ini:
GET /articles/http-method HTTP/1.1
Host: blog.acy-partner.com
Kata pertama, GET, itulah method-nya. Sisanya memberi tahu server bagian mana yang kamu maksud (path) dan lewat versi protokol yang mana. Seluruh pertukaran tadi bisa kamu gambarkan seperti ini:
┌──────────┐ GET /articles ┌──────────┐
│ Browser │ ───────────────▶ │ Server │
│ (klien) │ │ │
│ │ ◀─────────────── │ │
└──────────┘ 200 OK + halaman └──────────┘
Method adalah petunjuk pertama bagi server tentang maksudmu. Server yang baik akan memperlakukan GET jauh berbeda dari DELETE, sekalipun keduanya menunjuk alamat yang sama. Jadi mari kita kenalan dengan method-nya satu per satu.
GET — membaca sesuatu
GET adalah method yang paling sering kamu pakai, walau jarang kamu sadari. Setiap kali kamu membuka halaman, mengeklik tautan, atau memuat gambar, browser-mu mengirim GET. Tugasnya sederhana: mengambil sesuatu lalu membawanya kembali. Ia membaca, bukan mengubah apa pun.
Karena GET hanya membaca, ia method yang paling “kalem” di antara semuanya. Kamu bisa me-refresh sebuah halaman seratus kali dan seharusnya tidak ada yang rusak di server. Sifat ini begitu penting sampai diberi nama tersendiri, yang akan kita bahas sebentar lagi.
GET /products/42 HTTP/1.1
Host: shop.example.com
Satu aturan yang perlu diingat: permintaan GET sebaiknya tidak membawa data berukuran besar di badannya. Kalau kamu perlu mengirim informasi untuk disimpan, itu tugas yang berbeda, dengan method yang berbeda pula.
POST — mengirim dan membuat
Saat kamu mengisi formulir pendaftaran, menulis komentar, atau mengunggah foto, biasanya browser mengirim POST. Method ini menyerahkan data ke server supaya server bisa melakukan sesuatu dengannya: membuat akun baru, menyimpan komentar, atau memproses pembayaran.
Berbeda dengan GET, sebuah POST membawa badan (body) — yaitu data yang sebenarnya kamu kirim. Data itu sering ditulis dalam format JSON, sebuah format teks sederhana untuk informasi yang terstruktur:
POST /comments HTTP/1.1
Host: blog.acy-partner.com
Content-Type: application/json
{
"author": "Jane Doe",
"text": "Penjelasannya jelas, makasih!"
}
Inti gagasannya: POST biasanya membuat sesuatu yang baru atau memicu sebuah aksi. Kalau kamu mengirim formulir yang sama dua kali, sering kali kamu akan punya dua catatan — dua komentar, dua pesanan. Itu perilaku alaminya, dan nanti kita lihat kenapa hal ini penting.
PUT dan PATCH — memperbarui sesuatu
Ada kalanya kamu tidak ingin membuat sesuatu yang baru, melainkan mengubah sesuatu yang sudah ada. Memperbarui profil, menyunting komentar, mengganti nama berkas. Dua method menangani ini: PUT dan PATCH. Keduanya terdengar mirip, tapi berbeda di satu hal yang rapi.
PUT — mengganti seluruhnya
PUT berkata: “inilah versi lengkap yang baru dari data ini — ganti yang lama dengan ini.” Kamu mengirim seluruh objeknya, bukan cuma bagian yang berubah.
PUT /users/7 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"role": "editor"
}
Kalau kamu hanya menyertakan nama dan lupa mencantumkan email, server yang ketat bisa menganggap email yang hilang itu sebagai “kosong” — karena PUT berarti ganti semuanya.
PATCH — mengubah sebagiannya saja
PATCH adalah pilihan yang lebih presisi: “inilah bagian yang ingin saya ubah saja; sisanya biarkan apa adanya.” Kamu cuma mengirim field yang berbeda.
PATCH /users/7 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"role": "admin"
}
Permintaan ini memperbarui role saja, selebihnya tidak tersentuh. Pegangan praktisnya: pakai PUT saat kamu mengirim penggantian utuh, dan PATCH saat kamu cuma menyentuh satu atau dua field.
DELETE — menghapus sesuatu
DELETE melakukan persis seperti namanya: meminta server menghapus sebuah data. Menghapus komentar, mengeluarkan barang dari keranjang, atau menutup akun.
DELETE /comments/91 HTTP/1.1
Host: blog.acy-partner.com
Tidak perlu badan data — alamatnya sendiri sudah menyebut apa yang dihapus. Dan ada satu hal kecil yang menenangkan: kalau kamu mengirim DELETE yang sama dua kali, yang kedua tidak merusak apa pun. Datanya memang sudah hilang, jadi hasilnya tetap sama. Ingat-ingat poin ini, sebentar lagi ia akan jadi sebuah konsep bernama.
HEAD dan OPTIONS — penolong yang diam-diam
Ada dua method lagi yang jarang kamu kirim secara langsung, tapi layak dikenal karena keduanya menjaga web tetap berjalan mulus di balik layar.
HEAD bekerja persis seperti GET, dengan satu perbedaan: server hanya mengirim balik header, bukan isi sebenarnya. Header adalah keterangan kecil tentang sebuah respons — misalnya ukuran, jenis, dan tanggal terakhir diubah. Untuk apa minta header-nya saja? Untuk mengecek sesuatu secara hemat. Browser bisa memakai HEAD untuk bertanya “apakah berkas ini berubah sejak terakhir saya unduh?” tanpa harus mengunduh ulang seluruhnya.
OPTIONS bertanya ke server: “apa saja yang boleh saya lakukan di sini, dan apa aturannya?” Ibarat mengetuk pintu untuk menanyakan kunci mana yang cocok sebelum mencoba semuanya. Browser mengirim OPTIONS secara otomatis dalam situasi tertentu — misalnya ketika halaman di satu situs ingin berbicara dengan API di situs lain — sebagai semacam pengecekan izin.
Browser: OPTIONS /data → "Apa yang boleh saya lakukan?"
Server: Allow: GET, POST, OPTIONS
Kamu hampir tidak pernah menulisnya sendiri, tapi sekarang kamu akan mengenalinya saat mereka muncul di perkakas jaringan browser-mu.
Safe dan idempotent — dua kata yang menjelaskan banyak hal
Dua istilah ini terus muncul saat orang membahas HTTP method. Kedengarannya teknis, tapi gagasannya sebenarnya sederhana kalau kita pelan-pelan.
Safe artinya method itu tidak mengubah apa pun di server — ia hanya membaca. Membuka sebuah halaman seharusnya tidak pernah secara tak sengaja menghapus akunmu, dan itu karena GET bersifat safe. Membaca menu tidak akan membuat pesanan.
Idempotent adalah kata yang lebih panjang untuk gagasan yang rapi: melakukannya sekali atau berkali-kali memberi hasil akhir yang sama. Bayangkan sakelar lampu yang bertuliskan “MATI”. Tekan sekali, lampu mati. Tekan lima kali lagi — tetap mati. Tidak ada hal baru yang terjadi setelah tekanan pertama. Itulah idempotent.
DELETE bersifat idempotent: hapus sebuah komentar, ia lenyap; minta lagi, ia tetap lenyap — keadaan akhirnya sama. PUT juga idempotent: mengganti seorang pengguna dengan data yang sama sepuluh kali menghasilkan pengguna yang tampak identik dengan mengganti sekali.
Sebaliknya, POST biasanya bukan idempotent. Kirim formulir pembayaran dua kali, dan kamu bisa kena tagih dua kali. Inilah persis alasan situs memperingatkan “jangan refresh halaman ini” seusai checkout — mereka melindungimu dari mengirim POST yang sama lagi.
Pegangan cepat di kepala
Kalau sebuah method cuma membaca, ia safe. Kalau mengulanginya tidak mengubah apa pun setelah kali pertama, ia idempotent. Setiap method yang safe pasti idempotent, tapi tidak setiap yang idempotent itu safe — DELETE mengubah sesuatu, tapi mengulanginya tetap tidak berbahaya.
Berikut seluruh keluarganya dalam satu tabel:
| Method | Fungsinya | Safe? | Idempotent? | Punya body? |
|---|---|---|---|---|
| GET | Membaca / mengambil | Ya | Ya | Tidak |
| HEAD | Membaca header saja | Ya | Ya | Tidak |
| OPTIONS | Menanyakan izin | Ya | Ya | Tidak |
| POST | Membuat / mengirim | Tidak | Tidak | Ya |
| PUT | Mengganti seluruhnya | Tidak | Ya | Ya |
| PATCH | Memperbarui sebagian | Tidak | Tidak* | Ya |
| DELETE | Menghapus | Tidak | Ya | Jarang |
Soal tanda bintang itu
PATCH sering tidak dijamin idempotent, karena perubahan sebagian bisa bergantung pada keadaan saat ini (misalnya “tambah 1 ke penghitung”). Pada praktiknya hal itu tergantung cara perubahannya dijelaskan, jadi paling aman menganggap PATCH tidak idempotent kecuali kamu tahu pasti sebaliknya.
Kenapa pemilihan method itu penting
Mungkin kamu bertanya: kalau server bisa membaca atau menulis data lewat cara mana pun, untuk apa repot soal kata kerjanya? Karena sisa ekosistem web bersandar pada janji-janji ini.
Browser, mesin pencari, dan sistem perantara semuanya menganggap GET itu safe. Mesin pencari dengan senang hati mengikuti ribuan tautan GET untuk membaca situsmu, tapi ia seharusnya tidak pernah mengikuti tautan yang diam-diam menghapus data. Itu pola bug nyata dari beberapa tahun lalu: orang menaruh aksi “hapus” di balik tautan biasa, lalu sebuah crawler datang dan mengeklik setiap tautan, dan konten pun lenyap. Memakai method yang benar — DELETE untuk menghapus, POST untuk aksi — menjaga sistem-sistem otomatis ini agar tidak menimbulkan kerusakan.
Jangan sembunyikan aksi di balik GET
Jangan pernah membuat permintaan GET mengubah atau menghapus data. Karena GET dimaksudkan untuk safe, browser bisa memuat tautan lebih dulu, dan crawler akan mengunjunginya secara otomatis. Apa pun yang mengubah data sebaiknya memakai POST, PUT, PATCH, atau DELETE.
Memilih kata kerja yang tepat juga membuat sistemmu lebih mudah dipahami. Ketika developer lain melihat DELETE /orders/5, ia langsung tahu persis apa yang terjadi tanpa membaca satu baris pun kodemu. Method-nya sendiri sudah mendokumentasikan maksudnya.
Selanjutnya ke mana?
Sekarang kamu sudah mengenal HTTP method inti beserta dua sifat yang menggambarkan perilakunya. Ini adalah sudut pandang tingkat protokol: apa makna tiap kata kerja dan bagaimana ia seharusnya berperilaku di jaringan. Inilah fondasi tempat semua hal lain berpijak.
Langkah berikutnya yang wajar adalah melihat bagaimana method-method ini dipakai saat merancang web API sungguhan — dunia REST, tempat GET, POST, PUT, PATCH, dan DELETE dipetakan ke pembacaan dan penulisan data terstruktur. Itu topik backend, dan ia berdiri langsung di atas apa yang baru saja kamu pelajari.
Untuk sekarang, coba buka developer tools di browser-mu, pindah ke tab Network, lalu muat ulang sebuah halaman. Kamu akan melihat aliran permintaan, masing-masing berlabel method-nya. Perhatikan GET berseliweran saat halaman dimuat, dan sesekali POST ketika kamu mengirim sesuatu. Kosakata yang baru kamu pelajari ada di situ, bekerja di depan mata.
Rangkuman
- Sebuah HTTP method adalah kata kerja di awal tiap permintaan yang memberi tahu server maksudmu.
- GET membaca, POST mengirim atau membuat, PUT mengganti seluruhnya, PATCH memperbarui sebagian, DELETE menghapus, sementara HEAD dan OPTIONS adalah penolong diam untuk mengecek keterangan dan izin.
- Safe berarti “hanya membaca, tidak mengubah apa pun.” Idempotent berarti “mengulanginya memberi hasil akhir yang sama.”
GET,HEAD, danOPTIONSbersifat safe;GET,HEAD,OPTIONS,PUT, danDELETEbersifat idempotent;POSTbukan keduanya.- Memilih method yang benar menjaga browser, crawler, dan sistem lain agar tidak menimbulkan kerusakan tak sengaja — sekaligus membuat maksudmu jelas bagi siapa pun yang membacanya.