向 Amazon SWF 发出 HTTP 请求 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

向 Amazon SWF 发出 HTTP 请求

如果您没有使用任何 Amazon SDK,可以使用 POST 请求方法通过 HTTP 执行 Amazon Simple Workflow Service (Amazon SWF) 操作。POST 方法要求您在请求标头中指定操作并在请求正文中以 JSON 格式提供操作数据。

HTTP 标头内容

Amazon SWF 要求在 HTTP 请求标头中包含以下信息:

  • host Amazon SWF 端点。

  • x-amz-date 您必须在 HTTP Date 标头或 Amazonx-amz-date header(某些 HTTP 客户端库不允许您设置 Date 标头)中提供时间戳。当 x-amz-date 标题呈现时,系统在验证请求身份时会忽略任何 Date 标题。

    必须利用以下三种格式中的一种来指定数据,如 HTTP/1.1 RFC 中所规定:

    • 格林威治时间 1994 年 11 月 6 日,星期日 08:49:37(RFC 822,由 RFC 1123 更新)

    • 格林威治时间 1994 年 11 月 6 日,星期日 08:49:37(RFC 850,由 RFC 1036 废弃)

    • 1994 年 11 月 6 日 08:49:37,星期日(ANSI C 的 asctime() 格式)

  • x-amzn-authorization已签名的请求参数格式如下:

    AWS3 AWSAccessKeyId=####,Algorithm=HmacSHA256, [,SignedHeaders=Header1;Header2;...] Signature=S(StringToSign)

    AWS3 – 这是一个特定于 Amazon 实现的标签,表示用于签署请求的验证版本(目前,对于 Amazon SWF,该值始终为 AWS3)。

    AWSAccessKeyId – 您的 Amazon 访问密钥 ID。

    Algorithm – 用于创建字符串要签名的 HMAC-SHA 值的算法,如 HmacSHA256HmacSHA1

    Signature – Base64 [算法( StringToSign, SigningKey)]。有关详细信息,请参阅 计算 Amazon SWF 的 HMAC-SHA 签名

    SignedHeaders–(可选)如果有这一项,其中必须包含标准化 HttpHeaders 计算中所用的所有 HTTP 标头的列表。必须用一个分号字符 (;)(ASCII 字符 59)分隔列表值。

  • x-amz-target – 请求的目标服务和数据操作,格式如下:

    com.amazonaws.swf.service.model.SimpleWorkflowService. + <action>

    例如 com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain

  • content-type – 类型需要将 JSON 和字符集指定为 application/json; charset=UTF-8

以下示例为创建域所用的 HTTP 请求的标头。

POST http://swf.us-east-1.amazonaws.com/ HTTP/1.1 Host: swf.us-east-1.amazonaws.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25 ( .NET CLR 3.5.30729; .NET4.0E) Accept: application/json, text/javascript, */* Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Content-Type: application/json; charset=UTF-8 X-Requested-With: XMLHttpRequest X-Amz-Date: Fri, 13 Jan 2012 18:42:12 GMT X-Amz-Target: com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain Content-Encoding: amz-1.0 X-Amzn-Authorization: AWS3 AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE,Algorithm=HmacSHA256,SignedHeaders=Host;X-Amz-Date;X-Amz-Target;Content-Encoding,Signature=tzjkF55lxAxPhzp/BRGFYQRQRq6CqrM254dTDE/EncI= Referer: http://swf.us-east-1.amazonaws.com/explorer/index.html Content-Length: 91 Pragma: no-cache Cache-Control: no-cache {"name": "867530902", "description": "music", "workflowExecutionRetentionPeriodInDays": "60"}

此处为对应 HTTP 响应的示例。

HTTP/1.1 200 OK Content-Length: 0 Content-Type: application/json x-amzn-RequestId: 4ec4ac3f-3e16-11e1-9b11-7182192d0b57

HTTP 正文内容

HTTP 请求的正文包含 HTTP 请求标头中指定的操作数据。使用 JSON 数据格式可以同时传递数据值和数据结构。元素可通过括号嵌套在其它元素内。例如,下面显示了一个请求,该请求使用 Unix 时间注释列出在两个指定时间点之间开始的所有工作流执行。

{ "domain": "867530901", "startTimeFilter": { "oldestDate": 1325376070, "latestDate": 1356998399 }, "tagFilter": { "tag": "music purchase" } }

Amazon SWF JSON 请求和响应示例

下面的示例显示了一个对 Amazon SWF 的请求,用于获取对我们在前面创建的域的描述。然后,它显示了 Amazon SWF 响应。

HTTP POST 请求

POST http://swf.us-east-1.amazonaws.com/ HTTP/1.1 Host: swf.us-east-1.amazonaws.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25 ( .NET CLR 3.5.30729; .NET4.0E) Accept: application/json, text/javascript, */* Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Content-Type: application/json; charset=UTF-8 X-Requested-With: XMLHttpRequest X-Amz-Date: Sun, 15 Jan 2012 03:13:33 GMT X-Amz-Target: com.amazonaws.swf.service.model.SimpleWorkflowService.DescribeDomain Content-Encoding: amz-1.0 X-Amzn-Authorization: AWS3 AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE,Algorithm=HmacSHA256,SignedHeaders=Host;X-Amz-Date;X-Amz-Target;Content-Encoding,Signature=IFJtq3M366CHqMlTpyqYqd9z0ChCoKDC5SCJBsLifu4= Referer: http://swf.us-east-1.amazonaws.com/explorer/index.html Content-Length: 21 Pragma: no-cache Cache-Control: no-cache {"name": "867530901"}

Amazon SWF 响应

HTTP/1.1 200 OK Content-Length: 137 Content-Type: application/json x-amzn-RequestId: e86a6779-3f26-11e1-9a27-0760db01a4a8 {"configuration": {"workflowExecutionRetentionPeriodInDays": "60"}, "domainInfo": {"description": "music", "name": "867530901", "status": "REGISTERED"} }

注意协议 (HTTP/1.1) 后面有一个状态代码 (200)。200 的代码值表示操作成功。

Amazon SWF 不对空值执行序列化操作。如果您的 JSON 分析程序设置为对请求的空值执行序列化,则 Amazon SWF 会忽略这些值。