Как реализовать управление версиями медиа-типов в NestJs?
При использовании управления версиями типа носителя разные версии конечной точки должны иметь один и тот же URL-адрес, и клиент может установитьAccept
заголовок к желаемой версии: например
Accept: application/vnd.example.v1+json
Для версии 2:
Accept: application/vnd.example.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 имеет фиксированное значение: - будет ли это работать с nodejs-swagger?
0 ответов
Вы можете попробовать это:
@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;
}
}