إيجي تاج · اعرف. ناقش. جرّب. نفّذ.
دليل

ETag و Cache-Control: كيف تمنع اختبارات API من قراءة استجابة قديمة

Caches يمكن أن تعيد 304 أو response مخزنة؛ فهم validators و directives يمنع استنتاج أن API لم تتغير بينما العميل يقرأ cache.

دليل عملي

Caches يمكن أن تعيد 304 أو response مخزنة؛ فهم validators وdirectives يمنع استنتاج أن API لم تتغير بينما العميل يقرأ cache.

4خطوات
عمليالمستوى

أثناء اختبار API أو endpoint عبر المتصفح، قد تعدل البيانات ثم ترى response قديمة. أحيانًا السبب server bug، وأحيانًا browser/CDN cache مع ETag و Cache-Control. التشخيص يحتاج النظر لل request headers و response status وعمر الاستجابة.

افهم ETag

ETag validator يمثل نسخة من resource. العميل قد يرسل If-None-Match، وإذا لم تتغير يرجع server 304 بدون body ويستخدم cache المحلية. إذا generation خاطئة قد تستمر نسخة قديمة.

اقرأ Cache-Control

max-age يحدد freshness، no-cache يعني revalidate وليس no-store، و no-store يطلب عدم التخزين. هذه الفروق مهمة في APIs الحساسة.

اختبر بدون Cache

استخدم DevTools Disable cache أو header مناسب في بيئة اختبار، ثم قارن. إذا اختفت المشكلة، راجع policy بدل إضافة query random في الإنتاج كحل دائم.

خطوات عملية

  1. سجل response headers.
  2. أعد الطلب طبيعيًا.
  3. أعده مع cache disabled.
  4. قارن Age/ETag/status.

انتبه ل ـCDN

قد يكون browser يطلب جديدًا لكن CDN يعيد cache. راجع Age و Via و cache status headers إن وجدت. purge أو cache key قد يكون السبب.

لا تكسر caching المفيد

إضافة no-store لكل API تمنع مشاكل الاختبار لكنها قد ترفع الحمل. حدد endpoints التي يجب أن تكون fresh دائمًا وأخرى يمكن cache مع validators.

اختبر mutations

بعد PUT/POST يغير resource، تحقق هل cache invalidated أو ETag تغيرت. هذا contract يجب أن يدخل integration tests.

قائمة مراجعة

  • ETag قبل/بعد.
  • 304 behavior.
  • CDN status.
  • browser cache.

راجع Cache Key مع Query و Headers والمستخدم

قد يكون ETag صحيحًا لكن CDN أو reverse proxy يبني cache key ناقصة فتعود استجابة مستخدم آخر أو parameter آخر. اختبر URL نفسها مع query values مختلفة و Accept-Language مختلف و Authorization أو Cookie حسب policy. راقب Vary و cache-status. الاستجابات المخصصة للمستخدم لا يجب أن تدخل shared cache إلا بتصميم واعٍ. أضف contract test: GET مع If-None-Match يرجع 304 قبل mutation، ثم بعد PUT ناجحة يجب أن يرجع 200 أو ETag جديدة. إذا بقي 304 رغم تغير المورد، لديك invalidation أو validator bug. هذا الاختبار يغطي freshness والعزل معًا بدل التركيز على زر Disable Cache في DevTools فقط.

قائمة مراجعة

  • Query ضمن cache key عند الحاجة.
  • Authenticated data لا تتسرب.
  • Vary headers صحيحة.
  • ETag تتغير بعد mutation.

راقب Stale-While-Revalidate إن كان مستخدمًا

سياسة stale-while-revalidate قد تعيد محتوى قديمًا عمدًا بينما تحدثه في الخلفية. عند الاختبار، اقرأ Cache-Control كاملًا ولا تعتبر كل response stale bug. سجل Age وانتظر إعادة التحقق ثم اطلب مرة أخرى. إذا endpoint لا يقبل stale data، لا تستخدم directive هناك حتى لو تحسن latency.

من المثال إلى تطبيق يمكن صيانته

في «ETag و Cache-Control: كيف تمنع اختبارات API من قراءة استجابة قديمة» جرّب الحل على حالة صغيرة ثم أضف failure path واضحًا واختبارًا آليًا يحمي السلوك المتوقع. حدّد contract للمدخلات والمخرجات، وتعامل مع القيم الناقصة قبل الوصول إلى طبقة التنفيذ. إذا كان الحل يتعامل مع API أو ملف أو DOM، أضف logging مختصرًا يوضح المرحلة وكود الخطأ دون بيانات حساسة. بعد ذلك اختبر التوافق مع نسخة سابقة أو بيئة مختلفة. هذه الخطوات تجعل المثال مفيدًا في مشروع حقيقي بدل أن يبقى snippet يعمل فقط في المسار المثالي.

قائمة مراجعة

  • Contract للمدخلات والمخرجات.
  • اختبار failure path.
  • رسائل خطأ قابلة للتشخيص.
  • Regression test قبل الدمج.
مجتمع إيجي تاجعن المجتمع

شارك في تقييم ونقاش المقال

رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.

تفاعل مع المقالاختر التفاعل المناسب، ويمكنك تغيير رأيك لاحقًا.
قيّم جودة المقاللا توجد تقييمات بعد — كن أول من يقيّم.

نقاش القراء

النقاش

جارٍ تحميل التعليقات…

بعد هذه المادة

تابع القراءة

من نفس القسم04
  1. 02
  2. 03
  3. 04
اختيار القراء

الأكثر قراءة

الترتيب الكامل
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
يتجدد مع النشر

أحدث المواد

  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06