

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

# 向 Amazon SWF 發出 HTTP 請求
<a name="UsingJSON-swf"></a>

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

## HTTP 標頭內容
<a name="HTTPHeader"></a>

Amazon SWF 在 HTTP 請求的 標頭中需要以下資訊：
+ `host` Amazon 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` – 用來建立string-to-sign的 HMAC-SHA 值的演算法，例如 `HmacSHA256`或 `HmacSHA1`。

  `Signature` – Base64( Algorithm( StringToSign、SigningKey ))。詳細資訊，請參閱「[計算 Amazon SWF 的 HMAC-SHA 簽章](HMACAuth-swf.md)」

  `SignedHeaders` – （選用） 如果存在， 必須包含 Canonicalized 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 內文內容
<a name="JSONschema"></a>

HTTP 請求的內文包含 HTTP 請求標頭中所指定之操作的資料。使用 JSON 資料格式，同時傳遞資料值和資料結構。使用括號符號，可以將元素巢套於其他元素內。例如，以下顯示使用 Unix Time 標記法，列出在兩個指定時間點之間啟動的所有工作流程執行的請求。

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

## Amazon SWF JSON 請求和回應範例
<a name="JSONMajorExample"></a>

下列範例顯示對 Amazon SWF 提出的請求，以取得我們先前建立的網域描述。然後顯示 Amazon SWF 回應。

### HTTP POST 請求
<a name="http-post-request"></a>

```
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 回應
<a name="swf-response"></a>

```
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 會忽略它們。