本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
向 Amazon SWF 提出 HTTP 請求
如果您未使用其中一個AWSSDK,您可以使用 POST 請求方法透過 HTTP 執行 Amazon Simple Workflow Service (Amazon SWF) 操作。POST 方法需要您在請求標頭中指定操作,並在請求內文中提供 JSON 格式的操作資料。
HTTP 標頭內容
Amazon SWF 需要 HTTP 請求標頭中的下列資訊:
-
host
Amazon SWF 終端節點。 x-amz-date
您必須在 HTTP 提供時間戳記Date
標頭或AWSx-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 會忽略這些值。