name: NestJS OpenAPI description: Swagger automation and Generic response documentation. metadata: labels: [nestjs, swagger, openapi, docs] triggers: files: ['main.ts', '**/*.dto.ts'] keywords: [DocumentBuilder, SwaggerModule, ApiProperty, ApiResponse]
OpenAPI & Documentation
Priority: P2 (MAINTENANCE)
Automated API documentation and OpenAPI standards.
-
Automation: ALWAYS use the Nest CLI Plugin (
@nestjs/swagger/plugin).-
Benefit: Auto-generates
@ApiPropertyfor DTOs and response types. Reduces boilerplate by 50%. -
Config:
nest-cli.json->"plugins": ["@nestjs/swagger"].
-
Benefit: Auto-generates
-
Versioning: Maintain separate Swagger docs for
v1,v2if breaking changes occur.
Response Documentation
-
Strictness: Every controller method must have
@ApiResponse({ status: 200, type: UserDto }). -
Generic Wrappers: Define
ApiPaginatedResponse<T>decorators to document genericPageDto<T>returns properly (Swagger doesn't handle generics well by default).-
Technique: Use
ApiExtraModels+getSchemaPath()in the custom decorator to handle the genericTref.
-
Technique: Use
Advanced Patterns
-
Polymorphism: Use
@ApiExtraModelsandgetSchemaPathforoneOf/anyOfunion types. -
File Uploads: Document
multipart/form-dataexplicitly.-
Decorator:
@ApiConsumes('multipart/form-data'). -
Body:
@ApiBody({ schema: { type: 'object', properties: { file: { type: 'string', format: 'binary' } } } }).
-
Decorator:
-
Authentication: Specify granular security schemes per route/controller.
-
Types:
@ApiBearerAuth()or@ApiSecurity('api-key')(Must matchDocumentBuilder().addBearerAuth()).
-
Types:
-
Enums: Force named enums for reusable schema references.
-
Code:
@ApiProperty({ enum: MyEnum, enumName: 'MyEnum' }).
-
Code:
Operation Grouping
-
Tags: Mandatory
@ApiTags('domains')on every Controller to group endpoints logically. -
Multiple Docs: generate separate docs for different audiences (e.g. Public vs Internal).
SwaggerModule.createDocument(app, config, { include: [PublicModule] }); // /api/docs SwaggerModule.createDocument(app, adminConfig, { include: [AdminModule] }); // /admin/docs
Self-Documentation
-
Compodoc: Use
@compodoc/compodocto generate static documentation of the module graph, services, and dependencies.- Use Case: New developer onboarding and architectural review.
Advanced OpenAPI
-
Polymorphism: Use
@ApiExtraModelsandgetSchemaPathforoneOf/anyOfunion types.-
Pattern: Register generic/sub-types in controller, refer via schema
$ref.
-
Pattern: Register generic/sub-types in controller, refer via schema
-
File Uploads: Document
multipart/form-dataexplicitly.-
Decorator:
@ApiConsumes('multipart/form-data'). -
Body:
@ApiBody({ schema: { type: 'object', properties: { file: { type: 'string', format: 'binary' } } } }).
-
Decorator:
-
Authentication: Specify granular security schemes per route/controller.
-
Types:
@ApiBearerAuth()or@ApiSecurity('api-key'). Match setup inDocumentBuilder.
-
Types:
-
Enums: Force named enums for reusable schema references.
-
Code:
@ApiProperty({ enum: MyEnum, enumName: 'MyEnum' }).
-
Code:
-
Grouping: Segregate public vs. internal docs.
-
Setup:
SwaggerModule.createDocument(app, config, { include: [AdminModule] }).
-
Setup:
chat Comments (0)
Sign in to join the discussion and leave a comment.
Skill Details
GitHub Stars
143
GitHub Forks
48
Created
Jan 2026
Last Updated
5 months ago
tools
tools productivity tools
Related Skills
Build your own?
Join 12,000+ developers contributing to the Claude ecosystem.
No comments yet. Be the first to share your thoughts!