Este documento é principalmente histórico. Ele registra a estratégia
que organizou os grupos OpenAPI durante a fase dominada por
AbstractCrudController e durante a transição para o
baseline resource-oriented.
Use este material para:
Não use este texto como onboarding principal para recursos novos.
Esta documentação descreve a Estratégia Dupla de Grupos
OpenAPI implementada no Praxis Metadata Starter. A origem desse
desenho está no core legado, mas a resolução canônica atual já não
depende apenas da velha fronteira
AbstractCrudController.
Antes: Documento OpenAPI monolítico de ~500KB+ para qualquer consulta Depois: Grupos específicos de 3-5KB para CRUDs individuais + grupos contextuais de 50-100KB
Escopo: Apenas controllers que estendem
AbstractCrudController Performance: ~3-5KB
por documento (99% de redução) Uso: Consultas
específicas como
/schemas/filtered?path=/api/human-resources/eventos-folha/all
@ApiResource("/api/human-resources/funcionarios")
@ApiGroup("human-resources")
public class FuncionarioController extends AbstractCrudController<...> {
// Cria grupo individual: "api-human-resources-funcionarios"
}Escopo: QUALQUER controller com anotação
@ApiGroup Performance: ~50-100KB por
documento (90% de redução) Uso: Visualização de
contextos completos no Swagger UI
@ApiGroup// Controllers CRUD
@ApiGroup("human-resources")
public class FuncionarioController extends AbstractCrudController<...> { }
@ApiGroup("human-resources")
public class CargoController extends AbstractCrudController<...> { }
// Controllers Bulk
@ApiGroup("human-resources-bulk")
public class FuncionarioBulkController extends AbstractBulkController<...> { }
// Qualquer Controller
@ApiGroup("relatorios")
@RestController
public class CustomReportController { }Para uma aplicação com 8 controllers CRUD + 8 controllers Bulk:
📋 Grupos Individuais (8):
├── api-human-resources-funcionarios (3KB - ultra-rápido)
├── api-human-resources-cargos (3KB - ultra-rápido)
├── api-human-resources-departamentos (3KB - ultra-rápido)
├── api-human-resources-dependentes (3KB - ultra-rápido)
├── api-human-resources-enderecos (3KB - ultra-rápido)
├── api-human-resources-eventos-folha (3KB - ultra-rápido)
├── api-human-resources-ferias-afastamentos (3KB - ultra-rápido)
└── api-human-resources-folha-pagamentos (3KB - ultra-rápido)
🏷️ Grupos Agregados (2):
├── human-resources (50KB - 8 controllers CRUD)
└── human-resources-bulk (30KB - 8 controllers Bulk)
📈 Total: 10 grupos vs documento completo (500KB+)
Classe principal que implementa a estratégia dupla:
AbstractCrudController para grupos individuais@ApiGroupGroupedOpenApi no
Spring Bean FactoryResolve automaticamente qual grupo usar baseado no path da requisição:
Implementa algoritmo “best match” que prioriza padrões mais específicos:
@ApiGroup@ApiResource e
@RequestMapping detectados automaticamenteO dropdown do Swagger UI mostrará todos os grupos disponíveis:
📋 Grupos Individuais (ultra-rápidos):
☑️ api-human-resources-cargos
☑️ api-human-resources-departamentos
☑️ api-human-resources-dependentes
☑️ api-human-resources-enderecos
☑️ api-human-resources-eventos-folha ⚡ (3KB - ultra-específico)
☑️ api-human-resources-ferias-afastamentos
☑️ api-human-resources-folha-pagamentos
☑️ api-human-resources-funcionarios
🏷️ Grupos Agregados (contextos):
☑️ human-resources (50KB - 8 controllers CRUD)
☑️ human-resources-bulk (30KB - 8 controllers Bulk)
DynamicSwaggerConfig.createDynamicGroups() executado via @PostConstruct
│
├─ 1ª Passada: Escanear AbstractCrudController
│ ├─ Encontrar 8 controllers CRUD
│ ├─ Extrair paths via @ApiResource
│ └─ Criar 8 grupos individuais
│
├─ 2ª Passada: Escanear @ApiGroup em TODOS controllers
│ ├─ Encontrar 16 controllers com @ApiGroup
│ ├─ Agrupar por nome do @ApiGroup
│ └─ Criar 2 grupos agregados
│
└─ Resultado: 10 grupos registrados no Spring Bean Factory
GET /schemas/filtered?path=/api/human-resources/eventos-folha/all
│
├─ ApiDocsController.resolveGroupFromPath()
│ ├─ OpenApiGroupResolver.resolveGroup()
│ └─ Resolve: "api-human-resources-eventos-folha"
│
├─ ApiDocsController.getDocumentForGroup()
│ ├─ Cache hit/miss check
│ ├─ Fetch: /v3/api-docs/api-human-resources-eventos-folha
│ └─ Cache documento (3KB)
│
└─ Filtrar schema específico + metadados x-ui
@ComponentScan(basePackages = {"org.praxisplatform.uischema.configuration"})# Validação de @ApiResource em controllers AbstractCrud
praxis.openapi.validation.api-resource-required=WARN # WARN|FAIL|IGNORE
A Estratégia Dupla de Grupos OpenAPI oferece: - Performance extremamente otimizada (99% de redução para CRUDs) - Flexibilidade total para organização por contextos - Zero configuração com detecção automática - Integração perfeita com Swagger UI
Esta implementação transforma uma arquitetura de documentação monolítica em um sistema ultra-otimizado que escala perfeitamente com o crescimento da aplicação.