

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 AWS AppSync 中使用本地解析器
<a name="tutorial-local-resolvers"></a>

**注意**  
我们现在主要支持 APPSYNC\$1JS 运行时系统及其文档。请考虑使用 APPSYNC\$1JS 运行时系统和[此处](https://docs.aws.amazon.com/appsync/latest/devguide/tutorials-js.html)的指南。

AWS AppSync 允许您使用支持的数据来源（AWS Lambda、Amazon DynamoDB 或 Amazon OpenSearch Service）执行各种操作。但在某些情况下，可能不必调用支持的数据来源。

这时本地解析器就很方便。本地解析器无需调用远程数据来源，只需将请求映射模板的结果**转发**到响应映射模板。字段解析是在 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 (附加解析器)*。创建类型为 *None* 的新数据来源，并命名为 *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
    }
}
```

我们刚刚说明了如何使用本地解析器，即，在不离开 AWS AppSync 的情况下发送和接收页面。