متد HTTP که ۱۶ سال است آن را جعل کردهایم
توسعهدهندگان بکاند (Backend) با یک مشکل همیشگی در نقاط انتهایی (endpoints) جستجو روبرو هستند.
شما میخواهید از GET استفاده کنید چون جستجو یک عملیات خواندن (read) است. اما فیلترهای جستجوی شما بیش از حد بزرگ میشوند. طول URL شما به دو هزار کاراکتر میرسد. پروکسیها درخواست شما را کوتاه (truncate) میکنند و جستجوی شما از کار میافتد.
برای رفع این محدودیت، به POST تغییر مسیر میدهید. این کار میکند، اما یک دروغ است. POST به هر پروکسی و کش (cache) میگوید که شما در حال تغییر دادهها هستید. این کار تمام قابلیت کشینگ را متوقف میکند و سرعت GET را از دست میدهید.
به مدت شانزده سال، هیچ راه میانه یا جایگزینی نداشتیم.
در ژوئن ۲۰۲۶، IETF استاندارد RFC 10008 را منتشر کرد. این استاندارد متد QUERY را معرفی میکند. این اولین متد جدید HTTP از سال ۲۰۱۰ تاکنون است.
QUERY بهترین ویژگیهای GET و POST را با هم ترکیب میکند:
• این متد یک بدنه درخواست (request body) برای فیلترهای پیچیده حمل میکند. • این متد safe است، به این معنی که سرور وضعیت (state) را تغییر نمیدهد. • این متد idempotent است، به این معنی که میتوانید آن را دو بار با نتیجه یکسان اجرا کنید. • این متد cacheable است و به CDNها اجازه میدهد پاسخها را ذخیره کنند.
یک درخواست QUERY به این شکل است:
QUERY /products HTTP/1.1
Host: api.shop.example
Content-Type: application/json
{
"filter": { "category": "boots", "inStock": true },
"sort": "-price",
"limit": 20
}
RFC جدید همچنین هدر Accept-Query را اضافه میکند. این هدر به یک API اجازه میدهد به شما بگوید از چه فرمتهای کوئری پشتیبانی میکند.
هشداری برای توسعهدهندگان:
کش کردن یک درخواست QUERY با یک درخواست GET متفاوت است. در کشِ GET، از URL به عنوان کلید (key) استفاده میشود. در کشِ QUERY، باید از بدنه درخواست به عنوان بخشی از کلید استفاده شود. اگر زیرساخت شما این موضوع را درک نکند، ممکن است یک کاربر نتایج جستجوی خصوصی کاربر دیگری را ببیند.
هنوز برای استفاده از این در محیط عملیاتی (production) عجله نکنید. اکوسیستم برای هماهنگ شدن به زمان نیاز دارد.
• مرورگرها هنوز از QUERY در fetch() پشتیبانی نمیکنند.
• فرمهای HTML فقط از GET و POST پشتیبانی میکنند.
• بسیاری از API gatewayها و WAFها متدهای ناشناخته را رد میکنند.
API خود را با در نظر گرفتن QUERY طراحی کنید، اما فعلاً از همان نقاط انتهایی POST استفاده کنید.
QUERY به یک سازش طولانی پایان میدهد. این متد به شما اجازه میدهد بدون دروغ گفتن به شبکه، سوالات پیچیده بپرسید.
آیا منتظر هستید تا اکوسیستم هماهنگ شود، یا از همین حالا در حال تست QUERY هستید؟
Source: https://dev.to/arya_koste_5845807df94776/query-the-http-method-weve-been-faking-for-16-years-f9i
