پروتکل HTTP پس از ۲۰ سال، اولین متد جدید خود را دریافت کرد
احتمالاً قبلاً این کار را انجام دادهاید.
شما نیاز دارید محصولات را جستجو کنید. فیلترهای جستجوی شما برای قرارگیری در یک URL بسیار بزرگ هستند. برای حل این مشکل، از یک درخواست POST استفاده میکنید.
این روش کار میکند، اما یک دروغ است. شما به HTTP میگویید که در حال تغییر دادهها هستید، در حالی که فقط در حال خواندن آنها هستید.
در ژوئن ۲۰۲۶، IETF استاندارد RFC 10008 را منتشر کرد. این استاندارد یک متد جدید HTTP به نام QUERY را تعریف میکند. این اولین متد جدید در بیش از دو دهه اخیر است و دقیقاً همان مشکلی را که در بالا ذکر شد، حل میکند.
مشکل فعلی
متد GET برای خواندن دادهها عالی است. این متد ایمن (safe) و قابل کش کردن (cacheable) است، اما نمیتواند بدنه درخواست (request body) را حمل کند. همچنین URLها محدودیت تعداد کاراکتر دارند.
متد POST بدنه را حمل میکند، اما HTTP فرض را بر این میگذارد که POST وضعیت (state) را تغییر میدهد. این یعنی شما قابلیت کش خودکار و تلاش مجدد ایمن (safe retries) را از دست میدهید. اگر یک درخواست POST با خطا مواجه شود (timeout)، نمیتوانید به سادگی آن را دوباره امتحان کنید، زیرا نمیدانید آیا سرور قبلاً چیزی را تغییر داده است یا خیر.
راه حل: QUERY
متد QUERY در واقع یک درخواست GET همراه با بدنه است که دو تضمین را فراهم میکند:
- ایمن است (safe): دادهها را تغییر نمیدهد.
- همارز (idempotent) است: ارسال دو بارهی آن، همان نتیجهی ارسال یکبارهی آن را دارد.
نحوه استفاده از آن در حال حاضر
شما میتوانید همین حالا با استفاده از Axios یا Fetch از آن استفاده کنید.
مثال Axios:
axios.request({
method: 'QUERY',
url: '/api/products',
data: { category: 'shoes', maxPrice: 100 }
})
مثال Fetch:
fetch('/api/products', {
method: 'QUERY',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ category: 'shoes', maxPrice: 100 })
})
آنچه در آینده باید انتظار داشت
این انتقال یکشبه اتفاق نخواهد افتاد. در اینجا نقشه راه آورده شده است:
- زیرساخت: Nginx و Apache این درخواستها را عبور خواهند داد. ممکن است نیاز باشد WAF یا قوانین امنیتی خود را برای اجازه دادن به متد QUERY بهروزرسانی کنید.
- فریمورکها: انتظار داشته باشید که Spring، Rails و Express در طول سالهای ۲۰۲۶ و ۲۰۲۷ پشتیبانی بومی (native support) از آن را اضافه کنند.
- CDNها: از آنجایی که مهندسان Cloudflare و Akamai در نگارش این استاندارد کمک کردهاند، انتظار پشتیبانی سریع از سوی CDNها را داشته باشید. این امر کش کردن را بسیار آسانتر میکند.
چرا این موضوع برای کد شما اهمیت دارد
۱. تلاش مجدد خودکار: از آنجایی که QUERY همارز (idempotent) است، اپلیکیشنهای موبایل و کلاینتها میتوانند درخواستهای ناموفق را با خیال راحت دوباره ارسال کنند. ۲. کش بهتر: CDNها میتوانند پاسخهای QUERY را بر اساس بدنه (body) کش کنند. با این کار میتوانید لایههای کش دستی که با Redis ساختهاید را حذف کنید. ۳. URLهای تمیزتر: دیگر نیازی نیست JSONهای پیچیده را به زور در پارامترهای کوئریِ URL جای دهید. ۴. APIهای معنایی (Semantic): مستندات API شما شفافتر میشود. توسعهدهندگان دقیقاً خواهند دانست که کدام Endpointها دادهها را میخوانند و کدامها دادهها را مینویسند.
تیم خود را با بازبینی (audit) Endpointهای فعلی POST آماده کنید. مشخص کنید کدام یک فقط دادهها را میخوانند؛ اینها همان Endpointهای آیندهی شما برای متد QUERY خواهند بود.
