Amplifyのチュートリアルをやってみて、個人的に重要だと思ったのがAppSyncだったので、少し深堀してみました。
AppSyncとは
AppSyncは、GraphQL APIの開発を容易にする、AWSの完全マネージド型サービス。
平たくいうと、サーバーレスなGraphQLサービス。
このサービスは、DynamoDBなどのデータソースとの接続に必要な、面倒な作業を自動的に処理してくれます。要はDataBaseも自動で作ってくれる。
*AWSでAPIを作成できるサービスにAPI Gatewayがありますが、それはREST API形式
AppSyncの仕組み
CROSS POWERから引用
↑の図でも分かる通り、AppSyncのキーはこの4つかと思います。
1)クエリ
2)スキーマ
3)リゾルバー
4)リソース
1) クエリ
クエリは3種類ある。
– query … データ取得
– mutation … データ追加/更新/削除
– subscription … イベントの購読
スキーマで定義した関数を呼び出す箇所です。
アプリケーション内で定義して、ユーザーがAPI通信を発火、データを取得します。
2) スキーマ
スキーマは、GraphQL APIの型システム。
アプリケーション内で扱うデータがどのようなフィールドを持ち、そのフィールドがどのような型を持っているのか定義する。
type Todo {
id: ID!
name: String!
description: String
createdAt: AWSDateTime!
updatedAt: AWSDateTime!
}
このスキーマを設計(定義)することが、AppSync APIを作る最初のステップになります。
3) リゾルバー
各パラメータを受け取って、リソースに対してどのような処理をするのか(CreateやPutなど)、処理内容を記載したAppSyncのサーバーサイドの機能(関数)群。
つまりは、GraphQLのスキーマで受け付けたリクエストに対し実際にデータ操作を行う部分。
下記のようにリソースの1行動に対して1つのリゾルバが必要になります。
DynamoDBのAテーブルに対して、データを更新するリゾルバー
DynamoDBのBテーブルのデータを、参照するリゾルバー
リゾルバーのアタッチとは:
スキーマにはリゾルバーを「アタッチ」する必要がある。
要はスキーマ(データ)とリゾルバー(処理)をくっつける事かと思います。
リゾルバーに↑で作成したHogeが追加されるので「アタッチ」をクリック
リゾルバーは、2つのマッピングテンプレートで構成される。
・リクエストマッピングテンプレート
・レスポンスマッピングテンプレート
Apache Velocity Template Language(VTL)というプログラミング言語で記述します。
AWS公式のVTL解説
アタッチすると、そのリゾルバーは、そのフィールドがクエリまたはミューテーションにリストされるたびに呼び出されます。
パイプラインリゾルバーとは:
パイプラインリゾルバーとは、オペレーション(関数)を順番に実行できるAppSyncの機能。
4) リソース
APIのアクションの対象。
リソースに選択できるものは幅広く、DynamoDBなどDBのレコードを取得/更新したりできますし、HTTPリクエスト(外部のAPI)なども選択できます。
*AppSyncがDaynamoDBのテーブルを自動で作ってくれます。
まとめ
まだ完全理解とは言い難いですが、登場人物たちがどういう仕組みで関連してるかは多少掴めました。次は実際にスキーマを設計したり、Query, Mutationできる様にガンガン触ってカスタマイズしてみようと思います。