Amplify GraphQL API を設定する
Amplify の GraphQL API カテゴリーを使用すると、セキュアでリアルタイムの GraphQL API を数分でデータベースをバックに構築できます。GraphQL スキーマでデータモデルを定義すると、Amplify は AWS AppSync で稼働する GraphQL API をデプロイし、Amazon DynamoDB で稼働するデータベースに接続します。認可ルールで API をセキュアにし、AWS Lambda でカスタムユースケースにスケールできます。
最初の API とデータベーステーブルを作成する
Amplify の GraphQL API カテゴリーは、Amplify CLI または AWS Cloud Development Kit (CDK) を使用してデプロイできます。Amplify Command Line Interface (CLI) は、フロントエンドアプリケーション用の AWS クラウドサービスを作成、統合、管理するための統合ツールチェーンです。AWS CDK は、オープンソースの Infrastructure-as-Code フレームワークで、なじみのあるプログラミング言語を使用して AWS クラウドアプリケーションリソースをモデル化およびプロビジョニングするために使用されます。
前提条件:
まず、次のコマンドを実行して GraphQL API を設定します:
amplify add api? Select from one of the below mentioned services:> GraphQL? Here is the GraphQL API that we will create. Select a setting to edit or continue> Continue? Choose a schema template:> Single object with fields (e.g., "Todo" with ID, name, description)...Edit your schema at <...>/schema.graphql or place .graphql files in a directory at <...>/schema✔ Do you want to edit the schema now? (Y/n)> yesEdit the file in your editor: <...>/schema.graphql✅ Successfully added resource new locallyデフォルト値を受け入れると、コードエディターに次のコードを含む Todo アプリの GraphQL スキーマが表示されます:
# This "input" configures a global authorization rule to enable public access to# all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/react/build-a-backend/graphqlapi/customize-authorization-rules/input AMPLIFY { globalAuthRule: AuthRule = { allow: public }} # FOR TESTING ONLY!type Todo @model { id: ID! name: String! description: String}前提条件:
CDK アプリのプロジェクトルートディレクトリで、GraphQL API コンストラクトの依存関係をインストールします:
npm install @aws-amplify/graphql-api-construct次に、スタックに移動し、Amplify GraphQL CDK コンストラクトをインポートして、新しい Amplify GraphQL API を作成します:
import { AmplifyGraphqlApi, AmplifyGraphqlDefinition} from '@aws-amplify/graphql-api-construct';
export class BackendStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props);
const amplifyApi = new AmplifyGraphqlApi(this, 'AmplifyCdkGraphQlApi', { definition: AmplifyGraphqlDefinition.fromFiles( path.join(__dirname, 'schema.graphql') ), authorizationModes: { defaultAuthorizationMode: 'API_KEY', apiKeyConfig: { expires: cdk.Duration.days(30) } } }); }}次に、データモデルを説明する GraphQL スキーマを作成します。スタックのフォルダに schema.graphql という新しいファイルを作成し、次のコードを入力します:
type Todo @model @auth(rules: [{ allow: public }]) { id: ID! name: String! description: String}@auth(rules: [{ allow: public }]) は、API キーで認証されたすべてのユーザーが "Todo" レコードを作成、読み取り、更新、および削除できることを指定しています。
@model ディレクティブを持つすべての GraphQL type は、自動的に新しい DynamoDB データベーステーブルでバックアップされ、GraphQL クエリとミューテーションを作成、読み取り、更新、削除するために生成されます。
では、変更をクラウドにデプロイしましょう:
ターミナルで次のコマンドを実行します:
amplify push -yターミナルで次のコマンドを実行します:
cdk deploy完了です! API とデータベーステーブルがセットアップされました。
アプリコードを設定する
アプリケーションを API に接続するには、Amplify ライブラリと自動生成された GraphQL クライアントヘルパーコードを使用することをお勧めします。これにより、ユースケースが進化するにつれてさらに最適化するために調整できる理にかなったデフォルトですぐに始めることができます。
Amplify ライブラリをインストールする
Amplify ライブラリを使用して、アプリを GraphQL エンドポイントに接続します。
npm を使用してアプリに Amplify ライブラリを追加します:
npm install aws-amplifyアプリコードで Amplify ライブラリを設定する
amplify push デプロイメントワークフローの一部として、新しい amplifyconfiguration.json ファイルが生成されます。amplifyconfiguration.json は Amplify ライブラリのクライアント設定ファイルで、API エンドポイント URL、認証情報、およびリージョンが含まれています。
アプリのエントリーポイント (React の App.js など) で、設定ファイルをインポートしてロードします:
import { Amplify } from 'aws-amplify';import { generateClient } from 'aws-amplify/api';import config from './amplifyconfiguration.json';Amplify.configure(config);
const client = generateClient();cdk deploy デプロイメントワークフローの一部として、CLI がターミナルに API エンドポイント、認証情報、およびリージョンを出力します。次のようになります:
✨ Deployment time: 62.86s
Outputs:BackendStack.amplifyApiModelSchemaS3Uri = s3://.../model-schema.graphqlBackendStack.awsAppsyncApiEndpoint = https://wy5mtp7jzfctxc5w5pzkcoktbi.appsync-api.us-east-1.amazonaws.com/graphqlBackendStack.awsAppsyncApiId = YOUR_API_ID_VALUE_HEREBackendStack.awsAppsyncApiKey = da2-XXXXBackendStack.awsAppsyncAuthenticationType = API_KEYBackendStack.awsAppsyncRegion = us-east-1この情報を使用して、アプリケーションコードで Amplify ライブラリを設定します。アプリのエントリーポイント (React の App.js など) で、出力された値を使用して Amplify ライブラリをインポートして設定します:
import { Amplify } from 'aws-amplify';
Amplify.configure({ API: { GraphQL: { endpoint: 'https://abcxyz.appsync-api.us-east-1.amazonaws.com/graphql', region: 'us-east-1', defaultAuthMode: 'apiKey', apiKey: 'da2-xxxxxxxxxxxxxxxxxxxxxxxxxx' } }});GraphQL クライアントヘルパーコードを生成する
amplify push デプロイメントワークフローの一部として、GraphQL クエリ、ミューテーション、およびサブスクリプション用のクライアントヘルパーコードを含む新しい src/graphql/ フォルダが生成されます。
これらのファイルを次のステップで使用して、数行のコードだけで作成、読み取り (リスト、取得)、更新、および削除 API リクエストを実行できます。
API をデプロイした後、オプションで GraphQL クライアントヘルパーコードを生成できます。このコードを次のステップで使用して、数行のコードだけで作成、読み取り (リスト、取得)、更新、および削除 API リクエストを実行できます。
このパートでは、まずアプリコードのリポジトリに以下の npx コマンドをアプリコードのルートディレクトリからターミナルで実行してコード生成を追加する必要があります:
npx @aws-amplify/cli codegen add --apiId <YOUR_API_ID> --region <YOUR_API_REGION>その後、API スキーマが変わるたびに次のコマンドを使用して GraphQL クライアントコードを生成できます:
npx @aws-amplify/cli codegenこの時点で、GraphQL クエリ、ミューテーション、およびサブスクリプション用のクライアントヘルパーコードを含む新しい src/graphql/ フォルダが表示されます。
最初のレコードを追加する
次に、GraphQL API からクエリを試します。以下の手順に従って、React アプリからクエリを実行します:
import { generateClient } from 'aws-amplify/api';import { createTodo, updateTodo, deleteTodo } from './graphql/mutations';import { listTodos } from './graphql/queries';その後、GraphQL API コールを使用して最初の todo アイテムを作成します:
const client = generateClient();
const result = await client.graphql({ query: createTodo, variables: { input: { name: 'My first todo!' } }});テーブルからレコードをクエリする
GraphQL クエリステートメントを使用して、アプリ内のすべての todo をリストアップします:
const result = await client.graphql({ query: listTodos });console.log(result);上で作成したレコード My first todo! が表示されます。
レコードを更新する
レコードを更新するには、GraphQL 更新ミューテーションを使用します:
const result = await client.graphql({ query: updateTodo, variables: { input: { id: '<...>', name: 'My first updated todo!' } }});console.log(result);結果には更新された値が含まれます: My first updated todo!。
レコードを削除する
データベースをクリーンアップしましょう! 削除ミューテーションを使用して todo を削除します:
const result = await client.graphql({ query: deleteTodo, variables: { input: { id: '<...>' } }});console.log(result);結果の出力は、レコードが正常に削除されたことを示しています。
GraphQL スキーマを使用してデータモデルを反復する
API を更新したい場合は、プロジェクトの amplify/backend/api/<api-name>/schema.graphql ファイルを開き (amplify/backend/api/<api-name>/build フォルダのものではなく)、お気に入りのコードエディターで編集します。amplify/backend/api/<api-name>/schema.graphql ファイルをコンパイルするには、次を実行します:
amplify api gql-compileコンパイルされたスキーマ出力を backend/api/~apiname~/build/schema.graphql で表示できます。
その後、次を使用して更新された変更をプッシュできます:
amplify pushAPI を更新したい場合は、CDK プロジェクトで schema.graphql ファイルを開き、お気に入りのコードエディターで編集します。その後、次を使用して更新された変更をプッシュできます:
cdk deployデプロイメント後、認証設定がまだ正しいことを確認し、ターミナルで次のコマンドを再実行して GraphQL クライアントヘルパーコードを再生成します:
npx @aws-amplify/cli codegen次のスキーマ更新は、基になる DynamoDB テーブルの置換が必要です:
- モデルの削除または名前変更
- モデルのプライマリキーの変更
- モデルのローカルセカンダリインデックスの変更 (secondaryKeyAsGSI が無効になっているプロジェクトのみ適用)
これらの更新の 1 つ以上を含むスキーマ変更をプッシュしようとすると、置換が必要なテーブルのすべてのデータが失われることを説明するエラーメッセージが表示されます。デプロイメントを続行することを確認するには、次を実行します:
amplify push --allow-destructive-graphql-schema-updatesGraphQL API を再構築する
開発中は、テストデータが不正な状態になったり、スキーマに多くの変更を一度に加えたい場合があります。このような場合、スキーマをバックアップするテーブルをすべて「再構築」することができます。これを行うには、ターミナルで以下を実行します:
amplify rebuild apicdk destroycdk deployこれにより、スキーマ内のモデルをバックアップするテーブルがすべて再作成されます。すべてのテーブルのすべてのデータが削除されます。
次のステップ
成功です! GraphQL API をデータベーステーブルでバックアップして作成し、アプリからクエリとミューテーションを実行する方法を学習しました。
Amplify の GraphQL API 機能でさらに多くのことを学習できます。詳細については以下をご覧ください: