Skip to content

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

معترضات، وسيط، JSON بمخطط Standard Schema، خطافات دورة إعادة المحاولة، وتخزين مؤقت — fetch فقط لـ Node 18+ والمتصفحات والحافة.

TS

Open in your assistant

Pre-fills a prompt that points at the docs site and . If the message box is empty, paste the prompt from the address bar or type it manually — URL prefill behavior depends on the product.

نظرة سريعة

أبرز ما في openFetch الآن: التحقق من JSON عبر Standard Schema (jsonSchema و**.json(schema)** في الـ fluent)، throwHttpErrors بأسلوب Ky مع validateStatus, تمرير Request الأصلي إلى request()، مصفوفة init[] متزامنة على الإعداد المدمج، ERR_TIMEOUT منفصل عن إلغاء المستخدم، خطافات إعادة المحاولة onAfterResponse / onBeforeRetry مع OpenFetchForceRetry, Accept مقترح من responseType, وtype guards (isHTTPError، isTimeoutError، isSchemaValidationError). قائمة الميزات ومسار الطلب الكامل ←

المعيارopenFetchمكتبتكAxiosky
طبقة النقلopenFetchfetchAxiosXHR (افتراضي في المتصفح)kyfetch
تبعيات وقت التشغيلopenFetchصفرAxiosمجموعة خاصةkyصفر
HTTP/2 على Node أو dispatcheropenFetch اختياري: undici من المستخدم؛ `dispatcher` / `allowH2`Axiosمحولات Nodeky اختياري: undici (التوثيق)
مثيل وإعدادات افتراضيةopenFetch createClientAxios axios.createky ky.create
معترضات الطلب والاستجابةopenFetch الاثنانAxios الاثنانky خطافات فقط
وسيط قابل للتجميعopenFetch use()Axiosky
تحويل الطلب / تحويل الاستجابةopenFetch مصفوفات مرتبة في الإعدادAxios سلسلة تحويل مدمجةky خطافات (لا مصفوفات)
JSON مُتحقق (Standard Schema)openFetch jsonSchema وـ .json(schema)Axios يدوي (مثلاً في transform)ky .json(schema)
بوابة حالة HTTPopenFetch validateStatus و throwHttpErrorsAxios validateStatusky throwHttpErrors
Request أصلي + init متزامنopenFetch request(Request) + init[]Axios عبر الإعداد (لا init[])ky Request وخطافات init
إعادة محاولة مع تراجع (اختياري)openFetch إضافات + onAfterResponse / ForceRetryAxios منفصلky Retry وخطاف بعد الاستجابة
تخزين مؤقت للذاكرة (TTL / SWR)openFetch createCacheMiddleware ومخزنAxios طرف ثالث أو يدويky
استجابة موحّدة للعميلopenFetch OpenFetchResponseAxios AxiosResponseky Response / مُحلّى
أخطاء، سجلات آمنة، حماية URLopenFetch toShape، إخفاء query، قناع رؤوس، حماية URLAxios AxiosError؛ إخفاء يدويky أخطاء مُنمّاة؛ إخفاء يدوي
مهلة مقابل إلغاء المستخدمopenFetch ERR_TIMEOUT و ERR_CANCELEDAxios غالباً AbortError للاثنينky TimeoutError و AbortError
عميل متسلسل + memoopenFetch createFluentClient و .memo()Axiosky تسلسل أصلي (لا memo مدمج)
مفتاح Idempotency لإعادة POSTopenFetch ترويسة تلقائية اختياريةAxios يدوي أو معترضاتky يدوي
مناسب للحافة و RSCopenFetch يستخدم fetchAxios محوّلاتky fetch

الحجم يعتمد على الدمج والاستيراد. openFetch يضيف طبقة عملية فوق fetch: مخطط JSON، بوابة حالات، Request وinit، وإعادة محاولة مع خطافات — راجع صفحة «الميزات ومسار الطلب» للتفاصيل.

نفس الطلب — ثلاثة عملاء 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