スキーマと GraphQL 操作
Apollo のコード生成プラグインは、スキーマと GraphQL 操作ファイルを読み込んで、型安全な Kotlin コードを生成します。このページでは、AppSync スキーマを取得し、必要な GraphQL 操作を定義する方法について説明します。
AWS AppSync GraphQL スキーマを取得する
AWS AppSync Web コンソールを使用する
- AWS AppSync コンソールで API に移動します
- 左側で Schema を選択します
- Export Schema ドロップダウンを選択して
schema.jsonファイルをダウンロードします
- このファイルをプロジェクト内の
app/src/main/graphql/schema.jsonに配置します (または Apollo Gradle プラグインで設定された場所 — Apollo documentation を参照)
AWS CLI を使用する
- AWS CLI で以下のコマンドを実行してスキーマをダウンロードします:
aws appsync get-introspection-schema \ --api-id <api-id> \ --format JSON \ --region <region> \ schema.jsonAPI ID は AWS AppSync コンソールで確認するか、以下のコマンドで実行して確認できます:
aws appsync list-graphql-apis --region <region>- ダウンロードした
schema.jsonをプロジェクト内のapp/src/main/graphql/schema.jsonに配置します。
GraphQL 操作 (クエリ、ミューテーション、サブスクリプション) を準備する
Amplify CLI からのインポート
Amplify CLI は、Amplify API / AppSync プロジェクト用のクエリ (queries.graphql)、ミューテーション (mutations.graphql)、サブスクリプション (subscriptions.graphql) を自動生成できます。クライアントコード生成ガイドに従ってこれらのファイルを生成します。生成されたら、Apollo documentationで指示されたようにプロジェクトに追加します。
独自に作成する
GraphQL 操作を app/src/main/graphql/ に配置します。これは Apollo Gradle プラグインがこれらのファイルを探すデフォルトの場所です。独自の操作を作成する場合、AWS AppSync Query Editorはテストに役立ちます。
フラグメント
すべての操作で再利用するフラグメントを作成します:
# fragments.graphql
fragment PostDetails on Post { id updatedAt createdAt title content status rating _version _deleted _lastChangedAt}ミューテーション
投稿を変更または作成するミューテーションを作成します。PostDetails フラグメントを使用すると、各ミューテーションで同じデータ型が返されます:
# mutations.graphql
# Createmutation CreatePost($input: CreatePostInput!) { createPost(input: $input) { ... PostDetails }}
# Updatemutation UpdatePost($input: UpdatePostInput!) { updatePost(input: $input) { ... PostDetails }}
# Deletemutation DeletePost($input: DeletePostInput!) { deletePost(input: $input) { id }}クエリ
AWS AppSync から PostDetails を取得するクエリを作成します:
# queries.graphql
# Single Itemquery GetPost($id: ID!) { getPost(id: $id) { ... PostDetails }}
# List Itemsquery GetPosts($nextToken: String) { listPosts(nextToken: $nextToken) { items { ... PostDetails } nextToken }}サブスクリプション
投稿が作成、更新、または削除されたときにアプリに通知するサブスクリプションを作成します:
# subscriptions.graphql
# Createsubscription onCreateSubscription { onCreatePost { ... PostDetails }}
# Updatesubscription onUpdateSubscription { onUpdatePost { ... PostDetails }}
# Deletesubscription onDeleteSubscription { onDeletePost { id }}