Гибридные приложения с NestJS
На этом уроке мы рассмотрим, как создавать гибридные приложения в NestJS, которые сочетают в себе различные парадигмы, такие как REST API, GraphQL и микросервисы, в рамках одного проекта.
- Сочетание 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 и микросервисы. Это позволяет создавать гибкие, масштабируемые и удобные в сопровождении приложения, отвечающие различным требованиям.