Fetch API: GET وPOST وPUT وDELETE
أرسل طلبات GET باستخدام fetch، وأرسل أجسام JSON في طلبات POST وPUT، واستدعِ نقاط نهاية DELETE لإزالة الموارد.
Fetch API: GET وPOST وPUT وDELETE درس مجاني في Frontend Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Frontend Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Frontend Academy 4 دروس في المجموع.
واجهة Fetch API
fetch() هي واجهة المتصفح الحديثة لإجراء طلبات HTTP. وتعيد Promise تُحل إلى كائن Response. وهي متوفرة قياسيًا في جميع المتصفحات الحديثة وفي Node.js 18 وما بعده.
طلب GET أساسي
أبسط استخدام لـ fetch هو تمرير عنوان URL وانتظار الاستجابة ثم تحليل JSON.
async function fetchUsers() {
const res = await fetch('https://api.example.com/users');
if (!res.ok) throw new Error('HTTP ' + res.status);
const users = await res.json();
return users;
}POST مع جسم JSON
استخدم method وheaders وbody. يجب أن يكون الجسم سلسلة نصية — لذا استدعِ JSON.stringify() على الكائن.
async function createUser(user) {
const res = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(user)
});
if (!res.ok) throw new Error('Failed: ' + res.status);
return res.json();
}
createUser({ name: 'Alice', email: 'alice@example.com' });PUT للتحديث الكامل
يستبدل PUT المورد بالكامل. أرسل الكائن بأكمله — فعادةً ما تُمسح الحقول التي تحذفها من الطلب على الخادم.
await fetch(`/api/users/${id}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
id, name: 'Alice', email: 'alice@example.com', role: 'admin'
})
});PATCH للتحديث الجزئي
يحدّث PATCH الحقول التي ترسلها فقط. استخدمه للتحديثات الجزئية بدلًا من PUT.
await fetch(`/api/users/${id}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'new@example.com' })
});طلب DELETE
لا يحتوي DELETE عادةً على جسم. وغالبًا ما تعيد الاستجابة 204 No Content من دون جسم.
async function deleteUser(id) {
const res = await fetch(`/api/users/${id}`, { method: 'DELETE' });
if (!res.ok) throw new Error('Delete failed');
// 204 No Content — no JSON to parse
}ترويسات المصادقة
أرفق ترويسة Authorization بنقاط النهاية المحمية.
const res = await fetch('/api/me', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});معلمات الاستعلام في عنوان URL
أنشئ سلاسل الاستعلام باستخدام URLSearchParams للترميز الآمن.
const params = new URLSearchParams({
q: 'react hooks',
page: '2',
pageSize: '20'
});
const res = await fetch(`/api/search?${params}`);
// /api/search?q=react+hooks&page=2&pageSize=20لماذا لا تُطلق fetch أخطاء HTTP؟
ترفض fetch الطلب فقط عند فشل الشبكة — أما استجابة 404 أو 500 فتظل تُحل بنجاح. تحقق دائمًا من res.ok (تكون true لاستجابات 2xx) أو من res.status، ثم أطلق الخطأ يدويًا.
const res = await fetch('/api/users/999');
if (!res.ok) {
// res.ok is false for 4xx and 5xx
throw new Error(`Server error ${res.status}: ${await res.text()}`);
}AbortController للإلغاء
ألغِ الطلب الجاري لتجنب النتائج القديمة — وهذا ضروري للبحث الفوري وتنظيف React effect.
const controller = new AbortController();
fetch('/api/search?q=hooks', { signal: controller.signal })
.then(res => res.json())
.catch(err => {
if (err.name !== 'AbortError') throw err;
});
// Cancel:
controller.abort();إرسال FormData
لرفع الملفات أو إرسال نماذج متعددة الأجزاء، مرّر كائن FormData بوصفه الجسم. لا تضبط Content-Type — إذ يضيفه المتصفح مع الحد الفاصل الصحيح.
const form = new FormData();
form.append('avatar', fileInput.files[0]);
form.append('name', 'Alice');
await fetch('/api/upload', { method: 'POST', body: form });
// no Content-Type header — browser sets multipart/form-dataتحقق سريع
لماذا لا تطلق fetch() خطأً عندما يعيد الخادم 404 أو 500؟
مراجعة: Fetch API
تعيد fetch() قيمة Promise تحتوي على Response. الطرق هي: GET (الافتراضية)، وPOST، وPUT، وPATCH، وDELETE. تحتاج أجسام JSON إلى JSON.stringify() وإلى ترويسة Content-Type. ترفض fetch الطلب فقط عند فشل الشبكة — لذا تحقق من res.ok يدويًا. استخدم URLSearchParams لسلاسل الاستعلام وAbortController للإلغاء وFormData لرفع الملفات (لا تضبط Content-Type — فالمتصفح يتولى ذلك).
الأسئلة الشائعة
هل درس «Fetch API: GET وPOST وPUT وDELETE» مجاني؟
نعم — نص درس «Fetch API: GET وPOST وPUT وDELETE» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Frontend Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Frontend Academy 4 دروس في المجموع.
ماذا ستتعلم في «Fetch API: GET وPOST وPUT وDELETE»؟
أرسل طلبات GET باستخدام fetch، وأرسل أجسام JSON في طلبات POST وPUT، واستدعِ نقاط نهاية DELETE لإزالة الموارد. تتمرن على Frontend Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Frontend Academy؟
لا تُشترط خبرة سابقة. Frontend Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «Fetch API: GET وPOST وPUT وDELETE»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Frontend Academy هذا؟
نعم. كل درس في Frontend Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Fetch API: GET وPOST وPUT وDELETE
- Axios: المعترضات وعنوان URL الأساسي
- معالجة الأخطاء: رموز حالة HTTP
- SWR وReact Query لتخزين البيانات مؤقتًا