APIカテゴリ
APIカテゴリは、 REST および、AWS Appsync
をはじめとする GraphQL エンドポイントへのHTTPリクエストを行うための機能を、JavascriptライブラリおよびSDKを通じて提供する。AppSyncとの統合を行う場合は、
- クライアント側でAPIエンドポイントと認証情報を設定
- APIスキーマからJavascriptコードを生成
- クエリやミューテーションを実行するアプリコードを生成
という手順で行う。また、 Amplify CLI
を用いることでバックエンドとなる AWS Appsync
の設定やクライアント側の設定ファイルのダウンロードなどを簡単に行うことができる。
セットアップ
Amplifyプロジェクトのルートディレクトリでamplify add apiコマンドを実行することで、ウィザードに従って自動セットアップを行うことができる。
amplify update api
? Please select from one of the below mentioned services: GraphQL
? Choose the default authorization type for the API Amazon Cognito User Pool
Use a Cognito user pool configured as a part of this project.
? Do you want to configure advanced settings for the GraphQL API No, I am done.
スキーマ
/amplify/backend/api/API_NAME/schema.graphql にあるスキーマファイル(schema.graphql)を編集することで、GraphQLのスキーマを更新することができる。Amplifyプロジェクトをデプロイすると、これらのスキーマがバックエンド側に反映される。
GraphQLトランスフォーマ
Amplifyには、拡張定義された GraphQLディレクティブ が用意されており、これらのディレクティブを用いることで、 データ構造や参照権限などを簡単に記述 することができる。
type User @model @key(fields: ["id", "group"]) {
id: ID!
group: String!
attr: Attr
}
type Attr {
gender: Int
age: Int
areacode: Int
postcode: Int
}
ディレクティブ | 内容 |
---|---|
@model | @model単位でDynamoDBテーブルが作成される |
@key(fields: [KEY, KEY]) | DynamoDBに格納する際のプライマリキーとソートキーを定義 |
スキーマの更新
フロントエンドのコンテンツは、GraphQLデータを操作するためのTypeScriptクラスを経由して、バックエンドと通信を行う。amplify codegen
を実行することで、 /arc/graphql/ 以下にGraphQLを操作するためのGraphQLステートメントとタイプを自動生成する。
なお、amplify codegen
コマンドは、 team-provider-info.json
に格納されている情報を基にAWS上の設定内容を確認し、上記動作を行う。したがって、 team-provider-info.json
に正しいリソース情報が格納されていない場合には、 UnhandledPromiseRejectionWarning: AccessDenied: Access Denied エラーが発生する。