向 Amazon SWF 提出 HTTP 請求 - Amazon Simple Workflow Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

向 Amazon SWF 提出 HTTP 請求

如果您未使用其中一個AWSSDK,您可以使用 POST 請求方法透過 HTTP 執行 Amazon Simple Workflow Service (Amazon SWF) 操作。POST 方法需要您在請求標頭中指定操作,並在請求內文中提供 JSON 格式的操作資料。

HTTP 標頭內容

Amazon SWF 需要 HTTP 請求標頭中的下列資訊:

  • hostAmazon SWF 終端節點。

  • x-amz-date您必須在 HTTP 提供時間戳記Date標頭或AWS x-amz-date header(有些 HTTP 用户端程式庫不讓您設定Date標頭)。當 x-amz-date 標題存在時,系統會在驗證請求時略過任何 Date 標題。

    日期必須使用 HTTP/1.1 RFC 所指定之下列三種格式中的其中一種來指定:

    • Sun, 06 Nov 1994 08:49:37 GMT (RFC 822,已於 RFC 1123 更新)

    • Sunday, 06-Nov-94 08:49:37 GMT (RFC 850,已於 RFC 1036 淘汰)

    • Sun Nov 6 08:49:37 1994 (ANSI C 的 asctime() 格式)

  • x-amzn-authorization 下列格式的簽署請求參數:

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

    AWS3— 這是一個AWS實作專屬標籤表示用來簽署請求的身分驗證版本 (目前,Amazon SWF),此值始終為AWS3

    AWSAccessKeyId— 您的AWS存取金鑰 ID。

    Algorithm— 用來建立登入字串之 HMAC-SHA 值的演算法 (例如HmacSHA256或者HmacSHA1

    Signature— Base64 (算法 (StringToSign, 簽署金鑰))。詳細資訊,請參閱「計算 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 Time 表示法)。

{ "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 不序列化 null 值。如果您的 JSON 解析器設定為序列化請求的 null 值,Amazon SWF 會忽略這些值。