Skip to content

openFetchعميل HTTP مبني على fetch

معترضات، وسيط، إعادة محاولة، وتخزين مؤقت في الذاكرة — دون الاعتماد على XHR، جاهز لـ Node 18+ والمتصفحات والحافة.

نظرة سريعة

المعيارopenFetchمكتبتكAxiosky
طبقة النقلfetchXHR (افتراضي في المتصفح)fetch
تبعيات وقت التشغيلصفرمجموعة خاصةصفر
مثيل وإعدادات افتراضية createClient axios.create ky.create
معترضات الطلب والاستجابة الاثنان الاثنان خطافات فقط
وسيط قابل للتجميع use()
إعادة محاولة وتخزين مؤقت (اختياري) إضافات منفصل إعادة محاولة فقط
استجابة موحّدة للعميل OpenFetchResponse AxiosResponse Response / مُحلّى
مناسب للحافة و RSC يستخدم fetch محوّلات fetch

الحجم الفعلي يعتمد على الدمج والمسارات المستوردة. الفارق الجوهري: openFetch يضيف طبقة عميل فوق fetch دون الانتقال إلى XHR.

نفس الطلب — ثلاثة عملاء HTTP

واجهة فئات EscuelaJS تُرجع مصفوفة JSON. أدناه: openFetch، Axios، وky.

openFetch — إعدادات مشتركة، استجابة منظمة، وجاهزية للمعترضات والوسيط:

ts
import openFetch from "@hamdymohamedak/openfetch";

const res = await openFetch.get(
  "https://api.escuelajs.co/api/v1/categories"
);
// res.data, res.status, res.headers, res.config

Axios — واجهة مألوفة؛ نقل افتراضي مختلف في المتصفح:

ts
import axios from "axios";

const res = await axios.get(
  "https://api.escuelajs.co/api/v1/categories"
);
// res.data, res.status, res.headers, res.config

ky — واجهة صغيرة فوق fetch:

ts
import ky from "ky";

const data = await ky
  .get("https://api.escuelajs.co/api/v1/categories")
  .json();

قياس حي في المتصفح

اضغط تشغيل القياس (٥ جولات): في كل جولة يُنفَّذ ثلاثة طلبات GET متوازية (openFetch، Axios، ky) مع تعطيل التخزين المؤقت حيثما أمكن. البطاقات تعرض آخر قياس، المتوسط، الأدنى، والأعلى؛ القائمة تُرتّب حسب متوسط الزمن (الأقل = أسرع في هذه الجلسة). الأسرع يحصل على شريط صغير — مع ذلك اقرأ التنبيه: الشبكة هي المهيمنة؛ هذا لقطة من جلستك وليس حكماً أدائياً مطلقاً.

لماذا يضيف المطورون طبقة عميل؟

  • إعدادات موحّدةbaseURL، ترويسات، مهلة زمنية، وunwrapResponse لمثيل createClient.
  • سلوك عابر للطلبات — مصادقة، تتبع، أعلام ميزات، وتطبيع أخطاء عبر المعترضات والوسيط.
  • مرونة — سياسات إعادة محاولة وتخزين مؤقت دون تكرار في كل استدعاء.
  • أخطاء متوقعة — ربط أعطال HTTP والشبكة بأخطاء مُنمّاة بدلاً من try/catch العشوائي.

openFetch يستهدف الفرق التي تريد ذلك مع البقاء على fetch حيث يوفّره النظام.

صفحات التوثيق

  1. البدء — التثبيت، التصدير الافتراضي، createClient، أول طلبات
  2. طرق HTTP — GET وPOST وPUT وPATCH وDELETE وrequest()
  3. React و Vue — الخطافات، التركيبات، العملاء المشتركون، ملاحظات RSC
  4. الإعدادات — خيارات الطلب، rawResponse، دمج الإعدادات
  5. الإضافات والواجهة السلسة — مسارات plugins وsugar
  6. المعترضات والوسيط — ترتيب التنفيذ، use()، وسيط مخصص
  7. إعادة المحاولة والتخزين المؤقت — الميزانية، مفاتيح idempotency، التخزين المؤقت
  8. الأخطاء والأمانOpenFetchError، الرموز، التسجيل الآمن، assertSafeHttpUrl

واجهة برمجة التطبيقات العامة (ملخص)

التصديرالدور
الافتراضيمثيل جاهز من createClient()
createClient / createعميل جديد مع initialDefaults اختيارية
createFluentClientسلاسل URL مرنة (من /sugar)
retry, timeout, hooks, debug, strictFetchإضافات وسيط (من /plugins)
OpenFetchError، isOpenFetchErrorأخطاء مُنمّاة + حارس النوع
InterceptorManagerمكدس المعترضات
createRetryMiddlewareمصنع وسيط إعادة المحاولة
MemoryCacheStore، createCacheMiddleware، appendCacheKeyVaryHeadersتخزين مؤقت في الذاكرة
الأنواعOpenFetchConfig، OpenFetchResponse، Middleware، إلخ.
assertSafeHttpUrlحارس اختياري على نمط SSRF

المتطلبات

Node.js 18+ أو أي بيئة فيها fetch وAbortController.

المصدر والحزمة

لغات أخرى

تصفح كل الترجمات.

MIT · @hamdymohamedak/openfetch