

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

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

**注意**  
我們現在主要支援 APPSYNC\$1JS 執行期及其文件。請考慮[在此處](https://docs.aws.amazon.com/appsync/latest/devguide/tutorials-js.html)使用 APPSYNC\$1JS 執行期及其指南。

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

這就是本機解析程式的實用之處。本機解析程式只是將請求映射範本的結果**轉發**到回應映射範本，而不是呼叫遠端資料來源。欄位解析度不會 leave AWS AppSync。

本機解析程式適用於多種使用案例。最常見的使用案例是發佈通知而不觸發資料來源呼叫。為了示範此使用案例，我們來建置一個分頁應用程式，讓使用者可以互相傳遞頁面。此範例使用*訂閱*，因此，如果您不熟悉*訂閱*，可以遵循[即時資料](aws-appsync-real-time-data.md)教學課程。

## 建立分頁應用程式
<a name="create-the-paging-application"></a>

在我們的分頁應用程式中，用戶端可以訂閱收件匣，並向其他用戶端傳送頁面。每個頁面皆包含訊息。結構描述如下：

```
schema {
    query: Query
    mutation: Mutation
    subscription: Subscription
}

type Subscription {
    inbox(to: String!): Page
    @aws_subscribe(mutations: ["page"])
}

type Mutation {
    page(body: String!, to: String!): Page!
}

type Page {
    from: String
    to: String!
    body: String!
    sentAt: String!
}

type Query {
    me: String
}
```

現在將解析程式附加到 `Mutation.page` 欄位。在 **Schema (結構描述)** 窗格中，按一下右側窗格上欄位定義旁邊的 *Attach Resolver (附加解析程式)*。建立類型為*無*的新資料來源，將其命名為 *PageDataSource*。

在請求映射範本部分，輸入：

```
{
  "version": "2017-02-28",
  "payload": {
    "body": $util.toJson($context.arguments.body),
    "from": $util.toJson($context.identity.username),
    "to":  $util.toJson($context.arguments.to),
    "sentAt": "$util.time.nowISO8601()"
  }
}
```

在回應映射範本部分，則選取預設的 *Forward the result (轉發結果)*。儲存您的解析程式。您的應用程式現已就緒，可以開始傳遞頁面！

## 傳送和訂閱頁面
<a name="send-and-subscribe-to-pages"></a>

用戶端必須先訂閱收件匣，才能接收頁面。

現在就讓我們在 **Queries (查詢)** 窗格中執行 `inbox` 訂閱：

```
subscription Inbox {
    inbox(to: "Nadia") {
        body
        to
        from
        sentAt
    }
}
```

 每當叫用`Mutation.page`變動時，*Nadia* 都會收到頁面。現在透過執行變動來叫用變動：

```
mutation Page {
    page(to: "Nadia", body: "Hello, World!") {
        body
        to
        from
        sentAt
    }
}
```

我們剛示範如何使用本機解析程式，方法是傳送頁面並接收頁面，而不使用 leaving AWS AppSync。