Desenvolver uma API altamente performática capaz de:
- Receber e armazenar um volume massivo de dados (100.000 usuários).
- Analisar esses dados em tempo real através de endpoints estratégicos.
- Garantir excelente tempo de resposta (<1s) para todas as operações.
O desafio avaliará:
- Capacidade de estruturar código limpo, modular e de alta manutenção.
- Competência em design de API performática.
- Habilidade de documentar, validar e auditar a entrega.
O payload a ser processado terá a seguinte estrutura para cada usuário:
{
"id": "uuid",
"name": "string",
"age": "int",
"score": "int",
"active": "bool",
"country": "string",
"team": {
"name": "string",
"leader": "bool",
"projects": [
{ "name": "string", "completed": "bool" }
]
},
"logs": [
{ "date": "YYYY-MM-DD", "action": "login/logout" }
]
}
Método | Rota | Descrição |
---|---|---|
POST | /users |
Recebe o arquivo JSON, valida e armazena usuários na memória (simulando um banco de dados). |
GET | /superusers |
Retorna usuários ativos (active = true ) com score >= 900 , tempo de resposta e timestamp. |
GET | /top-countries |
Agrupa superusuários por country e retorna os 5 países com maior número de superusuários. |
GET | /team-insights |
Agrupa usuários por team.name , retornando: total de membros, total de líderes, total de projetos concluídos e % de membros ativos. |
GET | /active-users-per-day |
Conta logins por date . Suporta filtro por min (ex.: ?min=3000 para dias com pelo menos 3000 logins). |
GET | /evaluation |
Autoavaliação da API: verifica status 200, tempo de resposta, validade do JSON para os principais endpoints. Retorna um relatório de avaliação. |
- Tempo de resposta < 1 segundo em todos os endpoints (considerando memória local).
- Todos os endpoints devem obrigatoriamente retornar:
processing_time_ms
(tempo de processamento em milissegundos).timestamp
(momento exato da requisição).
- Código modular, escalável e documentado.
- Framework/language de livre escolha (preferencialmente estruturas que facilitem alta performance).
- Aceita o payload contendo todos os usuários.
- Valida a estrutura do JSON.
- Persistência apenas em memória (não usar bancos de dados externos).
- Aceita cargas tanto de 1.000 quanto de 100.000 usuários.
- Filtro dinâmico aplicado:
active == true
score >= 900
- Deverá também informar:
- Quantidade de superusuários encontrados.
- Tempo de execução da consulta.
- Baseado no resultado de
/superusers
. - Retornar:
- Nome do país.
- Quantidade de superusuários.
- Ordenar do maior para o menor e limitar a 5 resultados.
Para cada equipe (team.name
), calcular:
- Número total de membros.
- Quantidade de líderes (
leader = true
). - Total de projetos concluídos (
completed = true
). - Percentual de membros ativos (
active = true
).
- Baseado nos
logs
de açãologin
. - Permitir filtro opcional via query param
?min=valor
. - Exemplo:
/active-users-per-day?min=3000
retorna somente datas com mais de 3000 logins.
Executa testes automatizados nos endpoints:
- Valida status HTTP 200.
- Mede o tempo de resposta em milissegundos.
- Valida que o retorno seja JSON bem formado.
- Devolve um relatório consolidado de performance.
Exemplo de resposta:
{
"superusers": { "status": 200, "response_time_ms": 128, "valid_json": true },
"top-countries": { "status": 200, "response_time_ms": 105, "valid_json": true },
"team-insights": { "status": 200, "response_time_ms": 142, "valid_json": true },
"active-users-per-day": { "status": 200, "response_time_ms": 97, "valid_json": true }
}
Critério | Peso |
---|---|
Código limpo, modular e documentado | Alto |
Desempenho <1s para todos endpoints | Altíssimo |
Estruturação correta dos dados e lógicas de negócio | Alto |
Qualidade e estrutura da documentação | Bônus |
Estratégia de avaliação automática no /evaluation |
Bônus extra |
- Use estruturas de dados otimizadas (e.g., HashMap, Streams paralelos, Cache local).
- Trabalhe com Streams e lambdas se estiver usando Java, ou FastAPI se Python.
- Sempre medir o tempo de início e fim no controller para calcular
processing_time_ms
. - Garanta que o sistema suporte múltiplas requisições simultâneas (thread-safe).
- Download JSON com 100.000 usuários (simulado)
- Download JSON com 1.000 usuários para testes rápidos (simulado)
- Documentar API via Swagger/OpenAPI.
- Fornecer um arquivo README.md explicando estrutura, decisão de arquitetura e como executar localmente.
- Incluir scripts prontos de testes.
"O verdadeiro diferencial não será apenas construir a API, mas pensar em performance, escalabilidade, governança de dados e experiência de consumo como um todo."