Swagger / OpenAPI
Documentacao automatica da API em /api/docs.
Visao geral
O PlazerCLI configura Swagger UI com especificacao OpenAPI 3.0 acessivel em /api/docs. A documentacao inclui todos os endpoints, schemas, autenticacao Bearer JWT e permite testar endpoints diretamente pela interface.
Acessando a documentacao
Apos iniciar o servidor, acesse:
- Swagger UI:
http://localhost:3001/api/docs - OpenAPI JSON:
http://localhost:3001/api/docs/json(Express)
A interface vem com:
- Autenticacao JWT persistente (persist authorization)
- Filtro de endpoints por tag
- Medicao de tempo de resposta
- Syntax highlighting (tema Monokai)
- Endpoints colapsados por padrao
NestJS — @nestjs/swagger
Usa o modulo oficial @nestjs/swagger com decorators:
// apps/api/src/common/swagger/swagger.config.ts
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
export function setupSwagger(app: INestApplication): void {
const config = new DocumentBuilder()
.setTitle('meu-projeto')
.setDescription('API documentation')
.setVersion('1.0')
.addBearerAuth({
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT',
}, 'access-token')
.addTag('health')
.addTag('auth')
.addTag('users')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api/docs', app, document);
}
// Chamado no main.ts:
setupSwagger(app);
Para documentar endpoints NestJS, use decorators:
import { ApiTags, ApiBearerAuth, ApiResponse } from '@nestjs/swagger';
@ApiTags('users')
@ApiBearerAuth('access-token')
@Controller('users')
export class UsersController {
@Get()
@ApiResponse({ status: 200, description: 'Lista de usuarios' })
findAll() { ... }
}
Express — swagger-jsdoc
Usa swagger-jsdoc com comentarios @openapi nos arquivos de rota:
// apps/api/src/config/swagger.ts
import swaggerJsdoc from 'swagger-jsdoc';
import swaggerUi from 'swagger-ui-express';
const swaggerSpec = swaggerJsdoc({
definition: {
openapi: '3.0.3',
info: { title: 'meu-projeto', version: '1.0.0' },
components: {
securitySchemes: {
bearerAuth: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
},
},
},
apis: ['./src/routes/**/*.ts', './src/**/*.routes.ts'],
});
export function setupSwagger(app: Express): void {
app.use('/api/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
app.get('/api/docs/json', (_req, res) => res.json(swaggerSpec));
}
Para documentar endpoints, use JSDoc:
/**
* @openapi
* /api/users:
* get:
* tags: [users]
* summary: Lista todos os usuarios
* security:
* - bearerAuth: []
* responses:
* 200:
* description: Lista de usuarios
*/
router.get('/users', handler);
Fastify — @fastify/swagger
Plugin Fastify com @fastify/swagger e @fastify/swagger-ui:
// apps/api/src/plugins/swagger.ts
async function swaggerPlugin(app: FastifyInstance) {
await app.register(swagger, {
openapi: {
openapi: '3.0.3',
info: { title: 'meu-projeto', version: '1.0.0' },
components: {
securitySchemes: {
bearerAuth: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
},
},
},
});
await app.register(swaggerUi, {
routePrefix: '/api/docs',
uiConfig: { persistAuthorization: true },
});
}
Para documentar endpoints Fastify, use o schema da rota:
app.get('/users', {
schema: {
tags: ['users'],
summary: 'Lista todos os usuarios',
security: [{ bearerAuth: [] }],
response: {
200: {
type: 'array',
items: {
type: 'object',
properties: {
id: { type: 'string' },
email: { type: 'string' },
},
},
},
},
},
}, handler);
Tags padrao
O PlazerCLI configura 3 tags iniciais na documentacao:
| Tag | Descricao |
|---|---|
health | Health check endpoints |
auth | Authentication endpoints |
users | User management endpoints |
Adicione mais tags conforme cria novos modulos (orders, products, billing, etc.).