Package Exports
- @nestgate/rest
- @nestgate/rest/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@nestgate/rest) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@nestgate/rest
Elegant REST API decorators that combine routing, validation, and documentation in a single decorator.
🎯 Features
- Composable Decorators - Combine
@Get,@Post, etc. with@ApiResponseand@ApiOperation - Auto-Documentation - Swagger integration out of the box
- Type-Safe - Full TypeScript support
- Clean Code - Reduce boilerplate significantly
📦 Installation
npm install @nestgate/rest
# or
pnpm add @nestgate/rest
# or
yarn add @nestgate/rest🚀 Quick Start
Before NestGate
import { Controller, Get, Post } from '@nestjs/common';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
@Controller('users')
@ApiTags('Users')
export class UsersController {
@Get()
@ApiOperation({ summary: 'Get all users' })
@ApiResponse({ status: 200, type: [UserDto] })
async findAll() {
// ...
}
@Post()
@ApiOperation({ summary: 'Create a new user' })
@ApiResponse({ status: 201, type: UserDto })
async create() {
// ...
}
}With NestGate
import { Controller } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { ApiGet, ApiPost } from '@nestgate/rest';
@Controller('users')
@ApiTags('Users')
export class UsersController {
@ApiGet('', UserDto, {
summary: 'Get all users',
})
async findAll() {
// ...
}
@ApiPost('', UserDto, {
summary: 'Create a new user',
})
async create() {
// ...
}
}📚 API Reference
Available Decorators
@ApiGet(path?, model?, options?)- Combines@Get(),@ApiResponse(),@ApiOperation()@ApiPost(path?, model?, options?)- Combines@Post(),@ApiResponse(),@ApiOperation()@ApiPatch(path?, model?, options?)- Combines@Patch(),@ApiResponse(),@ApiOperation()@ApiPut(path?, model?, options?)- Combines@Put(),@ApiResponse(),@ApiOperation()@ApiDelete(path?, model?, options?)- Combines@Delete(),@ApiResponse(),@ApiOperation()
Parameters
path (optional)
- Type:
string - Default:
'' - Description: The route path
model (optional)
- Type:
Type<any> - Description: The response model class for Swagger documentation
options (optional)
- Type:
ApiGateOptions - Properties:
summary?: string- API operation summarydescription?: string- API operation descriptiondeprecated?: boolean- Mark as deprecated
Status Codes
@ApiGet- Returns200 OK@ApiPost- Returns201 Created@ApiPatch- Returns200 OK@ApiPut- Returns201 Created@ApiDelete- Returns200 OKif model provided,204 No Contentif not
💡 Examples
Basic Usage
import { ApiGet } from '@nestgate/rest';
@ApiGet('users', UserDto)
findAll() {
return this.userService.findAll();
}With Options
import { ApiGet } from '@nestgate/rest';
@ApiGet('users', UserDto, {
summary: 'Get all users',
description: 'Retrieves a paginated list of all users',
deprecated: false
})
findAll() {
return this.userService.findAll();
}With Path Parameters
import { ApiGet } from '@nestgate/rest';
@ApiGet('users/:id', UserDto, {
summary: 'Get user by ID'
})
findOne(@Param('id') id: string) {
return this.userService.findOne(id);
}Delete Without Response Model
import { ApiDelete } from '@nestgate/rest';
@ApiDelete('users/:id', undefined, {
summary: 'Delete user'
})
// Returns 204 No Content
remove(@Param('id') id: string) {
return this.userService.remove(id);
}Delete With Response Model
import { ApiDelete } from '@nestgate/rest';
@ApiDelete('users/:id', UserDto, {
summary: 'Delete user and return deleted data'
})
// Returns 200 OK with user data
remove(@Param('id') id: string) {
return this.userService.remove(id);
}🔗 Related Packages
- @nestgate/validators - Type-safe validation decorators
- @nestgate/core - Core utilities
📝 License
MIT © NestGate
🤝 Contributing
Contributions are welcome! Please see our Contributing Guide.