HTTP QUERY — Metode Baru yang Mengubah Cara Kita Fetch Data
Selama bertahun-tahun, developer web bergulat dengan keterbatasan metode GET — tidak bisa mengirim request body. Akibatnya, query kompleks harus dijejalkan ke URL sebagai query string yang panjang dan sulit dibaca. Kini, IETF (Internet Engineering Task Force) resmi memperkenalkan metode HTTP baru: QUERY.
🤔 Mengapa GET Tidak Cukup?
Metode GET memiliki beberapa keterbatasan fundamental:
Tidak ada request body — semua parameter harus masuk di URL
Batas panjang URL — browser dan server membatasi URL sekitar 2.000-8.000 karakter
Data sensitif terekspos — parameter di URL masuk ke log server, browser history, dan referrer header
Encoding rumit — data kompleks (array, nested object) sulit di-encode di query string
Banyak developer akhirnya "menyalahgunakan" POST untuk operasi read-only hanya karena butuh request body. Ini melanggar prinsip HTTP semantics.
✅ Apa Itu Metode QUERY?
Metode QUERY didefinisikan dalam RFC 9512 dengan karakteristik:
Safe — tidak mengubah state server (seperti GET)
Idempotent — request yang sama menghasilkan response yang sama
Cacheable — response bisa di-cache berdasarkan request body
Mendukung request body — inilah pembeda utama dari GET
📝 Contoh Penggunaan
Sebelumnya dengan GET:
GET /api/users?status=active&role=admin&sort=name&page=1&limit=20 HTTP/1.1Sekarang dengan QUERY:
QUERY /api/users HTTP/1.1
Content-Type: application/json
{
"filter": { "status": "active", "role": "admin" },
"sort": { "field": "name", "order": "asc" },
"pagination": { "page": 1, "limit": 20 }
}Jauh lebih bersih dan terstruktur!
🔄 QUERY vs POST untuk Read Operations
Selama ini banyak API (termasuk GraphQL) menggunakan POST untuk query data. Masalahnya:
POST tidak safe menurut HTTP spec — proxy tidak tahu request ini read-only
POST tidak cacheable secara default
POST secara semantik berarti "create/process" bukan "read"
QUERY menyelesaikan semua ini — semantik read-only, cacheable, dan mendukung body.
🌐 Dukungan Saat Ini
Browser — Fetch API sudah bisa mengirim QUERY method secara manual
Node.js —
undicidannode:httpsudah support custom methodFramework — Express, Fastify, dan Hono bisa handle custom HTTP method
Proxy/CDN — dukungan caching untuk QUERY masih terbatas
💡 Contoh di JavaScript
const response = await fetch("/api/products", {
method: "QUERY",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
category: "electronics",
priceRange: { min: 100, max: 500 },
inStock: true
})
});
const products = await response.json();🚀 Dampak untuk GraphQL dan REST API
REST API — filter kompleks tidak perlu di-encode di URL
GraphQL — bisa beralih dari POST ke QUERY, mendapat caching HTTP gratis
Search endpoints — Elasticsearch-style query dengan semantik yang benar
Kesimpulan
HTTP QUERY adalah evolusi yang sudah lama ditunggu. Dengan metode ini, kita punya cara yang benar secara semantik untuk mengirim query kompleks ke server tanpa menyalahgunakan POST atau memaksakan semuanya ke query string. Meskipun adopsi masih awal, ini adalah langkah besar untuk web standards.