0Pricing
Frontend Academy · درس

Axios: المعترضات وعنوان URL الأساسي

أنشئ نسخة Axios باستخدام baseURL، وأرفق رموز المصادقة في معترضات الطلبات، وتعامل مع أخطاء 4xx/5xx في معترضات الاستجابات.

Axios: المعترضات وعنوان URL الأساسي درس مجاني في Frontend Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Frontend Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Frontend Academy 4 دروس في المجموع.

لماذا نستخدم Axios؟

Axios هو عميل HTTP شائع مبني على XMLHttpRequest. ويضيف التحويل التلقائي إلى JSON، ومعترضات الطلب والاستجابة، وإعداد baseURL، والمهلة الزمنية، ورموز إلغاء الطلبات. ولا تزال فرق كثيرة تفضّله على fetch.

تثبيت Axios

ثبّته باستخدام npm. يبلغ حجم حزمة المتصفح نحو 14 كيلوبايت بعد ضغط gzip.

npm install axios

GET وPOST الأساسيان

يحوّل Axios أجسام JSON إلى سلاسل تلقائيًا ويحلّل استجابات JSON تلقائيًا — فلا حاجة إلى استدعاءات يدوية لـ JSON.stringify أو .json().

import axios from 'axios';

const { data } = await axios.get('/api/users');
console.log(data); // already parsed

const res = await axios.post('/api/users', { name: 'Alice' });
console.log(res.data, res.status);

إنشاء نسخة من Axios

أنشئ نسخة مُهيّأة لواجهة API الخاصة بك لتجنب تكرار عنوان URL الأساسي والترويسات والمهلة الزمنية في كل استدعاء.

import axios from 'axios';

export const api = axios.create({
  baseURL: import.meta.env.VITE_API_URL,
  timeout: 10000,
  headers: { 'Content-Type': 'application/json' }
});

// Use it:
const { data } = await api.get('/users');
const res = await api.post('/users', { name: 'Alice' });

معترض الطلب: رمز المصادقة

أضف رمز المصادقة إلى كل طلب من دون تكرار الشيفرة.

api.interceptors.request.use((config) => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

معترض الاستجابة: الأخطاء العامة

وحّد معالجة الأخطاء لجميع الاستجابات: أعد التوجيه عند 401، واعرض إشعارًا منبثقًا عند 5xx، وغير ذلك.

api.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response?.status === 401) {
      window.location.href = '/login';
    }
    if (error.response?.status >= 500) {
      toast.error('Server error. Please try again.');
    }
    return Promise.reject(error);
  }
);

تجديد الرمز عند 401

استخدم معترض استجابة لاكتشاف 401، وتجديد الرمز، ثم إعادة محاولة الطلب الأصلي بشفافية.

api.interceptors.response.use(null, async (error) => {
  const originalRequest = error.config;
  if (error.response?.status === 401 && !originalRequest._retry) {
    originalRequest._retry = true;
    const newToken = await refreshToken();
    localStorage.setItem('token', newToken);
    originalRequest.headers.Authorization = `Bearer ${newToken}`;
    return api(originalRequest); // retry
  }
  return Promise.reject(error);
});

معلمات عنوان URL والاستعلام

يقبل Axios كائن params — ويحوّله تلقائيًا إلى سلسلة استعلام.

const { data } = await api.get('/search', {
  params: { q: 'react hooks', page: 2 }
});
// GET /search?q=react+hooks&page=2

مهلات الانتظار

عيّن مهلة انتظار للطلب لتجنّب بقائه معلّقًا عند بطء الخادم.

api.get('/slow-endpoint', { timeout: 5000 })
  .catch(err => {
    if (err.code === 'ECONNABORTED') {
      console.log('Request took too long');
    }
  });

إلغاء الطلبات

استخدموا AbortController (في Axios الحديث) أو CancelToken (في الواجهة البرمجية الأقدم).

const controller = new AbortController();

api.get('/big-data', { signal: controller.signal })
  .catch(err => {
    if (axios.isCancel(err)) console.log('cancelled');
  });

controller.abort();

بنية كائن الخطأ

تحتوي أخطاء Axios على error.response (أجاب الخادم بحالة خطأ)، أو error.request (لم تُستلم أي استجابة)، أو لا تحتوي على أيٍّ منهما (فشل إعداد الطلب).

Axios أم Fetch — متى تختار كلًّا منهما

Axios: واجهة برمجية أوضح، واعتراضات مضمّنة، ومعالجة أخطاء أبسط. Fetch: أصلي، وحزمة أصغر، ودعم حديث للبث. غالبًا ما تختار المشاريع الجديدة fetch مع غلاف رقيق؛ أما مشاريع Axios الحالية فنادرًا ما تنتقل.

تحقق سريع

ما الميزة في Axios التي تتيح إضافة ترويسة Authorization إلى كل طلب من دون تعديل كل استدعاء على حدة؟

مراجعة: Axios

استخدموا axios.create() لإنشاء مثيلات مُهيّأة مع baseURL وtimeout. تُحلَّل استجابات JSON تلقائيًا (res.data). تُرفق اعتراضات الطلبات الرموز؛ وتعالج اعتراضات الاستجابات الأخطاء وتحدّث الرموز. استخدموا كائن params لسلاسل الاستعلام، وAbortController للإلغاء. اختاروا Axios لسهولة الاستخدام، أو fetch مع غلاف للحصول على حزمة أصغر.

الأسئلة الشائعة

هل درس «Axios: المعترضات وعنوان URL الأساسي» مجاني؟

نعم — نص درس «Axios: المعترضات وعنوان URL الأساسي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Frontend Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Frontend Academy 4 دروس في المجموع.

ماذا ستتعلم في «Axios: المعترضات وعنوان URL الأساسي»؟

أنشئ نسخة Axios باستخدام baseURL، وأرفق رموز المصادقة في معترضات الطلبات، وتعامل مع أخطاء 4xx/5xx في معترضات الاستجابات. تتمرن على Frontend Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Frontend Academy؟

لا تُشترط خبرة سابقة. Frontend Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «Axios: المعترضات وعنوان URL الأساسي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Frontend Academy هذا؟

نعم. كل درس في Frontend Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Fetch API: GET وPOST وPUT وDELETE
  2. Axios: المعترضات وعنوان URL الأساسي
  3. معالجة الأخطاء: رموز حالة HTTP
  4. SWR وReact Query لتخزين البيانات مؤقتًا
← العودة إلى Frontend Academy