データソースへの GraphQL API のマッピング

ソースの選択

モジュールソースは、GraphQL API の実装によって異なります。APIkit for GraphQL には 2 種類のソースがあります。

  • データフェッチャー

  • データローダー

どちらを選択するかは実装のニーズによって決まります。

GraphQL はトランスポートレイヤーに依存しないため、データの処理に使用するプロトコルに応じてメインコネクタリスナーを選択できます。

リスナーの追加

メインアプリケーションフローをトリガーするインバウンドエンドポイントは、使用するクライアントサーバープロトコルに固有のコネクタリスナーです。GraphQL は HTTP で通信を行うことが多いため、APIkit スキャフォルダーはデフォルトで HTTP リスナーを生成しますが、別のソースを選択して別のプロトコルでデータを転送することもできます。

データフェッチャーの追加

データフェッチャーは、Mule フローのソースです。クエリ結果の単一オブジェクト項目のデータを供給します。データフェッチャーは、次のキーパートの組み合わせによって識別されます。

  • オブジェクト種別名​: スキーマのいずれかのオブジェクト種別

  • 項目名​: そのオブジェクト種別に含まれるいずれかの項目の名前

項目の型が何であっても、スキーマで定義されているすべてのオブジェクト項目に対してデータフェッチャーを追加できます。Mule アプリケーションで項目に対してデータフェッチャーが設定されていない場合は、親型から項目値が供給されます。そうでない場合は、クライアントが要求したデータは提供されず、​null​ となります。

データローダーの追加

データフェッチャーと同じ用に、データローダーも Mule フローのソースです。データローダーは、オブジェクト種別に関連したバッチ要求を処理します。データフェッチャーとは異なり、一意のキー識別子によって識別されます。

  • オブジェクト種別名​: スキーマのいずれかのオブジェクト種別

データローダーは、GraphQL API の実装時に N+1 件の要求の最適化の問題を解決します。この問題は、最初のクエリの実行時に取得できたはずのデータをフェッチするために N 件の追加クエリステートメントが実行された場合に発生します。

モジュールは、実行時にデータフェッチャーを先に探します。データフェッチャーが指定されていない場合は、データローダーを探します。同じオブジェクト種別に対してデータフェッチャーとデータローダーの両方が指定されている場合、モジュールは先にデータフェッチャーを使用して項目を解決します。このプロセスでは、データフェッチャーが N+1 回続けて呼び出されるため、API のパフォーマンスに影響します。

操作の選択

モジュールには、GraphQL API 実装の正常な設計と実行に不可欠な操作が用意されています。

  • Route (ルート)

  • Serialize (シリアル化)

  • Serialize Batch (バッチシリアル化)

クエリのルーティング

Route (ルート)​ 操作は、GraphQL サービスのエントリポイントです。この操作は、クエリを解析、検証してから、グラフをトラバースし、クエリ結果を得るために必要なデータフェッチャーとデータローダーをコールすることでクエリを実行します。

データフェッチャーのシリアル化

Serialize (シリアル化)​ 操作は、データフェッチャーソースが指定されているソースの最後に実行されます。この操作は、データフェッチャーの識別と同じキーペア (オブジェクト種別名と項目名) によって識別されます。

データローダーのバッチシリアル化

Serialize Batch (バッチシリアル化)​ 操作は、データローダーソースが指定されているソースの最後に実行されます。この操作は、データローダーの識別と同じキー (オブジェクト種別名) によって識別されます。

Serialize (シリアル化)​ 操作と ​Serialize Batch (バッチシリアル化)​ 操作は、設計時に DataSense を活用します。