Créer une API REST avec TypeScript et Express

TypeScript et Express sont une combinaison puissante pour créer des API REST robustes. TypeScript offre une sécurité de type, de meilleurs outils et une expérience de développement améliorée, tandis qu'Express est un framework Web minimaliste pour Node.js. Ce guide vous guidera à travers les étapes de création d'une API REST à l'aide de TypeScript et d'Express.

Mise en place du projet

Commencez par créer un nouveau répertoire pour le projet et initialiser une application Node.js.

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

Ensuite, installez les dépendances requises pour Express et TypeScript.

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

Créez un fichier tsconfig.json pour configurer TypeScript. Exécutez la commande suivante:

npx tsc --init

Modifiez le fichier tsconfig.json pour l'adapter aux besoins du projet, en activant des options telles que "strict", "esModuleInterop" et en définissant le répertoire de sortie sur "dist".

Création du serveur Express

Créez un nouveau dossier nommé src et à l'intérieur, créez un fichier nommé index.ts. Ce fichier servira de point d'entrée pour le serveur 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}`);
});

Pour exécuter le serveur, utilisez la commande suivante:

npx ts-node src/index.ts

Définition des routes API

Créez un nouveau dossier dans src nommé routes. Dans ce dossier, créez un fichier nommé userRoutes.ts pour définir les itinéraires de gestion des requêtes liées aux utilisateurs.

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;

Dans le fichier index.ts, importez les userRoutes et utilisez-les dans l'application.

import userRoutes from './routes/userRoutes';

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

Création d'un contrôleur et d'une couche de service

Organisez le code en créant des calques séparés pour les contrôleurs et les services. Créez deux nouveaux dossiers dans src: controllers et services.

Dans le dossier controllers, créez un fichier nommé 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);
};

Dans le dossier services, créez un fichier nommé 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;
};

Mettez à jour userRoutes.ts pour utiliser ces contrôleurs:

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

const router = Router();

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

export default router;

Test de l'API REST

Pour tester l'API REST, utilisez un outil comme Postman ou curl pour envoyer des requêtes aux points de terminaison. Démarrez le serveur et envoyez une requête GET à /api/users et une requête POST à ​​/api/users avec une charge utile JSON.

Conclusion

En suivant ces étapes, une API REST peut être créée à l'aide de TypeScript et d'Express. TypeScript ajoute la sécurité des types et une meilleure expérience de développement, tandis qu'Express fournit un cadre simple et puissant pour la création de services RESTful. Cette configuration peut être encore améliorée en ajoutant la validation, la gestion des erreurs et une logique métier plus complexe.