Гибридные приложения с NestJS

На этом уроке мы рассмотрим, как создавать гибридные приложения в NestJS, которые сочетают в себе различные парадигмы, такие как REST API, GraphQL и микросервисы, в рамках одного проекта.

  1. Сочетание REST и GraphQL: NestJS позволяет использовать конечные точки REST и GraphQL в одном приложении. У вас могут быть разные модули для REST и GraphQL, каждый со своими контроллерами и преобразователями.

Например, чтобы добавить GraphQL в существующий проект, выполните следующие действия:

  • Установите необходимые зависимости:
npm install @nestjs/graphql graphql-tools graphql apollo-server-express
  • Создайте файл graphql.module.ts и импортируйте GraphQLModule:
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: 'schema.gql',
    }),
  ],
})
export class GraphqlModule {}
  • Импортируйте GraphqlModule в свой файл app.module.ts:
import { Module } from '@nestjs/common';
import { GraphqlModule } from './graphql.module';

@Module({
  imports: [GraphqlModule],
})
export class AppModule {}
  • Сочетание REST и микросервисов. Вы также можете создать приложение, сочетающее REST и микросервисы. Например, вы можете использовать пакет @nestjs/microservices для создания микрослужбы и взаимодействия с ней через REST API.

Чтобы настроить микросервис, выполните следующие действия:

  • Установите необходимые зависимости:
npm install @nestjs/microservices
  • Создайте файл microservices.module.ts и импортируйте ClientsModule:
import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';

@Module({
  imports: [
    ClientsModule.register([
      {
        name: 'MICROSERVICE_NAME',
        transport: Transport.TCP,
        options: {
          host: 'localhost',
          port: 3001,
        },
      },
    ]),
  ],
})
export class MicroservicesModule {}
  • Импортируйте MicroservicesModule в свой файл app.module.ts:
import { Module } from '@nestjs/common';
import { MicroservicesModule } from './microservices.module';

@Module({
  imports: [MicroservicesModule],
})
export class AppModule {}
  • Связь между REST и микросервисами. Вы можете использовать класс ClientProxy для связи между REST API и микросервисами. Вставьте ClientProxy в свой контроллер и используйте его для отправки сообщений в микросервис:
import { Controller, Get } from '@nestjs/common';
import { ClientProxy, Client, MessagePattern } from '@nestjs/microservices';

@Controller('rest')
export class RestController {
  @Client({
    transport: Transport.TCP,
    options: {
      host: 'localhost',
      port: 3001,
    },
  })
  client: ClientProxy;
  @Get('call-microservice')
  async callMicroservice() {
    const result = await this.client.send('microservice_route', {}).toPromise();
    return result;
  }
}

Таким образом, NestJS позволяет создавать гибридные приложения, сочетающие в себе различные парадигмы, такие как REST, GraphQL и микросервисы. Это позволяет создавать гибкие, масштабируемые и удобные в сопровождении приложения, отвечающие различным требованиям.