NestJSでGraphQLを試してみました
こんにちは中川です。
普段はREST APIばかりさわっているため、ちょっと他のAPIもと思うこの頃、
今回は NestJSでGraphQLを試してみました。
参考
やってみる
まずは、nestコマンドでプロジェクトを作成します。
npm i -g @nestjs/cli
nest new project
cd project
つぎに、GraphQL関連のパッケージをインストールします。
npm i --save @nestjs/graphql apollo-server-express graphql-tools graphql
サンプルで使うcatsモジュールもnestコマンドでさくっと作ってしまいます。
nest generate module cats
nest generate service cats
nest generate resolver cats
続いて、CatsのGraphQL定義を作成します。
今回は軽く試してみるということで、公式チュートリアルからクエリ系のみに絞って定義します。
type Query {
getCats: [Cat]
cat(id: ID!): Cat
}
type Cat {
id: Int
name: String
age: Int
}
さて、ここからはコードを編集していきます。
まずはappモジュールにGraphQLModuleを追加importして、
以下の各オプションを指定します。
- typePaths: ディレクトリ内の*.graphqlファイルを読み込むようにしています
- definitions: tsファイルの生成先を指定してしています
- playground: ブラウザからGraphQLの実行を確認できる環境を有効にしています
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql'
import { join } from 'path';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [
GraphQLModule.forRoot({
typePaths: ['./**/*.graphql'],
definitions: {
path: join(process.cwd(), 'src/graphql.schema.ts')
},
playground: true
}),
CatsModule
]
})
export class AppModule {}
これで、アプリを実行すると、graphqlファイルから自動でTypeScriptの型定義ファイルが、
src/graphql.schema.ts に生成されます。
/** ------------------------------------------------------
* THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
* -------------------------------------------------------
*/
/* tslint:disable */
export interface Cat {
id?: number;
name?: string;
age?: number;
weight?: number;
}
export interface IQuery {
getCats(): Cat[] | Promise<Cat[]>;
cat(id: string): Cat | Promise<Cat>;
}
CatsResolver で利用するために、 CatsService を作成します。
import { Injectable } from