Parâmetros em APIs (REST)
Ao consumir ou construir uma API, é normal enviar dados para a api. Ao trabalhar com uma API REST podemos enviar parâmetros utilizando URL Params, Query Params, Body Params e Headers. Cada tipo tem uma finalidade e local de transporte distintos.
Visão Geral
| Tipo | Onde aparece | Uso principal | Exemplo |
|---|---|---|---|
| URL Params | Parte da rota (/users/:id) |
Identificar recurso específico | /users/42 |
| Query Params | Após ? na URL |
Filtros, paginação, ordenação | /products?limit=10&page=2&sort=price |
| Body Params | Corpo da requisição | Criação/atualização de recursos | JSON: { "name": "Ana", "email": "a@x.com" } |
| Headers | Cabeçalho HTTP | Metadados (auth, mime, cache) | Authorization: Bearer <token> |
1) URL Params (Path Params)
Definição: Parte obrigatória do caminho da rota, usada para identificar um recurso único.
Exemplo de rota e chamada
Express (TypeScript)
import { Router, Request, Response } from 'express';
const router = Router();
router.get('/users/:id', (req: Request, res: Response) => {
const { id } = req.params; // string
res.json({ id });
});
export default router;
Com dois URL Params
router.get('/playlists/:playlistId/musics/:musicId', (req, res) => {
const { playlistId, musicId } = req.params;
res.json({ playlistId, musicId });
});
2) Query Params
Definição: Parâmetros opcionais na URL após ?, separados por &. Usados para filtrar, paginar, ordenar etc.
Exemplo
Express
router.get('/musics', (req, res) => {
const { genre, year, limit = '20', page = '1' } = req.query;
res.json({ genre, year, limit, page });
});
Arrays e múltiplos valores
No Express, acesse como req.query.genre (pode ser string | string[]).
3) Body Params
Definição: Dados enviados no corpo da requisição, ideais para criar ou atualizar recursos.
Requer middleware no Express:
Exemplo (POST JSON)
POST /musics
Content-Type: application/json
{
"title": "Back in Black",
"author": "AC/DC",
"year": 1980,
"duration": 255
}
Express
router.post('/musics', (req, res) => {
const { title, author, year, duration } = req.body;
// validação, persistência...
res.status(201).json({ title, author, year, duration });
});
Outros formatos de body
- multipart/form-data (upload de arquivos)
- application/x-www-form-urlencoded (forms)
- text/plain
4) Headers
Definição: Metadados enviados no cabeçalho da requisição/resposta. Não fazem parte do body.
Comuns em APIs
Authorization: Bearer <jwt>— autenticação/autorizaçãoContent-Type: application/json— tipo do corpo enviadoAccept: application/json— formato aceito na respostaCache-Control: no-cache— cacheX-Request-Id: ...— rastreabilidade
Express
router.get('/secure', (req, res) => {
const auth = req.headers['authorization']; // ou req.get('authorization')
if (!auth) return res.status(401).json({ error: 'Token não enviado' });
res.json({ ok: true });
});
5) Exemplo Unificado (Músicas por Usuário)
- URL Param:
:userId→ qual usuário. - Query Param:
genre,year→ filtros opcionais. - Body Param (se fosse POST/PUT): dados complexos (JSON).
- Headers:
Authorization,Accept,Content-Type…
Express
router.get('/users/:userId/musics', (req, res) => {
const { userId } = req.params;
const { genre, year } = req.query;
const auth = req.get('authorization');
res.json({ userId, genre, year, auth });
});
6) Boas Práticas
- Consistência de nomes (
snake_caseoucamelCase) e semântica clara. - URL Params para identidade de recurso; Query para filtros; Body para dados.
- Validação de entrada (ex.:
zod,joi,class-validator). - Documentação com OpenAPI/Swagger.
- Paginação previsível (
limit,pageoucursor). - Erros padronizados (status code + payload consistente).
- Headers: sempre envie
Content-Typecorreto e valideAuthorizationquando necessário.