كيفية كتابة REST API باستخدام TypeScript في 30 دقيقة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية كتابة REST API باستخدام TypeScript في 30 دقيقة: دليل خطوة بخطوة



إنشاء REST API هي مهمة أساسية لأي مطور backend. استخدام TypeScript يضيف كتابة صارمة للأنواع، ويحسن قابلية قراءة الكود، ويقلل من عدد الأخطاء. في هذه المقالة، سنشرح كيفية كتابة REST API كامل باستخدام TypeScript من الصفر في 30 دقيقة فقط. ستتعرف على Express و TypeORM وأفضل الممارسات لتنظيم الكود.



1. إعداد المشروع وتثبيت التبعيات



أولاً، قم بإنشاء مجلد جديد وتهيئة مشروع Node.js:



mkdir my-rest-apicd my-rest-apinpm init -y


قم بتثبيت الحزم اللازمة:



npm install express reflect-metadata typeorm sqlite3npm install -D typescript @types/node @types/express ts-node nodemon


أنشئ ملف tsconfig.json لتكوين TypeScript:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "experimentalDecorators": true,    "emitDecoratorMetadata": true,    "skipLibCheck": true  },  "include": ["src/**/*"]}


2. إنشاء الهيكل الأساسي ونقطة الدخول



نظم هيكل المجلدات على النحو التالي:



  • src/ — الكود الرئيسي
  • src/controllers/ — المتحكمات
  • src/entities/ — كيانات قاعدة البيانات
  • src/routes/ — المسارات


أنشئ ملف src/index.ts — نقطة دخول التطبيق:



import "reflect-metadata";import express from "express";import { AppDataSource } from "./data-source";import { userRoutes } from "./routes/userRoutes";

const app = express();const PORT = process.env.PORT || 3000;

app.use(express.json());

AppDataSource.initialize() .then(() => { console.log("Database connected"); app.use("/api/users", userRoutes); app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); }); }) .catch((error) => console.log(error));


الآن أنشئ src/data-source.ts لتكوين TypeORM:



import { DataSource } from "typeorm";import { User } from "./entities/User";

export const AppDataSource = new DataSource({ type: "sqlite", database: "database.sqlite", synchronize: true, logging: false, entities: [User],});


3. تعريف الكيان والمتحكم



أنشئ ملف src/entities/User.ts — نموذج المستخدم:



import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()export class User { @PrimaryGeneratedColumn() id!: number;

@Column() name!: string;

@Column() email!: string;

@Column({ default: true }) isActive!: boolean;}


الآن لننشئ المتحكم src/controllers/userController.ts:



import { Request, Response } from "express";import { AppDataSource } from "../data-source";import { User } from "../entities/User";

const userRepository = AppDataSource.getRepository(User);

export const getUsers = async (req: Request, res: Response) => { try { const users = await userRepository.find(); res.json(users); } catch (error) { res.status(500).json({ message: "Error fetching users" }); }};

export const getUserById = async (req: Request, res: Response) => { try { const user = await userRepository.findOneBy({ id: parseInt(req.params.id) }); if (!user) { return res.status(404).json({ message: "User not found" }); } res.json(user); } catch (error) { res.status(500).json({ message: "Error fetching user" }); }};

export const createUser = async (req: Request, res: Response

المدونات

توصيات الكتب