AppSyncでは、GraphQL APIとEvent APIの2種類のAPIを作成・実行することができます。
今回は、AppSyncのGraphQL APIの方について、大まかな仕組みを説明します。
この記事で書くことと書かないこと
この記事で書くこと
・GraphQL APIでデータを読み込むときの、ざっくりした仕組み
この記事で書かないこと
・詳細なサービス設定や使用言語の書き方
・GraphQL APIでデータを読み込むとき以外の仕組みについて
GraphQL APIが実行されるまでの仕組み
たとえば、お料理のレシピを検索したり、データベース(以下、DB)に登録できるアプリケーションがあるとします。
まずは、データのIDを指定して特定のデータを検索する getRecipe
処理を例にとって仕組みを説明します。
全体の構造
要素の説明
Schema(スキーマ)
・APIの処理で使うデータ構造の倉庫。
・リゾルバは、このスキーマ内で定義された項目名と一致する項目名をDBから探してデータを取得する。
・AWSマネージメントコンソール > AWS AppSync > 作成したAPI > Schema から設定できるリソースのこと。
type Query
・スキーマ内の要素の1つで、読み取り処理(のデータ構造)を宣言する場所。
※ちなみに、GraphQL の type
は複数種類あり、
・Query:データの読み取り
・Mutation:データの作成・更新・削除
・Subscription:リアルタイム購読
を意味します。
今回の例は「Query(読み取り)」に該当します。
API(GraphQL API)
・AppSyncが提供するAPIリソースのこと。
・Create API から作成できる。
Resolver(リゾルバ)
・API内で特定の処理を実行するためのリソース。
・どのAPI(の処理)を、どのデータソース(DBとか)からデータを引っ張ってくるかを設定する。
・作成したAPI > Schema > Resolvers から作成できる。
DB
データを取得するデータベース
仕組み
GraphQLでは、スキーマがAPIの設計図、リゾルバが実際の処理ロジック、データソースが実データの置き場所を担っています。
つまり、AppSyncはこの3つを紐づけることで「GraphQLクエリ → 実データ取得」までの流れを構築しています。
まず、重要な登場人物がリゾルバです。
スキーマで定義したとおりに、データソースからデータを取得する処理を実際に行うのがリゾルバ。というイメージです。
なので、実装時にはリゾルバとスキーマ、データソースをそれぞれ紐づけてあげる必要があります。
1. スキーマとリゾルバを紐づける
スキーマ内のどのデータ構造を使ってデータソースにアクセスするかを、リゾルバのフィールドに指定します。
以下の図のように、Shcema > type Query
内に記載のフィールド名と一致する必要があります。
以下の図の例では、getRecipe (IDを指定して該当のデータを取得する)を実行して、DBからデータをとってくる設定をしています。
実際に画面上から設定するときは、Schema > Resolvers 内のフィールド横の「Attach」ボタンを押下する操作になります。
2. リゾルバとデータソースを紐づける
同時に、どのデータソース(今回の場合はDB)へアクセスするかを、リゾルバのデータソースに指定します。
以下の図のように、データソース名がと一致する必要があります。
実際に画面上から設定するときは、Schema > Resolvers 内のフィールド横の「Attach」ボタン > Attach resolver からデータソースを設定します。
3. 実行結果
作成したAPI > Queries から、IDを指定して getRecipe
を実行します。
すると、指定したDBからデータを取得できます。
おわりに
今回はDBからデータを検索する例で仕組みを説明しましたが、
・DB以外にも、AWS LambdaやAmazon EventBridgeとも連携して別の処理を呼び出すこともできます
・スキーマ内の type Query
ではなく type Mutation
をリゾルバのフィールドに指定することで、書き込み処理もできます