パイプラインリゾルバー (JavaScript) - AWS AppSync

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

パイプラインリゾルバー (JavaScript)

AWS AppSync は GraphQL フィールドでリゾルバ―を実行します。場合によっては、アプリケーションは 1 つの GraphQL フィールドを解決するために複数のオペレーションを実行する必要があります。パイプラインリゾルバーを使用すると、開発者はオペレーション (関数と呼ばれる) を構成して順番に実行できます。パイプラインリゾルバーは、たとえば、フィールドのデータを取得する前に承認チェックを実行する必要があるアプリケーションに便利です。

JavaScript パイプラインリゾルバーのアーキテクチャの詳細については、「JavaScript リゾルバーの概要」をご覧ください。

パイプラインリゾルバーを作成する

AWS AppSync コンソールで、[スキーマ] ページに移動します。

以下のスキーマを保存します。

schema { query: Query mutation: Mutation } type Mutation { signUp(input: Signup): User } type Query { getUser(id: ID!): User } input Signup { username: String! email: String! } type User { id: ID! username: String email: AWSEmail }

パイプラインリゾルバーをミューテーションタイプのSignUpフィールドに書き込みます。右側の [ミューテーション] タイプに入力し、[signUp ミューテーション] フィールドの横の [アタッチ] を選択します。リゾルバーを pipeline resolver および APPSYNC_JS ランタイムに設定し、リゾルバーを作成します。

パイプラインリゾルバーは、最初に E メールアドレスの入力を検証してからシステムにユーザーを保存することで、ユーザーをサインアップします。E メールの検証を validateEmail 関数内にカプセル化し、ユーザーの保存を saveUser 関数内にカプセル化します。validateEmail 関数が最初に実行され、E メールが有効であれば、saveUser 関数が実行されます。

実行フローは以下のようになります。

  1. Mutation.SignUp リゾルバーリクエストハンドラー

  2. validateEmail 関数

  3. saveUser 関数

  4. Mutation.SignUp リゾルバーレスポンスハンドラー

API の他のリゾルバーで validateEmail 関数を再利用することが多いため、GraphQL フィールド間でアクセス先の ctx.args が変わるのを避けるとします。この場合、代わりに ctx.stash を使用して、signUp(input: Signup) 入力フィールド引数からの email 属性を保存できます。

リクエスト関数とレスポンス関数を置き換えてリゾルバーコードを更新してください。

export function request(ctx) { ctx.stash.email = ctx.args.input.email return {}; } export function response(ctx) { return ctx.prev.result; }

[作成] または [保存] を選択してリゾルバーを更新します。

関数の作成

パイプラインリゾルバーページの [関数] セクションで、[関数を追加][新しい関数を作成] の順にクリックします。リゾルバーページを通らずに関数を作成することもできます。そのためには、AWS AppSync コンソールで [関数] ページに進みます。[関数の作成] ボタンを選択します。E メールが有効であり特定のドメインからのものかどうかをチェックする関数を作成しましょう。E メールが無効な場合、この関数はエラーを発生させます。それ以外の場合、渡された入力をすべて転送します。

NONE タイプのデータソースを作成したことを確認してください。[データソース名] リストでこのデータソースを選択します。関数名として、「validateEmail」と入力します。関数コード領域で、次のスニペットですべてを上書きします。

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { email } = ctx.stash; const valid = util.matches( '^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com', email ); if (!valid) { util.error(`"${email}" is not a valid email.`); } return { payload: { email } }; } export function response(ctx) { return ctx.result; }

選択内容を確認し、[作成] を選択します。これで、validateEmail 関数が作成されました。次のコードでこれらの手順を繰り返し、saveUser 関数を作成します (わかりやすくするため、NONE データソースを使用し、関数が実行された後にユーザーがシステムに保存されたものとしています。):

import { util } from '@aws-appsync/utils'; export function request(ctx) { return ctx.prev.result; } export function response(ctx) { ctx.result.id = util.autoId(); return ctx.result; }

これで、saveUser 関数が作成されました。

パイプラインリゾルバーへの関数の追加

先ほど作成したパイプラインリゾルバーには関数が自動的に追加されています。そうでない場合や、[関数] ページから関数を作成した場合は、signUp リゾルバーページの [関数を追加] をクリックして、関数をアタッチできます。validateEmailsaveUser の両方の関数をリゾルバーに追加します。validateEmail 関数は saveUser 関数の前に配置する必要があります。関数を追加するときには、上に移動下に移動のオプションを使用して関数の実行順序を並べ替えることができます。編集内容を見直して [保存] を選択します。

クエリの実行

AWS AppSync コンソールで、[クエリ] ページに移動します。Explorer で、ミューテーションを使用していることを確認します。そうでない場合は、ドロップダウンリストから [Mutation] を選択し、 [+] を選択します。以下のクエリを入力します。

mutation { signUp(input: {email: "nadia@myvaliddomain.com", username: "nadia"}) { id username } }

以下のように返されます。

{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "username": "nadia" } } }

これで、パイプラインリゾルバーを使用して、ユーザーをサインアップし、入力 E メールを検証できました。