Integration with NestJS
Nest (Nest JS) is a progressive Node.js framework for building efficient, reliable and scalable server-side applications.
GraphQL Yoga provides its own Nest GraphQL Driver that support building standalone GraphQL APIs and Apollo Federation GraphQL APIs (Gateway and Services).
For the setup of a new Nest project, please make sure to read the Nest GraphQL documentation.
Standalone
Install
npm i @nestjs/graphql @graphql-yoga/nestjs graphql-yoga graphql
Create Application Module
import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs'
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
@Module({
imports: [
GraphQLModule.forRoot<YogaDriverConfig>({
driver: YogaDriver
})
]
})
export class AppModule {}
Develop GraphQL
This is just a HTTP transport driver; meaning, everything else should work as showcased in NestJS documentation.
Apollo Federation
Separately, we offer a @graphql-yoga/nestjs-federation
driver which allows building Apollo
Federation Gateways and Services through the YogaGatewayDriver
and YogaFederationDriver
drivers.
Install
npm i @nestjs/graphql @graphql-yoga/nestjs-federation graphql-yoga graphql
Subgraph
For the subgraph we use the YogaFederationDriver
and YogaFederationDriverConfig
.
import { YogaFederationDriver, YogaFederationDriverConfig } from '@graphql-yoga/nestjs-federation'
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
import { DeprecatedProductsResolver } from './deprecated-products.resolver'
import { InventoryResolver } from './inventory.resolver'
import { ProductResearchResolver } from './product-research.resolver'
import { ProductsResolver } from './products.resolver'
import { UsersResolver } from './users.resolver'
@Module({
imports: [
GraphQLModule.forRoot<YogaFederationDriverConfig>({
driver: YogaFederationDriver,
typePaths: ['**/*.graphql']
})
],
providers: [
UsersResolver,
ProductsResolver,
ProductResearchResolver,
DeprecatedProductsResolver,
InventoryResolver
]
})
export class AppModule {}
A complete example of the subgraph implementation is available in the repository.
Gateway
For the gateway we use the YogaGatewayDriver
and YogaGatewayDriverConfig
.
import { YogaGatewayDriver, YogaGatewayDriverConfig } from '@graphql-yoga/nestjs-federation'
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
@Module({
imports: [
GraphQLModule.forRoot<YogaGatewayDriverConfig>({
driver: YogaGatewayDriver,
gateway: {
services: [{ name: 'subgraph', url: 'http://subgraph/graphql' }]
}
})
]
})
export class AppModule {}
Further development
Yoga offers just a federation and gateway driver; meaning, everything else works as showcased in NestJS federation documentation.