Node.js

بناء واجهة REST باستخدام Node.js وExpress وTypeScript

تعلّم بناء واجهة REST قوية وآمنة من الأخطاء باستخدام Express.js وTypeScript من الصفر. يشمل الدليل الإعداد، التوجيه، والتحقق.

٨ يونيو ٢٠٢٥
4 دقيقة قراءة
بواسطة useLines Team
Node.jsExpressTypeScriptAPIBackend
Illustration for بناء واجهة REST باستخدام Node.js وExpress وTypeScript

لماذا نستخدم TypeScript مع Node.js وExpress؟

يجمع استخدام TypeScript مع Node.js وExpress بين مزايا الأنماط الثابتة وتطوير الواجهة الخلفية. هذا يعني إكمالًا تلقائيًا أفضل، وأخطاء زمن تشغيل أقل، وكودًا أسهل في الصيانة، خصوصًا في التطبيقات الكبيرة. يساعدك TypeScript على اكتشاف الأخطاء مبكرًا وجعل هياكل بيانات واجهتك البرمجية واضحة وسهلة الفهم.

إعداد المشروع

لنبدأ بإنشاء مشروع جديد لـ Node.js.

  1. تهيئة مشروعك:

    mkdir express-ts-api
    cd express-ts-api
    npm init -y
    
  2. تثبيت الاعتمادات: نحتاج إلى Express للخادم وTypeScript كاعتماد للتطوير.

    npm install express
    npm install typescript ts-node @types/node @types/express --save-dev
    
  3. تهيئة TypeScript: أنشئ ملف tsconfig.json لضبط مترجم TypeScript.

    npx tsc --init
    

    لتهيئة مبدئية جيدة، يمكنك استخدام التالي في tsconfig.json:

    {
      "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "./dist",
        "rootDir": "./src",
        "strict": true,
        "esModuleInterop": true
      }
    }
    

إنشاء خادم أساسي

الآن، لننشئ مجلد src وملف index.ts كنقطة دخول للخادم.

// src/index.ts
import express, { Request, Response } from 'express';

const app = express();
const port = 3000;

app.get('/', (req: Request, res: Response) => {
  res.send('Hello, TypeScript with Express!');
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

لتشغيل الخادم، أضف سكربت إلى package.json:

"scripts": {
  "start": "ts-node src/index.ts"
}

يمكنك الآن تنفيذ npm start ثم زيارة http://localhost:3000 في المتصفح.

هيكلة واجهتك البرمجية

لواجهات قابلة للتوسّع، من الجيد فصل المسؤوليات. هيكل شائع هو إنشاء مجلدات منفصلة للمسارات، المتحكمات، والخدمات.

  • routes: لتعريف نقاط النهاية.
  • controllers: لمعالجة طلبات واستجابات HTTP.
  • services: تحتوي منطق العمل.

مثال: واجهة بسيطة للمستخدمين

لننشئ واجهة بسيطة لإدارة قائمة مستخدمين.

1. متحكم المستخدم (src/controllers/userController.ts)

import { Request, Response } from 'express';

interface User {
  id: number;
  name: string;
}

let users: User[] = [
  { id: 1, name: 'John Doe' },
  { id: 2, name: 'Jane Doe' },
];

export const getUsers = (req: Request, res: Response) => {
  res.json(users);
};

export const createUser = (req: Request, res: Response) => {
  const newUser: User = {
    id: users.length + 1,
    name: req.body.name,
  };
  users.push(newUser);
  res.status(201).json(newUser);
};

2. مسارات المستخدم (src/routes/userRoutes.ts)

import { Router } from 'express';
import { getUsers, createUser } from '../controllers/userController';

const router = Router();

router.get('/users', getUsers);
router.post('/users', createUser);

export default router;

3. تحديث index.ts لاستخدام الميدلوير والموجه

نحتاج إلى الميدلوير express.json() لتحليل جسم الطلب.

// src/index.ts
import express from 'express';
import userRoutes from './routes/userRoutes';

const app = express();
const port = 3000;

app.use(express.json()); // Middleware to parse JSON bodies

app.use('/api', userRoutes);

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

الآن لديك واجهة برمجية منظمة وآمنة من ناحية الأنماط. يمكنك اختبار نقاط النهاية باستخدام أدوات مثل Postman أو curl.

يوفر هذا الأساس نقطة انطلاق صلبة لبناء واجهات REST أكثر تعقيدًا ومتانةً باستخدام Node.js وExpress وTypeScript، بما يضمن قابلية توسّع وصيانة عالية لشفرة الواجهة الخلفية.

مقالات ذات صلة