Como escrever uma REST API em TypeScript em 30 minutos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como escrever uma API REST em TypeScript em 30 minutos: guia passo a passo



Criar uma API REST é uma tarefa básica para qualquer desenvolvedor backend. Usar TypeScript adiciona tipagem estrita, melhora a legibilidade do código e reduz o número de erros. Neste artigo, vamos analisar como escrever uma API REST completa em TypeScript do zero em apenas 30 minutos. Você conhecerá Express, TypeORM e as melhores práticas de organização de código.



1. Configuração do projeto e instalação de dependências



Primeiro, crie um novo diretório e inicialize o projeto Node.js:



mkdir my-rest-apicd my-rest-apinpm init -y


Instale os pacotes necessários:



npm install express reflect-metadata typeorm sqlite3npm install -D typescript @types/node @types/express ts-node nodemon


Crie o arquivo tsconfig.json para configuração do TypeScript:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "experimentalDecorators": true,    "emitDecoratorMetadata": true,    "skipLibCheck": true  },  "include": ["src/**/*"]}


2. Criação da estrutura básica e ponto de entrada



Organize a estrutura de pastas da seguinte forma:



  • src/ — código principal
  • src/controllers/ — controladores
  • src/entities/ — entidades do banco de dados
  • src/routes/ — rotas


Crie o arquivo src/index.ts — ponto de entrada da aplicação:



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));


Agora crie src/data-source.ts para configuração do TypeORM:



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. Definição da entidade e do controlador



Crie o arquivo src/entities/User.ts — modelo de usuário:



import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()export class User { @PrimaryGeneratedColumn() id!: number;

@Column() name!: string;

@Column() email!: string;

@Column({ default: true }) isActive!: boolean;}


Agora vamos criar o controlador 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

Blogs

Book Recommendations