

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat Permintaan HTTP ke Amazon SWF
<a name="UsingJSON-swf"></a>

Jika Anda tidak menggunakan salah satunya AWS SDKs, Anda dapat melakukan operasi Amazon Simple Workflow Service (Amazon SWF) melalui HTTP menggunakan metode permintaan POST. Metode POST mengharuskan Anda menentukan operasi di header permintaan dan memberikan data untuk operasi dalam format JSON dalam isi permintaan. 

## Konten Header HTTP
<a name="HTTPHeader"></a>

Amazon SWF membutuhkan informasi berikut di header permintaan HTTP:
+ `host` Endpoint Amazon SWF. 
+ `x-amz-date`Anda harus memberikan cap waktu baik di `Date` header HTTP atau AWS `x-amz-date header` (beberapa perpustakaan klien HTTP tidak mengizinkan Anda mengatur `Date` header). Saat header `x-amz-date` ada, sistem mengabaikan header `Date` saat mengautentikasi permintaan.

  Tanggal harus ditentukan dalam salah satu dari tiga format berikut, seperti yang ditentukan dalam HTTP/1.1 RFC:
  + Min, 06 Nov 1994 08:49:37 GMT (RFC 822, diperbarui oleh RFC 1123)
  + Min, 06-Nov-94 08:49:37 GMT (RFC 850, diusangkan oleh RFC 1036)
  + Sun 6 Nov 08:49:37 1994 (format asctime() ANSI C)
+ `x-amzn-authorization` Permintaan ditandatangani dalam format:

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

  `AWS3`— Ini adalah tag AWS khusus implementasi yang menunjukkan versi otentikasi yang digunakan untuk menandatangani permintaan (saat ini, untuk Amazon SWF nilai ini selalu). `AWS3`

  `AWSAccessKeyId`— ID Kunci AWS Akses Anda.

  `Algorithm`— Algoritma yang digunakan untuk membuat nilai HMAC-SHA dari string-to-sign, seperti atau. `HmacSHA256` `HmacSHA1`

  `Signature`— Base64 (Algoritma ( StringToSign, SigningKey )). Untuk detail selengkapnya, lihat [Menghitung Tanda Tangan HMAC-SHA untuk Amazon SWF](HMACAuth-swf.md)

  `SignedHeaders`— (Opsional) Jika ada, harus berisi daftar semua Header HTTP yang digunakan dalam perhitungan HttpHeaders Canonicalized. Satu karakter titik koma (;) (karakter ASCII 59) harus digunakan sebagai pembatas untuk nilai daftar. 
+  `x-amz-target` – Layanan tujuan dari permintaan dan operasi untuk data, dalam format 

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

   Sebagai contoh, `com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain` 
+ `content-type` – Jenis kebutuhan untuk menentukan JSON dan set karakter, sebagai `application/json; charset=UTF-8`

 Berikut ini adalah contoh header untuk permintaan HTTP dalam pembuatan domain. 

```
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"}
```

Berikut adalah contoh respons HTTP yang sepadan. 

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

## Konten Isi HTTP
<a name="JSONschema"></a>

Isi permintaan HTTP berisi data untuk operasi yang ditentukan dalam header permintaan HTTP. Gunakan format data JSON untuk menyampaikan nilai-nilai data dan struktur data, secara bersamaan. Elemen dapat bersarang dalam elemen lain menggunakan notasi braket. Misalnya, hal berikut menunjukkan permintaan untuk mencantumkan semua eksekusi alur kerja yang dimulai antara dua titik yang ditentukan dalam waktu—menggunakan notasi Waktu Unix. 

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

## Sampel Permintaan dan Respon JSON Amazon SWF
<a name="JSONMajorExample"></a>

Contoh berikut menunjukkan permintaan ke Amazon SWF untuk deskripsi domain yang kita buat sebelumnya. Kemudian contoh menunjukkan respon Amazon SWF. 

### Permintaan POST HTTP
<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"}
```

### Respons 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"}
}
```

Perhatikan protokol (`HTTP/1.1`) diikuti dengan kode status (`200`). Sebuah nilai kode `200` menunjukkan operasi yang berhasil. 

Amazon SWF tidak membuat serial nilai null. Jika parser JSON Anda diatur untuk membuat serial nilai null untuk permintaan, Amazon SWF mengabaikannya. 

# Menghitung Tanda Tangan HMAC-SHA untuk Amazon SWF
<a name="HMACAuth-swf"></a>

Setiap permintaan ke Amazon SWF harus dikonfirmasi. AWS SDKs Secara otomatis menandatangani permintaan Anda dan mengelola otentikasi berbasis token Anda. Namun, jika Anda ingin menulis permintaan `POST` HTTP Anda sendiri, Anda perlu membuat nilai `x-amzn-authorization` untuk konten `POST Header` HTTP sebagai bagian dari autentikasi permintaan Anda.

Untuk informasi selengkapnya tentang format header, lihat [Konten Header HTTP](UsingJSON-swf.md#HTTPHeader). Untuk AWS SDK untuk Java implementasi penandatanganan AWS Versi 3, lihat [ AWSSignerkelas.java](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java).

## Membuat Tanda tangan Permintaan
<a name="AuthProcess"></a>

Sebelum Anda membuat tanda tangan permintaan HMAC-SHA , Anda harus mendapatkan kredensial AWS (Access Key ID dan Kunci Rahasia).

**penting**  
Anda dapat menggunakan salah satu SHA1 atau SHA256 untuk menandatangani permintaan Anda. Namun, pastikan bahwa Anda menggunakan metode yang sama selama proses penandatanganan. Metode yang Anda pilih harus sesuai dengan nilai nama `Algorithm` di header HTTP. 

### Untuk membuat tanda tangan permintaan
<a name="swf-create-request-signature-steps"></a>

1. Buat bentuk kanosis header permintaan HTTP. Bentuk kanosis header HTTP meliputi:
   + `host`
   + Setiap elemen header dimulai dengan `x-amz-`

   Untuk informasi selengkapnya tentang header yang disertakan, lihat [Konten Header HTTP](UsingJSON-swf.md#HTTPHeader).

   1. Untuk setiap pasangan nama nilai header, ubah nama header (tetapi bukan nilai header) menjadi huruf kecil.

   1. Membangun peta nama header dengan nilai header dipisahkan koma.

      ```
      x-amz-example: value1
      x-amz-example: value2  =>  x-amz-example:value1,value2
      ```

      Untuk informasi selengkapnya, lihat [Bagian 4.2 dari RFC 2616](http://tools.ietf.org/html/rfc2616).

   1. Untuk setiap pasangan nama nilai header, ubah pasangan nama nilai menjadi string dalam format `headerName:headerValue`. Trim spasi apa pun dari awal dan akhir `headerName` dan `headerValue`, tanpa spasi di setiap sisi titik dua.

      ```
      x-amz-example1:value1,value2
      x-amz-example2:value3
      ```

   1. Masukkan baris baru (`U+000A`) setelah setiap string dikonversi, termasuk string terakhir.

   1. Urutkan koleksi string yang dikonversi secara abjad, dengan nama header.

1. Buat string-to-sign nilai yang mencakup item berikut:
   + Baris `1`: Metode HTTP (`POST`), diikuti oleh baris baru.
   + Baris `2`: Permintaan URI (`/`), diikuti oleh baris baru.
   + Baris `3`: String kosong diikuti oleh baris baru.
**catatan**  
Biasanya, string kueri muncul di sini, tapi Amazon SWF tidak menggunakan string kueri.
   + Baris `4–n`: String yang mewakili header permintaan kanonikalisasi yang Anda dikomputasi pada Langkah 1, diikuti oleh baris baru. Baris baru ini menciptakan baris kosong antara header dan isi permintaan HTTP. Untuk informasi selengkapnya, lihat [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html).
   + Isi permintaan, *tidak* diikuti oleh baris baru.

1. Hitung SHA256 atau SHA1 intisari nilainya. string-to-sign Gunakan metode SHA yang sama di seluruh proses.

1. Compute dan Base64-encode HMAC-SHA menggunakan intisari SHA256 atau SHA1 intisari (tergantung pada metode yang Anda gunakan) dari nilai yang dihasilkan dari langkah sebelumnya dan kunci akses rahasia sementara dari Security Token Service menggunakan tindakan API. AWS `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)`
**catatan**  
Amazon SWF mengharapkan tanda yang sama (`=`) pada akhir nilai HMAC-SHA dikodekan Base64. Jika rutinitas penkodean Base64 Anda tidak menyertakan tanda sama yang ditambahkan, tambahkan satu ke akhir nilai.

   *Untuk informasi selengkapnya tentang penggunaan kredenal keamanan sementara dengan Amazon SWF dan layanan AWS lainnya, [AWS lihat Layanan yang Bekerja dengan IAM di Panduan](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html) Pengguna IAM.*

1. Tempatkan nilai yang dihasilkan sebagai nilai untuk nama `Signature` di header `x-amzn-authorization` dari permintaan HTTP ke Amazon SWF.

1. Amazon SWF memverifikasi permintaan dan melakukan operasi tertentu.