नए HTTP QUERY मेथड की व्याख्या
QUERY किस समस्या को हल करने के लिए है
- इसे “बॉडी वाला GET” को औपचारिक रूप देने के रूप में देखा जाता है: सुरक्षित, idempotent, cacheable, लेकिन request body ले सकता है।
- इसका उद्देश्य GET-with-body या queries के लिए POST जैसे जुगाड़ों को बदलना है (जैसे search, GraphQL queries)।
- समर्थकों के अनुसार यह intermediaries के लिए semantics स्पष्ट करता है: “इसे cache किया जा सकता है, यह read-only है, और इसमें body है।”
GET को ही क्यों नहीं ठीक करें?
- एक पक्ष: बस GET-with-body को standardize कर दें; QUERY अनावश्यक “XKCD standards” की फालतू बढ़ोतरी है।
- जवाब में: कई मौजूदा proxies, WAFs, CDNs, और frameworks GET bodies को strip या reject कर देते हैं, या उन्हें अर्थहीन मानते हैं।
- GET semantics बदलने से legacy systems में undefined behavior पैदा होगा; एक नया method 405 के साथ साफ़ तौर पर fail हो सकता है और POST पर fallback की अनुमति दे सकता है।
- कुछ लोग कहते हैं कि दोनों रास्तों में infrastructure अपडेट तो करना ही पड़ेगा; उनके लिए QUERY तकनीकी ज़रूरत से ज़्यादा marketing है।
Compatibility, Middleboxes, और Browsers
- चिंता है कि खराब तरीके से maintained “black box” middlewares नए verbs को गलत संभाल सकते हैं या crash कर सकते हैं।
- दूसरे कहते हैं कि legacy gear के बावजूद standards को evolve करना होगा; broken infra को ठीक किया जाना चाहिए।
- कई लोगों का कहना है कि browsers जल्द QUERY implement नहीं करेंगे (या कम से कम इसकी गारंटी नहीं है); इससे web-facing adoption सीमित रहती है।
- Accept-Query header और OPTIONS/405 को support negotiate करने के mechanisms के रूप में उद्धृत किया गया है।
प्रस्तावित उपयोग के मामले
- Elastic/OpenSearch जैसे search APIs अभी GET-with-body या POST का दुरुपयोग करते हैं; QUERY उनके लिए natural fit होगा।
- GraphQL: read-only queries के लिए QUERY, mutations के लिए POST।
- web apps में complex filtering/search: लंबे query strings की बजाय JSON bodies।
- reverse image search और अन्य file- या binary-based queries।
Caching, Semantics, और REST
- QUERY को cacheable और idempotent परिभाषित किया गया है; इससे POST के विपरीत CDN/proxy caching संभव होती है।
- संदेह करने वाले practical cache keys की ओर इशारा करते हैं: bodies का कोई standard canonical form नहीं है (JSON ordering, whitespace), जिससे shared caches जटिल हो जाती हैं।
- कुछ लोग कहते हैं कि QUERY REST/CRUD की स्पष्टता बढ़ाता है, क्योंकि यह simple GET-by-URL को अधिक complex queries से अलग करता है; दूसरे कहते हैं कि आप queries को resources के रूप में model कर सकते हैं (create के लिए POST, फिर GET)।
Security, WAFs, और व्यावहारिक दर्द-बिंदु
- कई लोग ऐसे वास्तविक-world systems का उल्लेख करते हैं जो GET bodies को reject या strip कर देते हैं (WAFs, CloudFront, strict API gateways)।
- QUERY को इन undefined behaviors और उन security rules से बचने का तरीका माना जाता है जो GET-with-body को संदिग्ध मानती हैं।
- अन्य लोग चेतावनी देते हैं कि शुरुआत में ऐसे systems QUERY को भी support नहीं करेंगे, इसलिए migration फिर भी आसान नहीं होगी।