0%
API Routes في Next.js - إنشاء واجهات API متكاملة

API Routes

أنشئ واجهات API متكاملة مباشرةً داخل Next.js

10-15 دقيقة

API Routes في Next.js

تتيح لك API Routes في Next.js إنشاء نقاط نهاية API مباشرةً داخل تطبيقك، مما يحوّل Next.js إلى حل متكامل (full-stack).

مقدمة إلى API Routes

المفهوم الأساسي

API Routes هي دوال serverless تُنفَّذ على جانب الخادم. يتحول كل ملف داخل pages/api/ إلى نقطة نهاية API.

pages/
└── api/
    ├── hello.js          → /api/hello
    ├── users/
    │   ├── index.js      → /api/users
    │   └── [id].js       → /api/users/123
    └── auth/
        ├── login.js      → /api/auth/login
        └── logout.js     → /api/auth/logout

أول نقطة نهاية

// pages/api/hello.js
export default function handler(req, res) {
  res.status(200).json({ 
    message: 'Hello from Next.js API!',
    timestamp: new Date().toISOString()
  })
}

الاختبار باستخدام curl:

curl http://localhost:3000/api/hello

التعامل مع طرق HTTP

نقطة نهاية متعددة الطرق

// pages/api/users/index.js
export default function handler(req, res) {
  const { method } = req

  switch (method) {
    case 'GET':
      return getUsers(req, res)
    case 'POST':
      return createUser(req, res)
    default:
      res.setHeader('Allow', ['GET', 'POST'])
      res.status(405).end(`Method ${method} Not Allowed`)
  }
}

async function getUsers(req, res) {
  try {
    // جلب المستخدمين من قاعدة البيانات
    const users = await db.user.findMany()
    res.status(200).json(users)
  } catch (error) {
    res.status(500).json({ error: 'Erreur serveur' })
  }
}

async function createUser(req, res) {
  try {
    const { name, email } = req.body
    
    // التحقق من صحة البيانات
    if (!name || !email) {
      return res.status(400).json({ 
        error: 'Nom et email requis' 
      })
    }

    // إنشاء المستخدم
    const user = await db.user.create({
      data: { name, email }
    })

    res.status(201).json(user)
  } catch (error) {
    res.status(500).json({ error: 'Erreur lors de la création' })
  }
}

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!