NestJS・React環境でGraphQLを学習してみた①
まずGraphQLとNestJSについて基本的なことをまとめてみた。
GraphQL
GraphQL 特徴
- Facebookによって開発
- スキーマ
- クエリ操作
- Query → データの問い合わせ
- Mutation → データの書き換え
- Subscription → データの購読(?)
- APIエンドポイントが1つ(/graphql)
- リソースの取得に柔軟性がある → オーバーフェッチを防げる・アンダーフェッチを防げる
- 型情報がある
- キャッシュが複雑になりやすい(?)
スキーマについて
NestJS
NestJS 特徴
- Node.js上で動作するバックエンドのフレームワーク
- TypeScriptで作成されている
- Expressをコアにして作成されている(上位互換、機能やライブラリ引き継がれている)
- 拡張性が高い
- DB(RDB, NoSQL)
- セキュリティ(?)
- GraphQL可
- WdbSocket(?)
- NestJS CLIを使える
- Module, Controller(Resolver), Serviceの3つがコア要素
Moduleについて
- ルートモジュールとFeatureモジュール
- ResolverとServiceをまとめて、NestJSに登録
- 外部モジュールのインポート、内部モジュールのエクスポート
- 定義
- classに@Module()デコレーターをつける
- プロパティ: imports, proviers(Resolver, Service), exports
Resolverについて
- APIの処理を定義(Query, Mutation)
- GraphQLスキーマに定義されたデータを返却
- REST APIのControllerみたいな感じ
- 定義
- classに@Resolver()デコレーターをつける
- 処理の内容をメソッドとして定義
Serviceについて
Dependency Injection
- 依存関係のあるオブジェクトを外部から渡す
- 使用例
- 本番用とテスト用でインスタンスを切り替え
- ログ出力先の切り替え
- DIコンテナ
- 使用法
- Moduleのprovidersに依存される側のクラスを登録
- 依存する側のconstructorで注入される側のクラスを引数として受け取る
- 使用法