الهدف
بعد هالدرس تقدر تبني API كامل للـ CRUD — قراءة وإنشاء وتعديل وحذف — مع validation بـ Zod وحماية كل endpoint بالـ session، وترجع responses واضحة لأي frontend.
ليش هذا الحين؟
بنيت الـ schema والـ auth — الحين وقت تربط كل شي. الـ CRUD routes هي الـ contract بين الـ frontend والـ backend. frontend يسأل، backend يجاوب. لو الـ API مو واضح أو مو محمي، كل شي فوقه راح يكون وجع. هالدرس يبني الـ backbone الحقيقية للتطبيق.
الفكرة
الـ CRUD = Create, Read, Update, Delete — العمليات الأساسية على أي resource.
HTTP methods والـ CRUD:
| Operation | HTTP Method | Route |
|---|---|---|
| قراءة الكل | GET | /api/habits |
| إنشاء | POST | /api/habits |
| قراءة وحدة | GET | /api/habits/[id] |
| تعديل | PUT | /api/habits/[id] |
| حذف | DELETE | /api/habits/[id] |
Zod: Library للـ validation. تعرّف "شكل" الـ input المتوقع، و Zod يتحقق منه ويرجع errors واضحة لو مو صح. بدونها، أي بيانات غلط تدخل الـ database.
const schema = z.object({ name: z.string().min(1).max(100) });
const result = schema.safeParse(body);
// result.success = true أو false
// result.error = الـ validation errors
HTTP Status Codes:
200— OK (GET ناجح)201— Created (POST ناجح)204— No Content (DELETE ناجح)400— Bad Request (validation فشل)401— Unauthorized (مو مسجل دخول)403— Forbidden (مسجل بس ما عنده صلاحية)404— Not Found500— Server Error (خطأ غير متوقع)
قاعدة الأمان:
كل endpoint يبدأ بالتحقق من الـ session. مو خطوة اختيارية — ضرورية. لو ما عندك session، ترجع 401 مباشرة.
Next.js App Router API routes:
كل ملف route.ts داخل src/app/api/ يعرّف HTTP handlers. export async function GET() يتعامل مع GET requests، والباقي نفس الشي.