Quando desenvolvemos APIs RESTful, uma das primeiras decisões que precisamos tomar é como estruturar nossas URLs para que sejam intuitivas, eficientes e sigam as melhores práticas. Dois conceitos fundamentais nessa estruturação são os Path Parameters e os Query Parameters. Embora pareçam semelhantes à primeira vista, eles têm propósitos distintos e saber quando usar cada um pode significar a diferença entre uma API bem projetada e uma confusa.
Entendendo os conceitos
Path Parameters
Path Parameters (ou parâmetros de caminho) são variáveis embutidas na própria rota da URL. Eles são usados para identificar um recurso específico ou uma entidade.
// Exemplo de rota com Path Parameter
app.get('/users/:userId', (req, res) => {
const userId = req.params.userId;
// Buscar usuário com o ID específico
res.send(`Buscando detalhes do usuário ${userId}`);
});
Uma requisição para esta rota se pareceria com: GET /users/123
Query Parameters
Query Parameters (ou parâmetros de consulta) aparecem após o sinal de interrogação (?
) na URL e são formatados como pares de chave-valor separados por &
. Eles são usados principalmente para filtrar, ordenar ou paginar os dados.
// Exemplo de rota com Query Parameters
app.get('/products', (req, res) => {
const { category, sortBy, page } = req.query;
// Buscar produtos com os filtros especificados
res.send(`Buscando produtos da categoria ${category}, ordenados por ${sortBy}, página ${page}`);
});
Uma requisição para esta rota se pareceria com: GET /products?category=electronics&sortBy=price&page=2
Quando usar cada um?
A escolha entre Path e Query Parameters depende principalmente do propósito da sua requisição. Aqui está uma tabela comparativa para ajudar na decisão:
Característica | Path Parameters | Query Parameters |
---|---|---|
Propósito | Identificar um recurso específico | Filtrar, ordenar ou paginar dados |
Obrigatoriedade | Geralmente obrigatórios | Geralmente opcionais |
Suporte ao cache | Melhor para cache | Pode complicar o cache |
SEO | Mais amigável para SEO | Menos impacto no SEO |
Legibilidade | Mais limpo para identificadores | Melhor para múltiplos parâmetros |
Melhores práticas
Use Path Parameters quando:
- Identificando recursos específicos: Para acessar uma entidade única por seu identificador
/users/123
/products/456
/articles/como-usar-typescript
- Seguindo hierarquias de recursos: Para representar relações de pertencimento
/users/123/orders/789
/departments/rh/employees/456
- Para valores obrigatórios: Se o parâmetro é essencial para a requisição funcionar
Use Query Parameters quando:
- Filtrando coleções: Para refinar resultados de uma lista
/products?category=electronics&minPrice=100&maxPrice=500
- Paginação e ordenação: Para controlar como os dados são apresentados
/articles?page=2&perPage=10&sortBy=date
- Parâmetros opcionais: Quando a requisição funciona mesmo sem estes parâmetros
/search?q=typescript&advanced=true
Considerações técnicas
Aspectos de segurança
É importante lembrar que Path Parameters ficam mais expostos nos logs de servidores, enquanto Query Parameters podem ser mais facilmente ocultados. Se você estiver lidando com dados sensíveis, considere essa diferença.
Compatibilidade com frameworks
A maioria dos frameworks modernos (Express, NestJS, FastAPI, etc.) oferece suporte robusto tanto para Path quanto para Query Parameters. No entanto, a sintaxe pode variar:
No Express e NestJS (ambiente Node.js):
- Path Parameters:
/users/:id
- Query Parameters: acessados via
req.query
No ASP.NET Core:
- Path Parameters:
/users/{id}
- Query Parameters: injetados via parâmetros do método
Conclusão
Não existe uma regra absoluta sobre quando usar Path ou Query Parameters. O mais importante é manter a consistência em toda a sua API e seguir as convenções REST.
Uma abordagem geralmente aceita é:
- Use Path Parameters para identificar recursos específicos
- Use Query Parameters para tudo relacionado à filtragem, paginação e ordenação
Seguindo essas diretrizes, você criará APIs mais intuitivas e fáceis de consumir, tanto para desenvolvedores quanto para sistemas automatizados.
E você, tem alguma preferência entre Path e Query Parameters? Compartilhe nos comentários!
Este post foi escrito por Johan Henrique, desenvolvedor fullstack e Head da SparkWebStudios. Visite meu portfólio para mais conteúdos sobre desenvolvimento web.