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