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_case
oucamelCase
) 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
,page
oucursor
). - Erros padronizados (status code + payload consistente).
- Headers: sempre envie
Content-Type
correto e valideAuthorization
quando necessário.