OpenAPI e /docs
createApp()
.mount(UserRoutes)
.openapi({
info: { title: 'Minha API', version: '1.0.0' },
servers: [{ url: 'https://api.exemplo.dev' }],
docs: true, // Swagger UI em /docs (desligado por padrão)
guards: [isAdmin], // só para /openapi.json e /docs
});Nada é exposto sem
app.openapi(). Para só gerar o arquivo, sem rota, useapp.openapiDocument().GET /openapi.json: documento OpenAPI 3.1 gerado das rotas registradas. É montado na primeira requisição, então pode chamaropenapi()antes ou depois dosmount().GET /docs: Swagger UI, opt-in comdocs: true(oudocs: '/ref'para outro path). A versão é fixada e carregada do CDN com SRI (o navegador confere o hash do arquivo), e a página tem CSP própria, comnonceno script.Acesso:
middlewareseguardsfuncionam como nomount()e valem só para o documento e a página, no path que estiver configurado. As duas rotas também passam pelos middlewares globais (app.use()).Opções:
pathmuda o endereço do documento.app.openapiDocument(): devolve o objeto, para gravar em arquivo, gerar clientes ou testar no CI.O que entra no documento:
Origem Vira Path ( /:id(^\\d+))/{id}params,query,headersparameters, comrequiredbodyrequestBodyem JSONresponseuma resposta por status, com os contentTypedeclaradosErros resposta defaultcom o schemaProblemDetails; comformatError, só a descriçãoClasse e método tagseoperationId(UserRoutes.getUser)Limites: só schemas JSON Schema (TypeBox) entram como estão. Rotas sem schema de resposta aparecem com um
200genérico. Em produção, proteja as rotas comguards/middlewaresou gere só o arquivo comopenapiDocument().