AWS AppSync でのローカルリゾルバーの使用 - AWS AppSync GraphQL

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

AWS AppSync でのローカルリゾルバーの使用

AWS AppSync では、サポートされているデータソース (、Amazon DynamoDB、または Amazon OpenSearch Service) を使用してさまざまなオペレーションを実行できます。ただし、特定のシナリオでは、サポートされているデータソースに対する呼び出しの必要がないことがあります。

そのような場合は、ローカルリゾルバーが役立ちます。リモートのデータソースを呼び出すのではなく、ローカルリゾルバーはリクエストハンドラーの結果をレスポンスハンドラーに転送します。AWS AppSync ではフィールドの解決は行われません。

ローカルリゾルバーは、さまざまな状況で役立ちます。特によく使用されるのは、データソースの呼び出しをトリガーせずに通知を発行する場合です。このユースケースを実証するために、ユーザーがメッセージをパブリッシュしたりサブスクライブしたりできる pub/sub アプリケーションを作成してみましょう。この例では、サブスクリプションを活用します。サブスクリプションに慣れていない場合は、「リアルタイムデータ」チュートリアルを参照してください。

Pub/Sub アプリの作成

まず、[最初から設計] オプションを選択し、GraphQL API の作成時にオプションの詳細を設定して、空白の GraphQL API を作成します。

Pub/sub アプリケーションでは、クライアントはメッセージをサブスクライブしたりパブリッシュしたりできます。パブリッシュされた各メッセージには名前とデータが含まれます。これをスキーマに追加してください。

type Channel { name: String! data: AWSJSON! } type Mutation { publish(name: String!, data: AWSJSON!): Channel } type Query { getChannel: Channel } type Subscription { subscribe(name: String!): Channel @aws_subscribe(mutations: ["publish"]) }

次に、リゾルバーを Mutation.publish フィールドにアタッチしましょう。「スキーマ」ペインの横にある「リゾルバー」ペインで、Mutation タイプを探し、publish(...): Channel フィールドを探して、「アタッチ」をクリックします。

None データソースを作成して、PageDataSource という名前を付けます。リゾルバーにアタッチします。

次のスニペットを使用してリゾルバーの実装を追加します:

export function request(ctx) { return { payload: ctx.args }; } export function response(ctx) { return ctx.result; }

必ずリゾルバーを作成し、変更を保存してください。

ページの送信およびサブスクライブ

クライアントがメッセージを受信するためには、まずは受信箱をサブスクライブする必要があります。

[クエリ] ペインで SubscribeToData のサブスクリプションを実行します。

subscription SubscribeToData { subscribe(name:"channel") { name data } }

サブスクライバーは、publish ミューテーションが呼び出されるたびにメッセージを受信しますが、メッセージが channel サブスクリプションに送信されたときだけです。クエリペインでこれを試してみましょう。サブスクリプションがまだコンソールで実行されている間に、別のコンソールを開き、クエリペインで次のリクエストを実行します。

注記

この例では、有効な JSON 文字列を使用しています。

mutation PublishData { publish(data: "{\"msg\": \"hello world!\"}", name: "channel") { data name } }

結果は以下のようになります。

{ "data": { "publish": { "data": "{\"msg\":\"hello world!\"}", "name": "channel" } } }

AWS AppSync に任せずにメッセージをパブリッシュしてそれを受信することで、ローカルリゾルバーの使用方法の例を示しました。