

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用本機解析程式 in AWS AppSync
<a name="tutorial-local-resolvers-js"></a>

AWS AppSync 可讓您使用支援的資料來源 (AWS Lambda、Amazon DynamoDB 或 Amazon OpenSearch Service) 來執行各種操作。不過，在某些情況下，可能不需要呼叫支援的資料來源。

這就是本機解析程式的實用之處。本機解析程式只會將請求處理常式的結果**轉送**到回應處理常式，而不是呼叫遠端資料來源。欄位解析不會 leave 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` 欄位，然後按一下**連接**。

建立*無*資料來源並將其命名為 *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"
    }
  }
}
```

我們剛示範如何使用本機解析程式，方法是發佈訊息並接收訊息，而不離開 the AWS AppSync 服務。