

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

# 使用 HTTPS REST 端点连接到 Neptune 数据库实例
<a name="access-graph-gremlin-rest"></a>

Amazon Neptune 为 Gremlin 查询提供 HTTPS 端点。REST 接口与您的数据库集群使用的任何 Gremlin 版本兼容（请参阅您正在运行的 Neptune 引擎版本的[引擎版本页面](engine-releases.md)，以确定它支持哪个 Gremlin 版本）。

**注意**  
如[使用 SSL/HTTPS 加密与 Amazon Neptune 数据库的连接](security-ssl.md)中所述，Neptune 现在要求您使用 HTTPS 而不是 HTTP 进行连接。此外，Neptune 目前不支持 HTTP/2 来处理 REST API 请求。客户端在连接到端点时必须使用 HTTP/1.1。

以下说明将带您演练使用 `curl` 命令和 HTTPS 连接到 Gremlin 终端节点。必须从与您的 Neptune 数据库实例位于同一虚拟私有云 (VPC) 中的 Amazon EC2 实例中按照这些说明操作。

针对 Neptune 数据库实例的 Gremlin 查询的 HTTPS 端点为 `https://your-neptune-endpoint:port/gremlin`。

**注意**  
有关查找 Neptune 数据库实例的主机名的信息，请参阅[连接到 Amazon Neptune 端点](feature-overview-endpoints.md)。

## 使用 HTTP REST 端点连接到 Neptune
<a name="access-graph-gremlin-rest-connect"></a>

以下示例使用 **curl** 来通过 HTTP **POST** 提交 Gremlin 查询。该查询采用 JSON 格式在 POST 请求正文中提交为 `gremlin` 属性。

```
curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://your-neptune-endpoint:port/gremlin
```

此示例通过使用 `g.V().limit(1)` 遍历返回图形中的第一个顶点。您可以通过将它替换为另一个 Gremlin 遍历来查询其它内容。

**重要**  
默认情况下，REST 端点在单个 JSON 结果集中返回所有结果。如果此结果集太大，Neptune 数据库实例可能会出现 `OutOfMemoryError` 异常。  
您可以通过启用分块响应（在一系列单独的响应中返回的结果）来避免这种情况。请参阅[使用可选的 HTTP 尾随标头启用由多部分组成的 Gremlin 响应](access-graph-gremlin-rest-trailing-headers.md)。

尽管建议在发送 Gremlin 查询时使用 HTTP **POST** 请求，但也可以使用 HTTP **GET** 请求：

```
curl -G "https://your-neptune-endpoint:port?gremlin=g.V().count()"
```

**注意**  
Neptune 不支持 `bindings` 属性。

# 使用可选的 HTTP 尾随标头启用由多部分组成的 Gremlin 响应
<a name="access-graph-gremlin-rest-trailing-headers"></a>

默认情况下，对 Gremlin 查询的 HTTP 响应以单个 JSON 结果集返回。如果结果集非常大，这可能会导致数据库实例出现 `OutOfMemoryError` 异常。

但是，您可以启用*分块*响应（以多个单独部分返回的响应）。您可以通过在请求中包含传输编码 (TE) 尾随标头 (`te: trailers`) 来实现此目的。有关 TE 标头的更多信息，请参阅[有关 TE 请求标头的 MDN 页面](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/TE)。

当响应分成多个部分返回时，可能很难诊断在收到第一部分之后出现的问题，因为第一部分到达时的 HTTP 状态代码为 `200` (OK)。随后的失败通常会导致消息正文包含损坏的响应，Neptune 会在消息正文末尾附加一条错误消息。

为了便于检测和诊断此类故障，Neptune 还在每个响应块的尾随标头中加入了两个新的标头字段：
+ `X-Neptune-Status` – 包含响应代码后跟一个短名称。例如，如果成功，则尾随标头将是：`X-Neptune-Status: 200 OK`。如果出现故障，响应代码将是 [Neptune 引擎错误代码](errors-engine-codes.md)之一，例如 `X-Neptune-Status: 500 TimeLimitExceededException`。
+ `X-Neptune-Detail` – 对于成功的请求，为空。如果出现错误，则它包含 JSON 错误消息。由于 HTTP 标头值中只允许使用 ASCII 字符，因此 JSON 字符串是经过 URL 编码的。

**注意**  
Neptune 目前不支持对分块响应进行 `gzip` 压缩。如果客户端同时请求分块编码和压缩，Neptune 会跳过压缩。