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.1
Content-Type: application/json

{
"filters": { "category": "electronics", "price_max": 500 },
"sort": "price_asc",
"limit": 20
}

البروتوكول الآن يعرف أن هذا الطلب قراءة فقط، وهذا يفتح ثلاث مزايا مباشرة:

  1. إعادة المحاولة بأمان — أي عميل أو proxy يقدر يعيد الطلب تلقائيًا بدون خوف من تغيير حالة.
  2. التخزين المؤقت — استجابات QUERY قابلة للـ caching، بشرط أن مفتاح الكاش يشمل الـ Body نفسه.
  3. دلالة واضحة — الـ 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 لين ينضج الدعم.

المرجع: RFC 10008 — The HTTP QUERY Method

QUERY: ميثود جديدة في HTTP بعد سنين من الانتظار · bahashwan.dev