Filtragem Avançada
Este documento detalha como usar o parâmetro de query string filter para realizar buscas avançadas no endpoint de listagem de documentos. A filtragem permite que você consulte:
- Campos do modelo Document:
created_at,updated_at,expires_at,version - Campos específicos dentro do objeto JSON
datados seus documentos
Endpoint Alvo: GET /api/v1/client/{client}/{env}/context/{context}/type/{type}
Tipos de Filtragem Disponíveis
1. Filtros em Campos do Modelo Document
Você pode filtrar diretamente pelos seguintes campos do modelo:
| Campo | Tipo | Descrição | Exemplo |
|---|---|---|---|
created_at | timestamp | Data de criação do documento | ?filter[created_at_gte]=2024-01-01 |
updated_at | timestamp | Data da última atualização | ?filter[updated_at_lt]=2024-12-31 |
expires_at | timestamp | Data de expiração (se definida) | ?filter[expires_at_gt]=2024-06-01 |
version | numeric | Versão do documento | ?filter[version]=5 |
Exemplo: Documentos criados nas últimas 24 horas
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[created_at_gte]=2024-01-20" \
-H "Authorization: Bearer {SEU_TOKEN}"Exemplo: Documentos atualizados hoje
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[updated_at_gte]=2024-01-20 00:00:00" \
-H "Authorization: Bearer {SEU_TOKEN}"2. Filtros em Campos JSON (data)
Sintaxe Básica
A sintaxe geral para a filtragem é ?filter[<campo>]=<valor>.
- Para campos do modelo: aplica busca diretamente na coluna do banco
- Para campos JSON: aplica busca por igualdade exata no campo especificado dentro do objeto
data
Exemplo: Busca por Igualdade
Vamos supor que você armazena documentos do tipo users com a seguinte estrutura de data:
{
"name": "Alice",
"city": "New York",
"status": "active"
}Para encontrar todos os usuários da cidade de "New York", a requisição seria:
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[city]=New York" \
-H "Authorization: Bearer {SEU_TOKEN}"Operadores de Comparação
Para buscas mais complexas, você pode adicionar um sufixo ao nome do campo para especificar o operador de comparação.
Operadores Disponíveis
| Sufixo | Operador | Descrição | Exemplo de Uso |
|---|---|---|---|
| (nenhum) | = | Igual a. | ?filter[status]=active |
_gt | > | Maior que. | ?filter[age_gt]=30 |
_gte | >= | Maior ou igual a. | ?filter[level_gte]=10 |
_lt | < | Menor que. | ?filter[age_lt]=25 |
_lte | <= | Menor ou igual a. | ?filter[signup_date_lte]=2024-01-01 |
_neq | != | Diferente de. | ?filter[city_neq]=London |
_like | LIKE | Contém a substring. | ?filter[name_like]=lice |
Exemplos Detalhados
Considere os seguintes documentos do tipo users:
Documento 1:
{ "name": "Alice", "age": 30, "level": 15, "signup_date": "2024-03-15" }Documento 2:
{ "name": "Bob", "age": 25, "level": 10, "signup_date": "2024-01-10" }Documento 3:
{ "name": "Charlie", "age": 35, "level": 10, "signup_date": "2024-05-20" }1. Filtragem Numérica
A API lida corretamente com comparações numéricas.
Encontrar usuários com level maior ou igual a 10:
?filter[level_gte]=10
Resultado: Bob, Charlie
Encontrar usuários com age estritamente menor que 30:
?filter[age_lt]=30
Resultado: Bob
2. Filtragem de Datas
Para que a comparação de datas funcione corretamente, armazene as datas no formato AAAA-MM-DD ou AAAA-MM-DD HH:MM:SS.
Encontrar usuários que se cadastraram antes de Março de 2024:
?filter[signup_date_lt]=2024-03-01
Resultado: Bob
3. Filtragem de Strings
Encontrar usuários cujo nome contém "li":
?filter[name_like]=li
Resultado: Alice, Charlie
Combinando Múltiplos Filtros
Você pode combinar múltiplos filtros na mesma requisição para criar consultas mais refinadas. A API aplicará todos os filtros usando a lógica AND.
Exemplo: Encontrar usuários com level maior ou igual a 10 E que se cadastraram após 1º de Fevereiro de 2024.
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[level_gte]=10&filter[signup_date_gt]=2024-02-01" \
-H "Authorization: Bearer {SEU_TOKEN}"Resultado: Alice, Charlie
Combinando Filtros de Modelo e JSON
Você pode combinar filtros de campos do modelo com filtros de campos JSON na mesma requisição para criar consultas ainda mais refinadas.
Exemplo: Encontrar documentos criados hoje que tenham usuários ativos com level maior que 10
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[created_at_gte]=2024-01-20&filter[status]=active&filter[level_gt]=10" \
-H "Authorization: Bearer {SEU_TOKEN}"Exemplo: Documentos atualizados na última semana com usuários de uma cidade específica
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[updated_at_gte]=2024-01-13&filter[city]=New York" \
-H "Authorization: Bearer {SEU_TOKEN}"Exemplo: Versões específicas de documentos com dados contendo texto específico
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/.../users?filter[version_gte]=3&filter[name_like]=Alice" \
-H "Authorization: Bearer {SEU_TOKEN}"Notas Importantes
- Performance: Filtros em campos do modelo (
created_at,updated_at, etc.) são mais eficientes pois utilizam índices do banco de dados - Formatos de Data: Para campos timestamp, aceite os formatos:
YYYY-MM-DD,YYYY-MM-DD HH:MM:SS, ou timestamp Unix - Retrocompatibilidade: Filtros existentes em campos JSON continuam funcionando normalmente
Updated 6 days ago
