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.