#routes #nestjs #nestjs-swagger
#маршруты #гнездо js #nestjs-развязность #nestjs
Вопрос:
При использовании медиа-тип-управление версиями, разных версий конечная точка должна иметь тот же URL-адрес, и клиент может установить Accept
заголовок на нужную версию, например:
Accept: application/vnd.adventure-works.v1 json
Для версии 2:
Accept: application/vnd.adventure-works.v2 json
Псевдокод для контроллера:
@Controller('orders')
export class OrdersController {
@Get('orders/:id')
getOrdersV1(@Headers('Accept') acceptHeader: string) {
// accept header must be 'application/vnd.adventure-works.v1 json'
return {
orderId: 1,
orderName: 'Order 1'
};
}
@Get('orders/:id')
getOrdersV2(@Headers('Accept') acceptHeader: string) {
// accept header must be 'application/vnd.adventure-works.v2 json'
return {
orderId: 1,
name: 'Order 1'
};
}
- Как мы можем реализовать это в NestJS?
т. е. мне нужно каким-то образом сообщить маршрутизатору NestJS, что соответствующая конечной точке функция должна вызываться только тогда, когда заголовок accept имеет фиксированное значение: - будет ли это работать с nestjs-swagger?
Обновить
найден запрос на соответствующую функцию: #3569
Ответ №1:
вы можете попробовать это:
@Get('orders/:id')
getOrders(@Headers('Accept') acceptHeader: string) {
//Implement a manager class say OrderManager
OrderManager orderManager = new OrderManager(); // Better to @Inject in constructor
switch(acceptHeader) {
case ''application/vnd.adventure-works.v1 json'':
return orderManager.getOrdersV1();
case ''application/vnd.adventure-works.v2 json'':
return orderManager.getOrdersV2();
default:
// throw new InvalidInputException() if needed
break;
}
}
Комментарии:
1. Что ж, эта реализация работает, но когда у нас есть только один метод, как мы можем сообщить swagger (Open API), какие типы мы возвращаем для каждого заголовка accept? т. е. какие nestjs-swagger-декораторы использовать