Как реализовать управление версиями медиа-типов в 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;
    }
  }
Другие вопросы по тегам