如何在nestjs微服务中使用graphql?
我们都知道 graphql 可以与 http 一起使用。
但是它可以被像nestjs微服务这样的微服务使用吗?
import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
AppModule,
{
transport: Transport.TCP,
options: {
port: 23001,
},
},
);
await app.listen();
}
bootstrap();
我们都知道nestjs中的graphql应该构建解析器,但是微服务应该使用具有MessagePattern和EventPattern的控制器。
所以,是的,可以使用它。但有很多理由说明它不应该这样做。额外的复杂性,与后端应用程序的严格耦合,而不是那么容易转换为其他消息传递协议(例如从 HTTP 到 MQ - REST 具有易于序列化为非 REST 的任何结构)。
但是,是的,这是可能的。 GraphQL 对 JSON 请求主体和 JSON 响应进行操作。因此,这要么是常规控制器内的一些自定义解析,要么重写整个微服务逻辑以适应 Apollo 或 Mercurius - 以及执行上下文等。
那不值得 :) 我是说,我喜欢 GraphQL :)