So schreiben Sie eine REST API in TypeScript in 30 Minuten: Schritt-für-Schritt-Anleitung
Das Erstellen einer REST API ist eine grundlegende Aufgabe für jeden Backend-Entwickler. Die Verwendung von TypeScript fügt strenge Typisierung hinzu, verbessert die Lesbarkeit des Codes und reduziert die Anzahl der Fehler. In diesem Artikel werden wir durchgehen, wie man eine vollwertige REST API in TypeScript von Grund auf in nur 30 Minuten schreibt. Sie werden sich mit Express, TypeORM und den besten Praktiken der Code-Organisation vertraut machen.
1. Projekteinrichtung und Installation der Abhängigkeiten
Erstellen Sie zunächst ein neues Verzeichnis und initialisieren Sie das Node.js-Projekt:
mkdir my-rest-apicd my-rest-apinpm init -yInstallieren Sie die erforderlichen Pakete:
npm install express reflect-metadata typeorm sqlite3npm install -D typescript @types/node @types/express ts-node nodemonErstellen Sie die Datei tsconfig.json für die TypeScript-Konfiguration:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "skipLibCheck": true }, "include": ["src/**/*"]}2. Erstellung der grundlegenden Struktur und des Einstiegspunkts
Organisieren Sie die Ordnerstruktur wie folgt:
src/— Hauptcodesrc/controllers/— Controllersrc/entities/— Datenbankentitätensrc/routes/— Routen
Erstellen Sie die Datei src/index.ts — den Einstiegspunkt der Anwendung:
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));Erstellen Sie nun src/data-source.ts für die TypeORM-Konfiguration:
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. Definition der Entität und des Controllers
Erstellen Sie die Datei src/entities/User.ts — das Benutzermodell:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()export class User { @PrimaryGeneratedColumn() id!: number;
@Column() name!: string;
@Column() email!: string;
@Column({ default: true }) isActive!: boolean;}Jetzt erstellen wir den Controller 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: Respo