Amazon Simple Queue Service
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

提出查询请求

Amazon SQS 支持用于调用服务操作的查询请求。查询请求是使用 GET 或 POST 方法的简单 HTTP 或 HTTPS 请求。查询请求必须包含 Action 参数,以指示要执行的操作. 响应是符合某种模式的 XML 文档。

GET 请求的结构

本指南将 Amazon SQS GET 请求显示为可直接在浏览器中使用的 URL。URL 由以下要素构成:

  • 终端节点 – 请求对其执行操作的资源 (对于 Amazon SQS 的情况,终端节点是队列)

  • 操作 – 您希望对终端节点执行的操作;例如:发送消息

  • 参数 – 任何请求参数

以下是向 Amazon SQS 队列发送消息的示例 GET 请求。

您如何构造 AUTHPARAMS 取决于您签署 API 请求的方式。有关签名版本 4 中 AUTHPARAMS 的信息,请参阅已签名的签名版本 4 请求示例

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/queue1?Action=SendMessage&MessageBody=Your%20Message%20Text​&Version=2012-11-05​&AUTHPARAMS

重要

由于 GET 请求是 URL,因此,您必须对参数值进行 URL 编码。例如,在前面的示例请求中,MessageBody 参数的值实际为 Your Message Text。但是,URL 中不允许使用空格,空格在 URL 中编码为“%20”。示例的其余部分没有进行 URL 编码,更易于您阅读。

注意

队列名称和队列 URL 区分大小写。

为了使 GET 示例更易于阅读,本指南采用了以下解析格式来显示这些示例。

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/queue1 ?Action=SendMessage &MessageBody=Your%20Message%20Text &Version=2012-11-05 &Expires=2011-10-15T12:00:00Z &AUTHPARAMS

注意

在本指南中提供的示例查询请求中,我们使用了假 AWS 访问密钥 ID 和假签名,各项均附加有 EXAMPLE。我们这样做是为了表明,您不应根据示例中显示的请求参数来指望示例中的签名准确无误。针对创建查询请求签名的说明中有一个例外。那里的示例显示了基于我们指定的特定 AWS 访问密钥 ID 以及示例中请求参数的真实签名 (有关更多信息,请参阅“查询请求身份验证”)。

在 Amazon SQS 中,除 MessageBody 以外的所有参数始终具有不带空格的值。您为 SendMessage 请求中的 MessageBody 提供的值可以有空格。在本指南中,带有包含空格的 MessageBody 的任何示例 SendMessage 查询请求在显示时,其空格在 URL 中都进行了编码 (编码为 %20)。为了清楚起见,URL 的其余部分没有使用 URL 编码格式显示。

第一行代表请求的终端节点。这是该请求所影响的资源。前面的示例对队列执行操作,因此,请求的终端节点是队列的标识符,称为队列 URL。有关队列 URL 的更多详细信息,请参阅“队列名称和 URL”。

终端节点后是一个问号 (?),将终端节点与参数隔开。参数之间用“&”号隔开。

Action 参数表示要执行的操作 (有关操作的列表,请参阅《Amazon SQS API 参考》中的 API 操作)。有关所有查询请求中的其他通用参数的列表,请参阅《Amazon SQS API 参考》中的通用参数

POST 请求的结构

Amazon SQS 也接受 POST 请求。使用 POST 请求,您可以在 HTTP 请求正文中以表单发送查询参数,如以下步骤所述。

您如何构造 AUTHPARAMS 取决于您签署 API 请求的方式。有关签名版本 4 中 AUTHPARAMS 的信息,请参阅已签名的签名版本 4 请求示例

创建 POST 请求

  1. 将查询参数名称和值汇编到表单中。

    这意味着,您可以像对待 GET 请求那样,将参数和值放在一起 (使用 & 号分隔每个名称-值对)。以下示例显示了带有换行符的 SendMessage 请求;我们在本指南中使用这些换行符是为了使信息更易于阅读。

    Copy
    Action=SendMessage &MessageBody=Your Message Text &Version=2012-11-05 &Expires=2011-10-15T12:00:00Z &AUTHPARAMS
  2. 根据 HTML 规范的表单提交 部分,对表单进行表单 URL 编码 (有关更多信息,请参阅 http://www.w3.org/MarkUp/html-spec/html-spec_toc.html#SEC8.2.1)。

    Copy
    Action=SendMessage &MessageBody=Your+Message+Text &Version=2012-11-05 &Expires=2011-10-15T12%3A00%3A00Z &AUTHPARAMS
  3. 向表单添加请求签名 (有关更多信息,请参阅 查询请求身份验证)。

    Copy
    Action=SendMessage &MessageBody=Your+Message+Text &Version=2012-11-05 &Expires=2011-10-15T12%3A00%3A00Z &AUTHPARAMS
  4. 提供结果表单作为 POST 请求的正文。

  5. 包含 Content-Type HTTP 标头,并将值设置为 application/x-www-form-urlencoded

以下示例显示了最终的 POST 请求。

Copy
POST /queue1 HTTP/1.1 Host: sqs.us-east-2.amazonaws.com Content-Type: application/x-www-form-urlencoded Action=SendMessage &MessageBody=Your+Message+Text &Version=2012-11-05 &Expires=2011-10-15T12%3A00%3A00Z &AUTHPARAMS

除了 Content-Type 以外,Amazon SQS 不要求在请求中使用其他 HTTP 标头。您提供的身份验证签名是您在发送 GET 请求时提供的相同签名 (有关签名的信息,请参阅查询请求身份验证)。

注意

根据您 HTTP 客户端所使用的 HTTP 版本的需要,该客户端通常会向 HTTP 请求添加其他项目。我们没有在本指南的示例中包含这些额外的项目。