Blog
← Back to Blog
July 24, 2026👁 22 views

HTTP Punya Metode Baru: QUERY — Pengganti GET untuk Request dengan Body

HTTPWeb DevelopmentAPIRESTRFC

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.1

Sekarang 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.jsundici dan node:http sudah support custom method

  • Framework — 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.