AWS Amplify Framework(4)APIカテゴリ

APIカテゴリ

APIカテゴリは、 REST および、AWS Appsync をはじめとする GraphQL エンドポイントへのHTTPリクエストを行うための機能を、JavascriptライブラリおよびSDKを通じて提供する。AppSyncとの統合を行う場合は、

  1. クライアント側でAPIエンドポイントと認証情報を設定
  2. APIスキーマからJavascriptコードを生成
  3. クエリやミューテーションを実行するアプリコードを生成

という手順で行う。また、 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 エラーが発生する。