HTTP Methods

Wed. Jun 17th, 2026 10:22 PM4 mins read
HTTP Methods
Source: Gemini Nano Banana Pro - http request methods

HTTP Method adalah kumpulan request method untuk menjelaskan tujuan dari pengiriman request dan apa yang diharapkan setelah request berhasil. Yang paling umum biasanya GET dan POST. Padahal selain itu ada beberapa method lainnya yang mungkin masih jarang terdengar. HTTP Method memiliki karakteristiknya masing-masing yang digunakan untuk berbagai kasus tertentu. Setidaknya ada 4 karakteristik, yaitu Safe, Idempotent, Non-Idempotent, dan Cachable:

  1. Safe, artinya method tersebut tidak mengubah data;
  2. Idempotent, artinya jika method tersebut dipanggil dengan request yang sama berkali-kali hasilnya tetap sama;
  3. Non-Idempotent, artinya jika method tersebut dipanggil dengan request yang sama berkali-kali maka akan ada efek samping di server tiap dipanggil;
  4. Cachable, artinya method tersebut hasilnya bisa di-cache;

GET

Ini adalah default HTTP Method. Tujuannya adalah untuk mengambil data. Method ini Safe, Cachable, dan Idempotent. Misalkan kita ingin mengambil data user dengan id=123 maka itu ga akan mengubah data apa pun. Meskipun beberapa kali dipanggil dengan request yang sama maka hasilnya tetap sama. Selain itu kita bisa atur agar responsenya bisa di-cache di web dan ketika user berkali-kali memanggil endpoint ini maka bisa diambil datanya lewat cache di web secara otomatis tanpa perlu diproses ulang di server.

GET Request
Copy
GET /users/123 HTTP/1.1
Response
Copy
HTTP/1.1 200 OK
Content-Type: application/json

{ "id": 123, "name": "Ali" }

POST

Ini juga salah satu method yang cukup dikenal. Tujuannya adalah untuk menambah data atau trigger event tertentu di server. Method ini Non-Idempotent. Misalkan kita memanggil endpoint user untuk create user 10x dengan request yang sama maka hasilnya akan membuat user baru sebanyak 10x.

POST Request
Copy
POST /users HTTP/1.1
Content-Type: application/json

{ "name": "Ali" }
Response
Copy
HTTP/1.1 201 Created

PUT

Sama seperti method put() di Java, tujuannya adalah untuk menambah atau mengganti data. Jika data ada maka akan diganti, jika ga ada maka akan ditambah. Method ini karakteristiknya Idempotent karena jika dipanggil berkali-kali maka hasilnya tetap sama, ga akan mengganti atau menambah data baru sebanyak yang dipanggil. Misalnya kita memanggil endpoint user dengan method PUT dengan request yang sama sebanyak 10x maka data yang diganti atau ditambah tetap hanya 1 seperti saat pertama kali dipanggil.

PUT Request
Copy
PUT /users/123 HTTP/1.1
Content-Type: application/json

{ "id": 123, "name": "Oki" }
Response
Copy
HTTP/1.1 200 OK

PATCH

Mirip dengan PUT, fungsinya juga untuk mengubah data, tapi yang diubah hanya sebagian, bukan diganti keseluruhan. Bedanya lagi, method ini Non-Idempotent. Misalnya user punya uang di rekening Rp1.000.000. Lalu kita panggil endpoint withdrawal dengan request amount=100000 menggunakan method PATCH, maka jumlah uang user akan berkurang Rp100.000 tiap dipanggil. Kalau dipanggil 5x berarti uang user akan berkurang sebanyak Rp500.000.

PATCH Request
Copy
PATCH /users/123/withdrawal HTTP/1.1
Content-Type: application/json

{ "id": 123, "amount": 100000 }
Response
Copy
HTTP/1.1 200 OK
Content-Type: application/json

{ "id": 123, "balance": 900000 }

DELETE

Sesuai namanya, ini tujuannya untuk menghapus data. Method ini Idempotent. Misalkan kita memanggil endpoint user dengan id=123 menggunakan method DELETE sebanyak 10x maka data yang terhapus tetap 1.

DELETE Request
Copy
DELETE /users/123 HTTP/1.1
Response
Copy
HTTP/1.1 204 No Content

Ini mirip dengan GET, sama-sama Safe, Idempotent, dan Cacheable. Yang jadi pembeda adalah method HEAD ga ada response body, hanya ada response header. Tujuannya adalah untuk ngecek response header doang sehingga lebih ringan dari GET. Misalnya untuk ngecek metadata, ngecek ukuran file sebelum download, ngecek cache, dan info lainnya yang ada di response header.

HEAD Request
Copy
HEAD /vid/mahasiswi+nakal.3gp HTTP/1.1
Response
Copy
HTTP/1.1 200 OK
Content-Type: video/3gp
Content-Length: 52342
Last-Modified: Tue, 01 Oct 2005 10:00:00 GMT

OPTIONS

OPTIONS berfungsi untuk ngecek ke server apa aja pilihan HTTP Method yang bisa dilayani oleh endpoint tersebut. Method ini Safe dan Idempotent. Ini juga ga ada response body dan cuma ada response header, tapi spesifik response header yang berisi info HTTP Method yang bisa dilayani doang.

HEAD Request
Copy
OPTIONS /users HTTP/1.1
Response
Copy
HTTP/1.1 204 No Content
Allow: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin: *

TRACE

Sebenarnya ini jarang digunakan dan seringnya diblok karena alasan keamanan. Gw pun belum pernah menggunakannya. Tujuannya adalah untuk debugging mengecek pantulan pesan apakah ada server perantara seperti CDN, Proxy, atau Firewall yang mengubah header sepanjang jalan menuju server tujuan. Setiap header yang dikirim ekspektasinya adalah akan mengembalikan header yang sama. Jika berbeda berarti ada perantara yang mengubahnya di tengah jalan. Method ini karakteristiknya juga Safe dan Idempotent.

HEAD Request
Copy
TRACE /index.html HTTP/1.1
Host: www.sample.com
User-Agent: Mozilla/5.0
Accept-Language: en-US
Response
Copy
HTTP/1.1 200 OK
Host: www.sample.com
User-Agent: Mozilla/5.0
Accept-Language: en-US

Connect

Fungsinya adalah untuk membangun jalur koneksi ke HTTPS lewat HTTP Proxy. Misalkan kita ingin mengakses website yang memiliki HTTP Proxy, maka kita akan memanggil website tersebut dengan method CONNECT. Setelah Proxy mengijinkan untuk masuk ke server tujuan maka jalur koneksi akan terbentuk dan kita bisa berkomunikasi dengan server tujuan. Method ini Non-Idempotent karena tiap kita mengirim method CONNECT maka Proxy akan trigger event untuk membangun jalur koneksi baru.

CONNECT Request
Copy
CONNECT www.sample.com:443 HTTP/1.1
Response
Copy
HTTP/1.1 200 Connection Established

Best Practice

Meskipun tiap method punya karakteristik dan fungsinya masing-masing, tapi tetap aja kendali penuh ada di server. Ga ada jaminannya method GET itu Idempotent, bisa saja si pembuat API bikin method GET untuk bikin data baru. Tapi sebaiknya memang HTTP Method itu harus sesuai dengan tujuan dan karakteristiknya untuk mempermudah komunikasi meskipun ini hanya convention saja. Pasti bakal repot ke depannya kalau bikin API seenak jidat.

Ada beberapa kasus di mana ini diperbolehkan. Misalnya kita ada endpoint untuk pencarian dengan pilihan filter yang banyak. Secara karakteristik, endpoint pencarian itu harusnya pakai GET. Masalahnya, GET itu diperuntukkan tanpa Request Body sehingga variabel pencarian harus ditulis di dalam query parameter. Jika query parameternya banyak maka URL akan kepanjangan sehingga bisa error karena URL itu ada batasnya. Untuk hal ini memang diperbolehkan pakai POST untuk mengakalinya meskipun harusnya pencarian itu Idempotent. Kabar baiknya, saat ini lagi diwacanakan HTTP Method yang baru, yaitu QUERY. HTTP Method ini rencananya memang untuk kasus kayak pencarian di mana kita butuh method yang bisa menerima Request Body tapi tetap Safe dan Idempotent. Hingga tulisan ini gw rilis statusnya masih wacana sih, belum ada kabar terbarunya lagi. Gw sih setuju banget dengan wacana ini.

© 2026 · Ferry Suhandri