Introdução: API REST é simples
API REST (Representational State Transfer) é a "linguagem" que diferentes programas usam para se comunicar na internet. Se você quer que sua aplicação web forneça dados para outra aplicação (por exemplo, um cliente mobile ou um frontend em React), você precisa de uma API. E hoje vamos escrever uma do zero em JavaScript (Node.js) em apenas 30 minutos.
Vamos usar a biblioteca mais popular — Express. Ela é simples, flexível e ideal para iniciantes. Ao final do artigo, você terá um servidor funcional com quatro operações CRUD principais (criação, leitura, atualização, exclusão). Vamos lá!
Passo 1: Preparação do ambiente e instalação do Express
Antes de escrever código, verifique se você tem o Node.js instalado. Você pode verificar isso no terminal:
node -vnpm -vSe as versões aparecerem — está tudo pronto. Caso contrário, baixe o Node.js do site oficial.
Agora crie uma pasta para o projeto e inicialize-o:
mkdir my-first-apicd my-first-apinpm init -yO arquivo package.json foi criado. Instale o Express e a biblioteca para trabalhar com UUID (para gerar IDs únicos):
npm install express uuidPronto. Crie o arquivo index.js — este será o arquivo principal do nosso servidor.
Passo 2: Criando um servidor simples com Express
Abra o index.js e escreva a primeira versão do servidor:
const express = require('express');const app = express();const PORT = 3000;
// Parse de JSON do corpo da requisiçãoapp.use(express.json());
// Rota de testeapp.get('/', (req, res) => { res.send('Olá, mundo! A API REST está funcionando!');});
// Iniciar o servidorapp.listen(PORT, () => { console.log(`Servidor rodando em http://localhost:${PORT}`);});Inicie o servidor com o comando:
node index.jsAbra o navegador e acesse http://localhost:3000. Se você vir a mensagem de boas-vindas — está tudo funcionando!
Vamos analisar o código: express.json() é um middleware que converte automaticamente o JSON da requisição em um objeto JavaScript. Isso é necessário para requisições POST e PUT.
Passo 3: Adicionando dados e rotas CRUD
Agora a parte mais interessante — vamos criar um array com dados (em um projeto real você usaria um banco de dados, mas para aprendizado um array serve). Será uma lista de livros.
const { v4: uuidv4 } = require('uuid');
// Simulação de banco de dadoslet books = [];
// Criar um livro (POST)app.post('/api/books', (req, res) => { const { title, author } = req.body; if (!title || !author) { return res.status(400).json({ error: 'É necessário informar title e author' }); } const newBook = { id: uuidv4(), title, author }; books.push(newBook); res.status(201).json(newBook);});
// Obter todos os livros (GET)app.get('/api/books', (req, res) => { res.json(books);});
// Obter um livro por ID (GET)app.get('/api/books/:id', (req, res) => { const book = books.find(b => b.id === req.params.id); if (!book) { return res.status(404).json({ error: 'Livro não encontrado' }); } res.json(book);});
// Atualizar um livro (PUT)app.put('/api/books/:id', (req, res) => { const book = books.find(b => b.id === req.params.id); if (!book) { return res.status(404).json({ error: 'Livro não encontrado' }); } const { title, author } = req.body; if (title) book.title = title; if (author) book.author = author; res.json(book);});
// Excluir um livro (DELETE)app.delete('/api/books/:id', (req, res) => { const index = books.findIndex(b => b.id === req.params.id); if (index === -1) { return res.status(404).json({ error: 'Livro não encontrado' }); } books.splice(index, 1); res.status(204