Construirea unui API REST cu TypeScript și Express

TypeScript și Express sunt o combinație puternică pentru construirea de API-uri REST robuste. TypeScript oferă siguranța textului, instrumente mai bune și experiență de dezvoltare îmbunătățită, în timp ce Express este un cadru web minimalist pentru Node.js. Acest ghid va parcurge pașii pentru a construi un API REST folosind TypeScript și Express.

Configurarea Proiectului

Începeți prin crearea unui director nou pentru proiect și inițializarea unei aplicații Node.js.

mkdir typescript-express-api
cd typescript-express-api
npm init -y

Apoi, instalați dependențele necesare pentru Express și TypeScript.

npm install express
npm install --save-dev typescript ts-node @types/node @types/express

Creați un fișier tsconfig.json pentru a configura TypeScript. Rulați următoarea comandă:

npx tsc --init

Modificați fișierul tsconfig.json pentru a se potrivi nevoilor proiectului, activând opțiuni precum "strict", "esModuleInterop" și setând directorul de ieșire la "dist".

Crearea serverului Express

Creați un folder nou numit src și în interiorul acestuia, creați un fișier numit index.ts. Acest fișier va servi drept punct de intrare pentru serverul Express.

import express, { Request, Response } from 'express';

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

app.use(express.json());

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

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

Pentru a rula serverul, utilizați următoarea comandă:

npx ts-node src/index.ts

Definirea rutelor API

Creați un folder nou în src numit routes. În acest folder, creați un fișier numit userRoutes.ts pentru a defini rutele pentru gestionarea cererilor legate de utilizator.

import { Router, Request, Response } from 'express';

const router = Router();

router.get('/users', (req: Request, res: Response) => {
  res.json({ message: 'Get all users' });
});

router.post('/users', (req: Request, res: Response) => {
  const user = req.body;
  res.json({ message: 'User created', user });
});

export default router;

În fișierul index.ts, importați userRoutes și utilizați-le în aplicație.

import userRoutes from './routes/userRoutes';

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

Crearea unui controler și a unui strat de servicii

Organizați codul creând straturi separate pentru controlere și servicii. Creați două foldere noi în src: controllers și services.

În folderul controllers, creați un fișier numit userController.ts.

import { Request, Response } from 'express';
import { getAllUsers, createUser } from '../services/userService';

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

export const addUser = (req: Request, res: Response) => {
  const newUser = req.body;
  const user = createUser(newUser);
  res.json(user);
};

În folderul services, creați un fișier numit userService.ts.

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

let users: User[] = [];

export const getAllUsers = (): User[] => {
  return users;
};

export const createUser = (user: User): User => {
  users.push(user);
  return user;
};

Actualizați userRoutes.ts pentru a utiliza aceste controlere:

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

const router = Router();

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

export default router;

Testarea API-ului REST

Pentru a testa API-ul REST, utilizați un instrument precum Postman sau curl pentru a trimite solicitări către punctele finale. Porniți serverul și faceți o solicitare GET către /api/users și o solicitare POST către /api/users cu o sarcină utilă JSON.

Concluzie

Urmând acești pași, un API REST poate fi creat folosind TypeScript și Express. TypeScript adaugă siguranță tipului și o experiență de dezvoltare mai bună, în timp ce Express oferă un cadru simplu și puternic pentru construirea de servicii RESTful. Această configurație poate fi îmbunătățită și mai mult prin adăugarea de validare, gestionarea erorilor și o logică de afaceri mai complexă.