HTTP method ที่เราใช้หลอกระบบกันมานานถึง 16 ปี
นักพัฒนา Backend ต้องเผชิญกับปัญหาที่เกิดขึ้นอยู่ตลอดเวลาเกี่ยวกับ search endpoints
คุณต้องการใช้ GET เพราะการค้นหาคือการอ่านข้อมูล (read operation) แต่ตัวกรองการค้นหา (search filters) ของคุณกลับมีขนาดใหญ่เกินไป จน URL มีความยาวถึงสองพันตัวอักษร ทำให้ Proxy ตัดคำขอ (request) ของคุณทิ้ง และการค้นหาก็ล้มเหลว
คุณจึงเปลี่ยนไปใช้ POST เพื่อแก้ปัญหาเรื่องข้อจำกัดนี้ ซึ่งมันใช้งานได้ แต่มันคือการหลอกลวง เพราะ POST จะบอกกับทุกๆ proxy และ cache ว่าคุณกำลังเปลี่ยนแปลงข้อมูล ซึ่งจะทำให้การทำ caching ทั้งหมดหยุดลง และคุณจะสูญเสียความเร็วที่ควรจะได้จาก GET ไป
ตลอด 16 ปีที่ผ่านมา เราไม่มีทางเลือกสายกลางเลย
ในเดือนมิถุนายน 2026 IETF ได้เผยแพร่ RFC 10008 ซึ่งเป็นการเปิดตัว method QUERY โดยนี่เป็น HTTP method ใหม่ตัวแรกนับตั้งแต่ปี 2010
QUERY รวมจุดเด่นของทั้ง GET และ POST เข้าด้วยกัน:
• สามารถส่ง request body สำหรับตัวกรองที่ซับซ้อนได้ • มีความปลอดภัย (safe) หมายความว่าเซิร์ฟเวอร์จะไม่เปลี่ยนแปลงสถานะ (state) • มีคุณสมบัติ idempotent หมายความว่าคุณสามารถรันคำสั่งเดิมซ้ำสองครั้งแล้วได้ผลลัพธ์เหมือนเดิม • สามารถทำ caching ได้ ช่วยให้ CDNs สามารถจัดเก็บ response ได้
คำขอ QUERY มีลักษณะดังนี้:
QUERY /products HTTP/1.1
Host: api.shop.example
Content-Type: application/json
{
"filter": { "category": "boots", "inStock": true },
"sort": "-price",
"limit": 20
}
RFC ใหม่นี้ยังได้เพิ่ม header Accept-Query เข้ามาด้วย ซึ่งช่วยให้ API สามารถบอกคุณได้ว่ารองรับรูปแบบการ query แบบใดบ้าง
คำเตือนสำหรับนักพัฒนา:
การทำ caching สำหรับ QUERY request นั้นแตกต่างจากการทำ GET request โดย cache ของ GET จะใช้ URL เป็น key แต่ cache ของ QUERY จะต้องใช้ request body เป็นส่วนหนึ่งของ key ด้วย หากโครงสร้างพื้นฐาน (infrastructure) ของคุณไม่รองรับเรื่องนี้ ผู้ใช้อาจจะมองเห็นผลการค้นหาที่เป็นส่วนตัวของผู้ใช้อื่นได้
อย่าเพิ่งรีบนำไปใช้ในระบบ production เพราะระบบนิเวศ (ecosystem) ยังต้องใช้เวลาในการปรับตัว
• เบราว์เซอร์ยังไม่รองรับ QUERY ใน fetch()
• HTML forms รองรับเพียงแค่ GET และ POST เท่านั้น
• API gateways และ WAF หลายแห่งจะปฏิเสธ method ที่ไม่รู้จัก
จงออกแบบ API ของคุณโดยคำนึงถึง QUERY ไว้ แต่สำหรับตอนนี้ให้ใช้ POST endpoints ต่อไปก่อน
QUERY คือจุดสิ้นสุดของการต้องยอมแลก (compromise) มาอย่างยาวนาน มันช่วยให้คุณส่งคำถามที่ซับซ้อนได้โดยไม่ต้องหลอกลวงระบบเครือข่าย
คุณกำลังรอให้ระบบนิเวศปรับตัวตามทัน หรือคุณกำลังเริ่มทดสอบ QUERY อยู่ในตอนนี้?
ที่มา: https://dev.to/arya_koste_5845807df94776/query-the-http-method-weve-been-faking-for-16-years-f9i
