The Guild LogoThe Guild Monogram
Docs

Yoga

Fully-featured, simple to set up, performant and extendable GraphQL JavaScript server

Get Started

Integration with Nest#

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 Federation GraphQL APIs (Gateway and Services).

 

Standalone GraphQL API#

Installation#

yarn add @nestjs/graphql yarn add @graphql-yoga/nestjs

For the setup of a new Nest project, please make sure to read the Nest GraphQL documentation.

 

Schema-first approach#

With the following Nest project structure:

- src/ - cats/ - cats.graphql - cats.resolver.ts - cats.module.ts - app.module.ts - main.ts

and the following .graphql schema definition (and its associated resolvers):

type Query { cats: [Cat] cat(id: ID!): Cat } type Mutation { createCat(createCatInput: CreateCatInput): Cat } type Subscription { catCreated: Cat } type Owner { id: Int! name: String! age: Int cats: [Cat!] } type Cat { id: Int name: String age: Int owner: Owner } """ Test comment """ input CreateCatInput { name: String age: Int }

Our Yoga Nest GraphQL Module (app.module.ts) will defined as follows:

import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs' import { Module } from '@nestjs/common' import { GraphQLModule } from '@nestjs/graphql' import { CatsModule } from './cats/cats.module' @Module({ imports: [ CatsModule, GraphQLModule.forRoot<YogaDriverConfig>({ driver: YogaDriver, typePaths: ['./**/*.graphql'], installSubscriptionHandlers: true, }), ], }) export class AppModule {}

More information on the dedicated example.

 

Code-first approach#

The code-first approach generates the GraphQL Schema based on resolvers and models.

With the following example Recipe model:

import { Directive, Field, ID, ObjectType } from '@nestjs/graphql' @ObjectType({ description: 'recipe ' }) export class Recipe { @Field((type) => ID) id: string @Directive('@upper') title: string @Field({ nullable: true }) description?: string @Field() creationDate: Date @Field((type) => [String]) ingredients: string[] }

and the following resolvers:

@Resolver((of) => Recipe) export class RecipesResolver { constructor(private readonly recipesService: RecipesService) {} // ... @Query((returns) => [Recipe]) recipes(@Args() recipesArgs: RecipesArgs): Promise<Recipe[]> { return this.recipesService.findAll(recipesArgs) } // ... }

Our Yoga Nest GraphQL Module (app.module.ts) will defined as follows:

import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs' import { Module } from '@nestjs/common' import { GraphQLModule } from '@nestjs/graphql' import { RecipesModule } from './recipes/recipes.module' @Module({ imports: [ RecipesModule, GraphQLModule.forRoot<YogaDriverConfig>({ driver: YogaDriver, autoSchemaFile: 'schema.gql', }), ], }) export class AppModule {}

More information on the dedicated example.

 


 

Apollo Federation#

Yoga Nest GraphQL integration supports building Apollo Federation Gateway and Services through the YogaGatewayDriver and YogaFederationDriver drivers.

A complete example is available in the repository.

⚠️ YogaGatewayDriver and YogaFederationDriver drivers should be used with graphql@15.