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.