QUERY: HTTP method جديدة بعد سنين من الانتظار
في يونيو 2026 نشرت IETF المعيار RFC 10008 وأضافت رسميًا method جديدة إلى HTTP اسمها QUERY — أول إضافة من نوعها منذ PATCH في 2010.
المشكلة القديمة
أي API يكبر، يوصل لنفس النقطة: endpoint للبحث أو الفلترة، والخيارات المتاحة كلها ناقصة.
- GET آمنة وقابلة للتخزين المؤقت (caching)، لكن ما تحمل Body. الفلاتر تنحشر في الـ URL، وكل proxy له رأي في الطول المسموح، والـ URLs تنتهي في الـ logs بكل اللي فيها.
- POST تحمل Body بدون مشاكل، لكن البروتوكول نفسه ما يعرف أنها عملية قراءة فقط. لا caching تلقائي، ولا إعادة محاولة آمنة.
النتيجة المعروفة: POST /search في كل مشروع تقريبًا — حل يشتغل، لكنه التفاف على البروتوكول مو استخدام له.
وش تسوي QUERY؟
ببساطة: آمنة و idempotent مثل GET، وتحمل Body مثل POST.
QUERY /products HTTP/1.1
Content-Type: application/json
{
"filters": { "category": "electronics", "price_max": 500 },
"sort": "price_asc",
"limit": 20
}البروتوكول الآن يعرف أن هذا الطلب قراءة فقط، وهذا يفتح ثلاث مزايا مباشرة:
- إعادة المحاولة بأمان — أي عميل أو proxy يقدر يعيد الطلب تلقائيًا بدون خوف من تغيير حالة.
- التخزين المؤقت — استجابات QUERY قابلة للـ caching، بشرط أن مفتاح الـ cache يشمل الـ Body نفسه.
- دلالة واضحة — الـ WAF والـ gateway وأي طبقة وسيطة تفهم نية الطلب من الـ method نفسها.
Accept-Query
المعيار أضاف header جديد اسمه Accept-Query يسمح للـ server يعلن أي صيغ استعلام يدعمها:
Accept-Query: application/jsonpath, application/sql;charset="UTF-8"العميل يقدر يتأكد قبل ما يرسل، بدل ما يجرب ويستقبل 415.
قبل ما تستخدمها في الإنتاج
الواقع العملي مهم هنا:
- دعم البيئة لسه يتكوّن. أطر عمل ومكتبات وموازنات أحمال كثيرة ما تتعرف على QUERY بعد — بعضها يرفض الطلب قبل ما يوصل للكود أصلًا.
- CORS: الـ method مو ضمن القائمة الآمنة في مواصفة fetch، فأي طلب cross-origin من المتصفح يسبقه preflight.
- الـ cache سلاح ذو حدين: تطبيع الـ Body في طبقة الـ cache لازم يطابق طريقة الـ server في تفسير الاستعلام، وإلا صارت cache hits غلط.
الخلاصة
QUERY ما هي ترند — هي سد فجوة موجودة في HTTP من البداية. الـ APIs اللي فيها بحث وفلترة معقدة هي المستفيد الأول. الاستخدام الصح: ابدأ فيها داخليًا حيث تتحكم بالعميل والـ server، وخلّ POST /search موجود كـ fallback لين ينضج الدعم.