AWS AppSyncとは
- マネージド型のGraphQLサービス
- リアルタイム機能、オフライン機能が簡単に実装可能
- NoSQLデータストア、RDB、HTTP API、AWS Lambdaを使用したアプリケーションの構築
特徴
- GraphQLを使用して情報を取得できる。
- Amazon Cognitoと連携することで認可制御が容易に実現できる。
- パイプラインリゾルバーを利用することで、複数のオペレーションを組み合わせて実行できる。
- マッピングテンプレートに処理を記載することで、リソースへアクセスする前後に処理を挟むことができる。
リゾルバー
AWS AppSyncは、クライアントからGraphQLリクエストを受け取ると、リゾルバーと呼ばれる関数にGraphQLリクエストをマッピングする。
ここでいう関数とは、
- リクエストマッピングテンプレート
- レスポンスマッピングテンプレート
- データソース名
- バージョン
で構成されており、 データソースへの1つのオペレーションを定義している。
開発者はそれぞれリクエスト・レスポンスに対する処理をVTL(Apache Velocity Template Language)と呼ばれるフォーマットでマッピングテンプレートに自由に記述できる。
リクエストマッピングテンプレート
文字数チェックなど、リクエストデータのスキーマ定義より細かいバリデーションを行うことができる。
DBへ新規登録する際に、フロントエンドからきたリクエストデータに固定値(バージョン)を加えることができる。
レスポンスマッピングテンプレート
ユーザに応じて返却する情報を絞ることができる。
複数リソースから得た結果を1つのオブジェクトに整形することができる。
ユースケース
リアルタイム
・最新情報をウォッチするダッシュボード
・ほぼリアルタイムでデータを更新
コラボレーション
・複数ユーザーが共同編集を行うアプリケーション
・ドキュメント、画像、テキストメッセージなど、さまざまなコンテンツタイプを自動更新
ソーシャルメディア
・ソーシャルメディアやチャット
・複数ユーザー間でのメッセージング管理をサポート
・オフライン時でもアプリケーションを操作でき、再接続時に自動Sync
GraphQLとは
- Facebookが開発
- アプリケーションがサーバーからデータを取得できるように開発されたデータ言語
- Query(取得)、 Mutation(変更)、Subscription(購読)
- GraphQL クエリでは、クライアントがレスポンスの形式を指定する。 これにより、クライアントは必要なデータのみを必要な形式で照会することが可能。
GraphQLの実際の動き
Query
サーバー側で定義されたスキーマに沿って、クライアント側で指定したデータのみを取得することができる。
※REST APIでは、返却値が決まっているため不必要なデータも取得される場合がある。
Mutation
Subscription
GraphQLとREST
GraphQLとREST APIのどちらを採用するかで開発フローに違いが出てくる。
GraphQLの開発フロー
- 画面仕様(デザイン)を作成
- 画面仕様からデータソース(DynamoDB)を作成
- データアクセスの GraphQL 及びマッピングテンプレートを作成
- テスト
RestAPIの開発フロー
- 機能仕様書からデータベース設計
- データベースへアクセスするための API設計
- APIのプログラミング
- テスト