nestjs-openapi
Swagger automation and Generic response documentation.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
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:
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!