

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

# AWS AppSync でのローカルリゾルバーの使用
<a name="tutorial-local-resolvers-js"></a>

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

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

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

## Pub/Sub アプリの作成
<a name="create-the-pub-sub-application-js"></a>

まず、**[最初から設計]** オプションを選択し、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;
}
```

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

## ページの送信およびサブスクライブ
<a name="send-and-subscribe-to-messages-js"></a>

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

**[クエリ]** ペインで `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 に任せずにメッセージをパブリッシュしてそれを受信することで、ローカルリゾルバーの使用方法の例を示しました。