Integration Next.js بين الفرونت والباك بسهولة

x32x01
  • بواسطة x32x01 ||
  • #1
🧩 كل اللي محتاج تعرفه عن Integration الـ Front مع الـ Back في Next.js 👨‍💻🔥
فيه سؤال دايمًا بيحير الناس بعد ما تخلص شغل الـ Frontend في مشروع Next.js:
"إزاي أوصل الفرونت بالباك؟" 🤔

وساعتها تبدأ الحيرة بين الـ APIs والـ Tokens والـ Fetch والـ Errors، وكل حاجة تبان معقدة... بس متقلقش 💪
هنفهمها واحدة واحدة وبطريقة بسيطة وسلسة 👇

🎯 يعني إيه Integration أصلاً؟​

الـ Integration ببساطة يعني إن الـ Frontend (زي Next.js) بيكلم الـ Backend (زي Node.js أو Laravel أو Python).
الفرونت بيبعت Request والباك بيرد بـ Response.

يعني مثلاً:
الفرونت يقول: "هاتلي المستخدمين" 👥
والباك يرد: "اتفضل البيانات" 📦



⚙️ أنواع الـ Integration بين الفرونت والباك​

في نوعين أساسيين 👇

🧱 1. Internal APIs​

ده لما يكون الباك اند جوه نفس المشروع.
يعني شغال على نفس الـ Repository، وساعتها هتستخدم API Routes اللي جوه مجلد /app/api/
مثلاً:
JavaScript:
// app/api/users/route.js
export async function GET() {
  const users = await getUsersFromDB();
  return Response.json(users);
}

وبعدها تنادي عليها كده من أي Component عادي:
JavaScript:
const res = await fetch("/api/users");
const data = await res.json();
الميزة هنا إنك بتتفادى مشاكل CORS والتطوير بيكون أسرع وأسهل 💨



🌍 2. External APIs​

ده لما الباك اند على سيرفر خارجي:
JavaScript:
const res = await fetch("https://api.mybackend.com/users", {
  headers: {
    Authorization: `Bearer ${token}`,
  },
});
في الحالة دي لازم تزبط إعدادات الـ CORS كويس وتبعت الـ Token صح،
عشان لو حصل Error تعرف تتعامل معاه بسهولة.



🧠 Server ولا Client Components؟​

سؤال مهم جدًا في Next.js 👇
  • Server Component: لو البيانات عامة زي Blog أو Products.
  • Client Component: لو فيها Interactivity زي forms أو user profiles.

مثال توضيحي:

🧩 Server Component​

JavaScript:
export default async function ProductsPage() {
  const res = await fetch("https://api.example.com/products", {
    cache: "no-store",
  });
  const products = await res.json();

  return (
    <div>
      {products.map(p => (
        <ProductCard key={p.id} product={p} />
      ))}
    </div>
  );
}

⚡ Client Component​

JavaScript:
"use client";
function ProductCard({ product }) {
  const [liked, setLiked] = useState(false);

  return (
    <div onClick={() => setLiked(!liked)}>
      {product.name} {liked ? "❤️" : "♡"}
    </div>
  );
}



🔐 التعامل مع الـ Auth والـ Sessions والـ Login​


1️⃣ باستخدام JWT Tokens​

لما الباك بيرجعلك Token، خليه في Cookie أو LocalStorage.
وابعت كل Request كده:
Code:
headers: { Authorization: `Bearer ${token}` }

2️⃣ باستخدام NextAuth.js​

لو بتستخدم NextAuth، فالموضوع أبسط بكتير:
Code:
import { getServerSession } from "next-auth";
const session = await getServerSession(authOptions);
هو كده بيهندل السيشن بالكامل 👏



🗄️ التعامل مع الـ Database​

لو الباك اند جوه المشروع → استخدم Prisma أو Mongoose وتعامل مع الداتا مباشرة:
JavaScript:
const users = await prisma.user.findMany();
return Response.json(users);
لكن لو الباك خارجي، سيبه هو يتعامل مع الداتابيز،
وانت خليك في عرض البيانات اللي جاية بصيغة JSON عن طريق Axios أو Fetch بس.



📤 رفع الملفات (File Uploads)​

ملفات مش بتتبعت بـ JSON ❌
لازم تستخدم FormData:
JavaScript:
const handleFileChange = async (e) => {
  const file = e.target.files[0];
  const formData = new FormData();
  formData.append("file", file);

  await fetch("/api/upload", {
    method: "POST",
    body: formData,
  });
};
ولو بترفع على Cloudinary أو Supabase، غير الـ endpoint فقط، والباقي نفس الفكرة ✅



🚨 التعامل مع الـ Errors والـ Rate Limiting​

مفيش Request هتمشي 100% من غير أخطاء!
عشان كده لازم تتأكد من الـ Response:
JavaScript:
if (!res.ok) {
  const error = await res.json();
  throw new Error(error.message || "فيه مشكلة حصلت 😅");
}

ممكن كمان تعرض رسالة للمستخدم عن طريق Toast:
“حصل خطأ، حاول تاني بعد شوية ⏳”

أما الـ Rate Limiting فمهم عشان تحمي السيرفر من الـ spam.
استخدم مثلاً Upstash Redis أو RateLimiter.js، وحدد عدد معين من الريكوستات لكل يوزر.



🔁 الـ Real-Time Integration (اللحظي)​

لو عندك حاجات زي Chat أو Notifications أو Live Dashboard،
يبقى لازم تستخدم أدوات بتسمح باتصال لحظي زي:
  • Pusher
  • Ably
  • Socket.io
مثلاً في الشات: أول ما يوزر يبعث رسالة، السيرفر يـpush لباقي الناس في نفس الروم.
كل ده بيحصل بدون Refresh 👌



🧱 ترتيب المشروع (Architecture)​

لو عايز مشروعك يبقى منظم وسهل، استخدم التركيب ده:
Code:
src/
 ├── app/
 │   ├── api/
 │   │   ├── users/route.ts
 │   │   └── auth/route.ts
 │   └── page.tsx
 ├── lib/
 │   ├── db.ts
 │   ├── auth.ts
 │   ├── rate-limit.ts
 │   └── fetcher.ts
 ├── components/
 │   ├── ui/
 │   ├── forms/
 │   └── cards/
 └── utils/
     └── helpers.ts
كل حاجة ليها مكانها وهدفها 🎯
ده بيخلي المشروع Modular وسهل التوسعة لأي SaaS أو Dashboard احترافي.



🧰 الأدوات اللي استخدمناها النهارده​

  • Auth: NextAuth.js
  • Requests: Axios / Fetch
  • Database: Prisma / Mongoose
  • Caching: SWR / React Query
  • Rate Limit: Upstash Redis
  • Uploads: Cloudinary / Supabase
  • Real-time: Pusher / Ably / Socket.io



✅ الخلاصة​

دلوقتي بقى عندك فهم كامل لـ Integration في Next.js:
  1. API Design
  2. Auth & Tokens
  3. Error Handling
  4. Rate Limiting
  5. File Uploads
  6. Real-Time Communication
  7. Clean Architecture
كل دي أساسيات أي مشروع احترافي، ومجرد ما تتقنهم هتقدر تبني أي نظام متكامل بثقة 💪
 

المواضيع ذات الصلة

x32x01
الردود
0
المشاهدات
280
x32x01
x32x01
x32x01
الردود
0
المشاهدات
618
x32x01
x32x01
x32x01
الردود
0
المشاهدات
637
x32x01
x32x01
x32x01
الردود
0
المشاهدات
277
x32x01
x32x01
x32x01
الردود
0
المشاهدات
632
x32x01
x32x01
الوسوم : الوسوم
api integration backend development clean architecture file upload front end development jwt authentication next.js nextauth prisma orm real time applications
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟

آخر المشاركات

إحصائيات المنتدى
المواضيع
2,388
المشاركات
2,601
أعضاء أكتب كود
574
أخر عضو
الياس
عودة
أعلى