Lo nulis API, yang lo pake cuma 5 method: GET, POST, PUT, DELETE, PATCH. Dan itu sih udah cukup buat 99% kasus sehari-hari. API REST pada umumnya cuma butuh itu.
Tapi ternyata spesifikasi HTTP itu jauh lebih luas dari yang lo kira. IETF dan RFC udah mendefinisikan banyak method lain. Beberapa masih relevan, beberapa cuma ada di protokol tertentu, dan beberapa mungkin bakal lo temui pas debug CDN atau integrasi enterprise.
Artikel ini gak bilang lo harus pake method-method ini. Tapi setidaknya lo tau kalo liat di log, di library, atau di dokumentasi API orang.
Route Map-nya
| Method | Status | Paling Berguna Buat |
|---|---|---|
| GET / POST / PUT / DELETE / PATCH | Standard | API sehari-hari |
| QUERY | Proposed Standard (2024) | Complex search, GraphQL-like |
| PURGE | De facto (non-RFC) | Cache invalidation di CDN |
| SEARCH | WebDAV | Search with body payload |
| PROPFIND / REPORT / LOCK / UNLOCK | WebDAV | File server, versioning |
| MKCALENDAR / ACL / BIND | Protocol-specific | CalDAV, access control, binding |
| OPTIONS / HEAD / TRACE / CONNECT | Standard | CORS, debugging, proxy |
| PRI | Bukan method beneran | HTTP/2 connection preface |
1. QUERY — Method Baru yang Paling Worth It
Ini yang paling menarik. QUERY (RFC 9651, 2024) adalah HTTP method baru yang sifatnya safe dan idempotent kayak GET, tapi boleh punya request body.
Masalah yang Dipecahin
Biasanya kalo lo mau search sesuatu via GET, lo masukin parameter di query string:
GET /api/products?category=electronics&min_price=100&max_price=1000&sort=price_asc&page=1&limit=20
Itu masih ok. Tapi gimana kalo search-nya kompleks? Kayak filter bertingkat, nested conditions, atau query DSL?
GET /api/products?filters=[{field:"price",op:"between",values:[100,1000]},{field:"category",op:"in",values:["electronics","computers"]},...]
}
}
Mulai jelek kan. Query string panjang, perlu encoding, gak semua proxy handle well, dan lo harus parse custom format.
Dengan QUERY, lo kirim body:
QUERY /api/products HTTP/1.1
Content-Type: application/json
{
"filters": [
{"field": "price", "op": "between", "values": [100, 1000]},
{"field": "category", "op": "in", "values": ["electronics", "computers"]}
],
"sort": "price_asc",
"page": 1,
"limit": 20
}
Bedanya sama POST: QUERY itu safe. Artinya dia gak ngubah state server. Bisa di-cache. Bisa di-repeat tanpa efek samping.
Perbandingan Singkat
| Aspek | GET | POST | QUERY |
|---|---|---|---|
| Request body | No | Yes | Yes |
| Safe (no side effects) | Yes | No | Yes |
| Idempotent | Yes | No | Yes |
| Cacheable | Yes | If indicated | Yes |
| Use case | Simple reads | Creates/writes | Complex queries |
Status Adopsi
QUERY masih baru. Belum semua framework support out of the box. Tapi beberapa library udah mulai nambahin:
- Spring Framework — udah ada dukungan lewat
@RequestMapping(method=RequestMethod.QUERY)(experimental) - Fastify — bisa di-register manual
- Express.js — perlu middleware custom
Buat sekarang? Lo bisa implement manual di framework apapun. Tinggal route handler lo baca request body dan method-nya.
Yang penting: ini belum universal. Jangan expect browser atau proxy biasa bisa handle. Tapi buat internal API atau service-to-service? Worth knowing.
2. PURGE — Si Pembersih Cache CDN
Pernah liat method PURGE di log Varnish atau Cloudflare? Ini bukan method resmi dari IETF, tapi praktis jadi standar de facto di dunia CDN.
Cara Kerja
PURGE /images/product.jpg HTTP/1.1
Host: cdn.example.com
CDN kayak Varnish, Cloudflare, Fastly, dan Akamai pake ini buat invalidate cache secara spesifik. Lo kirim request PURGE ke URL yang mau di-clear, CDN hapus cached version-nya, request berikutnya bakal fetch fresh dari origin.
Kenapa Ini Penting
Bayangin lo update harga produk. File HTML/CDN-nya masih nyimpen versi lama selama TTL (misal 1 jam). Pelanggan liat harga lama. Lo bisa:
- Tunggu TTL expire — 1 jam
- Paksa purging via PURGE — instant
Biasanya diimplementasiin di middleware atau reverse proxy kayak Nginx/Varnish yang di-configure khusus. Method ini gak akan tembus ke aplikasi lo kalo CDN/proxynya handle duluan.
# Contoh di VCL (Varnish Configuration Language)
acl purge {
"localhost";
"10.0.0.0"/8;
}
sub vcl_recv {
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return (synth(405, "Not allowed"));
}
return (purge);
}
}
3. SEARCH — Kakak Tua-nya QUERY
Sebelum QUERY lahir, udah ada SEARCH method dari WebDAV (RFC 5323). Konsepnya mirip: safe method yang punya request body buat search query.
Bedanya? SEARCH return-nya WebDAV-specific (XML-based DAV:multistatus). Kurang cocok buat JSON API modern.
SEARCH /addressbook/ HTTP/1.1
Content-Type: application/xml
<?xml version="1.0"?>
<D:searchrequest xmlns:D="DAV:">
<D:sql>
SELECT * FROM addressbook WHERE name LIKE 'John%'
</D:sql>
</D:searchrequest>
Pernah dipake di Exchange Web Services (EWS) sama beberapa implementasi LDAP via HTTP. Tapi makin jarang. QUERY basically adalah versi modern-nya yang lebih clean.
4. WebDAV Family — Yang Bikin HTTP Method Jadi Banyak
WebDAV (Web Distributed Authoring and Versioning) adalah protokol di atas HTTP yang nambahin method khusus buat file management over HTTP. Dari sini lahir sebagian besar method yang jarang dipake.
PROPFIND — “ls -la” via HTTP
Ambil metadata resource: ukuran, tanggal buat, author, lock status.
PROPFIND /files/ HTTP/1.1
Depth: 1
<?xml version="1.0"?>
<D:propfind xmlns:D="DAV:">
<D:propname/>
</D:propfind>
Berguna kalo lo bikin file manager berbasis web yang pake WebDAV sebagai backend. Biasanya diimplementasi di ownCloud, Nextcloud, atau NAS yang support WebDAV.
REPORT — Versioning
Method ini dipake buat minta report soal version history, diff, atau perubahan.
Ada di Subversion (SVN) via HTTP, juga di beberapa implementasi SharePoint.
LOCK / UNLOCK
Ini buat concurrency control di file yang lagi diedit barengan.
LOCK /files/report.docx HTTP/1.1
Timeout: Infinite-Second, Second-3600
<?xml version="1.0"?>
<D:lockinfo xmlns:D="DAV:">
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
<D:owner>reynaidi</D:owner>
</D:lockinfo>
Server reply pake token (Lock-Token header). Client lain yang mau edit file yang sama bakal dapet 423 (Locked).
Konsepnya menarik, tapi di dunia modern lebih banyak pake optimistic locking via ETag/If-Match daripada WebDAV locking.
5. Protocol-Specific — MKCALENDAR, ACL, BIND
Method-method ini terikat sama protokol spesifik dan kemungkinan besar lo gak bakal liat di luar ekosistemnya.
MKCALENDAR (RFC 4791)
Buat bikin calendar collection di CalDAV server. Dipake oleh aplikasi kayak Apple Calendar, Thunderbird Lightning, atau Baikal.
MKCALENDAR /calendars/reynaidi/personal/ HTTP/1.1
Content-Type: application/xml
<?xml version="1.0"?>
<C:mkcalendar xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:set xmlns:D="DAV:">
<D:prop>
<D:displayname>Personal Calendar</D:displayname>
</D:prop>
</D:set>
</C:mkcalendar>
ACL (RFC 3744)
Buat set permission WebDAV. Siapa yang boleh baca, tulis, atau manage file.
BIND / UNBIND / REBIND (RFC 5842)
Buat nge-link resource ke multiple path. Kayak symlink tapi di level WebDAV.
6. OPTIONS, HEAD, TRACE, CONNECT — The Forgotten Siblings
Ini sebenernya gak baru. Tapi jarang dipake langsung oleh developer aplikasi, padahal krusial di layer infrastruktur.
OPTIONS
Lo pasti sering liat pas implementasi CORS. Browser ngirim OPTIONS request buat ngecek izin sebelum actual request.
OPTIONS /api/products HTTP/1.1
Origin: https://frontend.example.com
Access-Control-Request-Method: POST
Tapi fungsinya lebih dari itu. OPTIONS bisa lo pake buat discovery method apa aja yang didukung server.
OPTIONS / HTTP/1.1
Response:
Allow: GET, POST, PUT, DELETE, OPTIONS, HEAD
Berguna buat API yang butuh discovery, atau buat ngecek sebelum implementasi.
HEAD
Kayak GET tapi tanpa response body. Berguna buat:
- Cek apakah resource ada (status code 200 vs 404)
- Cek metadata:
Content-Length,Last-Modified,ETag - Bandwidth check sebelum download file besar
HEAD /bigfile.zip HTTP/1.1
Response:
HTTP/1.1 200 OK
Content-Length: 1073741824
Content-Type: application/zip
Last-Modified: Mon, 13 Jul 2026 14:00:00 GMT
ETag: "abc123"
Lo tau file 1 GB ada tanpa harus download. Hemat bandwidth.
TRACE
Method buat debugging. Server harus echo balik request yang diterima. Biasanya dipake buat liat apakah ada proxy yang ngubah request di tengah jalan.
TRACE / HTTP/1.1
Host: example.com
X-Custom: test123
Response: server harus balikin persis apa yang diterima.
Tapi TRACE sering dimatiin karena bisa dipake buat Cross-Site Tracing (XST) attack. Kalo di security audit, matiin TRACE biasanya salah satu rekomendasi pertama.
CONNECT
Method buat tunneling. Paling umum dipake sama HTTPS proxy buat establish tunnel TCP ke server tujuan.
CONNECT api.example.com:443 HTTP/1.1
Proxy buka koneksi ke api.example.com:443, terus forward data mentah bolak-balik. Client dan server ngomong langsung lewat TLS tunnel, proxy cuma jadi pipe.
7. PRI — Bukan Method Tapi Sering Bikin Bingung
Pernah liat method PRI di log server? Tenang, bukan ada yang aneh.
PRI adalah bagian dari HTTP/2 connection preface (RFC 7540). Waktu client mulai koneksi HTTP/2, dia ngirim frame magic: PRI * HTTP/2.0 diikuti 24 byte SETTINGS frame.
Kalo implementasi HTTP/1.1 lo nemu request PRI * HTTP/2.0, artinya ada client yang nyoba connect pake HTTP/2 ke server HTTP/1.1. Bukan method beneran, cuma artifact dari protocol negotiation.
Quick Reference: Siapa Punya Method Apa?
| Protokol / Ekosistem | Method Khasnya |
|---|---|
| REST API (umum) | GET, POST, PUT, DELETE, PATCH |
| CDN (Varnish, Cloudflare) | PURGE |
| WebDAV | PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, SEARCH |
| CalDAV | MKCALENDAR |
| Subversion / Versioning | REPORT, CHECKIN, CHECKOUT, UPDATE |
| CardDAV | MKADDRESSBOOK, MKCARD |
| HTTP/2 | PRI (not a real method) |
| Proxy/Tunnel | CONNECT |
| Debugging | TRACE, HEAD |
| Discovery | OPTIONS |
Kesimpulan
Lo gak harus pake method-method ini. Buat 99% project, 5 method dasar udah cukup. Yang penting paham:
- QUERY (RFC 9651) — yang paling worth follow. Method baru yang solve masalah complex query dengan body. Keep an eye.
- PURGE — kalo lo main sama CDN, lo bakal liat ini. Berguna buat invalidasi cache spesifik.
- WebDAV methods — legacy tapi masih dipake di file server dan enterprise. Tau aja biar gak kaget.
- OPTIONS/HEAD/TRACE/CONNECT — fundamental buat infrastruktur. OPTIONS wajib paham buat CORS, HEAD buat metadata hemat bandwidth.
Dan kalo tiba-tiba liat PRI * HTTP/2.0 di log — tenang, bukan direktur yang main-main ke server lo.
🐾
