

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

# 在 Amazon SQS 中使用 Amazon JSON 协议发出查询 API 请求
<a name="sqs-making-api-requests-json"></a>

本主题介绍了如何构造 Amazon SQS 端点、发出 POST 请求以及解释响应。

**注意**  
Amazon 大多数语言变体都支持 JSON 协议。有关受支持语言变体的完整列表，请参阅[亚马逊 SQS APIs 中使用的 Amazon JSON 协议支持哪些语言？](sqs-json-faqs.md#json-protocol-supported-languages)。

## 构造端点
<a name="sqs-api-constructing-endpoints-json"></a>

为了使用 Amazon SQS 队列，您必须构造一个端点。有关 Amazon SQS 端点的信息，请参阅 *Amazon Web Services 一般参考*中的以下页面：
+ [区域端点](https://docs.amazonaws.cn/general/latest/gr/rande.html#regional-endpoints)
+ [Amazon Simple Queue Service 端点和配额](https://docs.amazonaws.cn/general/latest/gr/sqs-service)

每个 Amazon SQS 端点都是独立的。例如，如果有两个名为 *MyQueue* 的队列，其中一个队列具有终端节点 `sqs.us-east-2.amazonaws.com`，另一个队列具有终端节点 `sqs.eu-west-2.amazonaws.com`，则这两个队列不会相互共享任何数据。

以下是一个提出创建队列请求的端点的示例。

```
POST / HTTP/1.1
Host: sqs.us-west-2.amazonaws.com
X-Amz-Target: AmazonSQS.CreateQueue
X-Amz-Date: <Date>
Content-Type: application/x-amz-json-1.0
Authorization: <AuthParams>
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive 
{
    "QueueName":"MyQueue",
    "Attributes": {
        "VisibilityTimeout": "40"
    },
    "tags": {
        "QueueType": "Production"
    }
}
```

**注意**  
队列名称和队 URLs 列区分大小写。  
{{`AUTHPARAMS`}} 的结构取决于 API 请求的签名。有关更多信息，请参阅[《*亚马逊 Web Services 一般参考*》中的 “签署 Amazon API 请求](https://docs.amazonaws.cn/general/latest/gr/signing_aws_api_requests.html)”。

## 发出 POST 请求
<a name="structure-post-request"></a>

Amazon SQS POST 请求在 HTTP 请求的正文中以表单的形式发送查询参数。

以下是将 `X-Amz-Target` 设置为 `AmazonSQS.<operationName>` 的 HTTP 标头以及将 `Content-Type` 设置为 `application/x-amz-json-1.0` 的 HTTP 标头的示例。

```
POST / HTTP/1.1
Host: sqs.<region>.<domain>
X-Amz-Target: AmazonSQS.SendMessage
X-Amz-Date: <Date>
Content-Type: application/x-amz-json-1.0
Authorization: <AuthParams>
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive 
{
    "QueueUrl": "https://sqs.<region>.<domain>/<awsAccountId>/<queueName>/",
    "MessageBody": "This is a test message"
}
```

此 HTTP POST 请求将消息发送到 Amazon SQS 队列。

**注意**  
HTTP 标头 `X-Amz-Target` 和 `Content-Type` 均为必需项。  
根据客户端的 HTTP 版本，您的 HTTP 客户端可能会向 HTTP 请求添加其他项目。