Creazione di un'API REST con TypeScript ed Express

TypeScript ed Express sono una potente combinazione per la creazione di API REST robuste. TypeScript fornisce sicurezza dei tipi, strumenti migliori e un'esperienza di sviluppo migliorata, mentre Express è un framework web minimalista per Node.js. Questa guida illustrerà i passaggi per creare un'API REST utilizzando TypeScript ed Express.

Impostazione del progetto

Per prima cosa, creiamo una nuova directory per il progetto e inizializziamo un'applicazione Node.js.

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

Successivamente, installa le dipendenze richieste per Express e TypeScript.

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

Crea un file tsconfig.json per configurare TypeScript. Esegui il seguente comando:

npx tsc --init

Modificare il file tsconfig.json in base alle esigenze del progetto, abilitando opzioni come "strict", "esModuleInterop" e impostando la directory di output su "dist".

Creazione del server Express

Crea una nuova cartella denominata src e al suo interno crea un file denominato index.ts. Questo file fungerà da punto di ingresso per il server 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}`);
});

Per eseguire il server, utilizzare il seguente comando:

npx ts-node src/index.ts

Definizione dei percorsi API

Crea una nuova cartella all'interno di src denominata routes. In questa cartella, crea un file denominato userRoutes.ts per definire i percorsi per la gestione delle richieste relative all'utente.

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;

Nel file index.ts, importare userRoutes e utilizzarli nell'applicazione.

import userRoutes from './routes/userRoutes';

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

Creazione di un controller e di un livello di servizio

Organizza il codice creando livelli separati per controller e servizi. Crea due nuove cartelle all'interno di src: controllers e services.

Nella cartella controllers, creare un file denominato 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);
};

Nella cartella services, creare un file denominato 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;
};

Aggiorna userRoutes.ts per utilizzare questi controller:

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 dell'API REST

Per testare la REST API, usa uno strumento come Postman o curl per inviare richieste agli endpoint. Avvia il server ed effettua una richiesta GET a /api/users e una richiesta POST a /api/users con un payload JSON.

Conclusione

Seguendo questi passaggi, è possibile creare un'API REST utilizzando TypeScript ed Express. TypeScript aggiunge sicurezza dei tipi e una migliore esperienza di sviluppo, mentre Express fornisce un framework semplice e potente per la creazione di servizi RESTful. Questa configurazione può essere ulteriormente migliorata aggiungendo convalida, gestione degli errori e logica aziendale più complessa.