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

MethodStatusPaling Berguna Buat
GET / POST / PUT / DELETE / PATCHStandardAPI sehari-hari
QUERYProposed Standard (2024)Complex search, GraphQL-like
PURGEDe facto (non-RFC)Cache invalidation di CDN
SEARCHWebDAVSearch with body payload
PROPFIND / REPORT / LOCK / UNLOCKWebDAVFile server, versioning
MKCALENDAR / ACL / BINDProtocol-specificCalDAV, access control, binding
OPTIONS / HEAD / TRACE / CONNECTStandardCORS, debugging, proxy
PRIBukan method beneranHTTP/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

AspekGETPOSTQUERY
Request bodyNoYesYes
Safe (no side effects)YesNoYes
IdempotentYesNoYes
CacheableYesIf indicatedYes
Use caseSimple readsCreates/writesComplex 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:

  1. Tunggu TTL expire — 1 jam
  2. 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.

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 / EkosistemMethod Khasnya
REST API (umum)GET, POST, PUT, DELETE, PATCH
CDN (Varnish, Cloudflare)PURGE
WebDAVPROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, SEARCH
CalDAVMKCALENDAR
Subversion / VersioningREPORT, CHECKIN, CHECKOUT, UPDATE
CardDAVMKADDRESSBOOK, MKCARD
HTTP/2PRI (not a real method)
Proxy/TunnelCONNECT
DebuggingTRACE, HEAD
DiscoveryOPTIONS

Kesimpulan

Lo gak harus pake method-method ini. Buat 99% project, 5 method dasar udah cukup. Yang penting paham:

  1. QUERY (RFC 9651) — yang paling worth follow. Method baru yang solve masalah complex query dengan body. Keep an eye.
  2. PURGE — kalo lo main sama CDN, lo bakal liat ini. Berguna buat invalidasi cache spesifik.
  3. WebDAV methods — legacy tapi masih dipake di file server dan enterprise. Tau aja biar gak kaget.
  4. 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.

🐾