

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Solicitações HTTP no Amazon SWF
<a name="UsingJSON-swf"></a>

Se você não usar um deles AWS SDKs, poderá realizar operações do Amazon Simple Workflow Service (Amazon SWF) via HTTP usando o método de solicitação POST. O método POST exige a especificação da operação no cabeçalho da solicitação e o fornecimento de dados para operação no formato JSON no corpo da solicitação. 

## Conteúdo de cabeçalho HTTP
<a name="HTTPHeader"></a>

O Amazon SWF requer as seguintes informações no cabeçalho de uma solicitação HTTP:
+ `host` O endpoint do Amazon SWF. 
+ `x-amz-date`Você deve fornecer o carimbo de data/hora no `Date` cabeçalho HTTP ou no AWS `x-amz-date header` (algumas bibliotecas de cliente HTTP não permitem que você defina o `Date` cabeçalho). Quando existe um cabeçalho `x-amz-date`, o sistema ignora qualquer cabeçalho `Date` ao autenticar a solicitação.

  A data precisa ser especificada em um destes três formatos, conforme especificado em HTTP/1.1 RFC:
  + Domingo, 06-Nov-1994 08:49:37 GMT (RFC 822, atualizada pela RFC 1123)
  + Domingo, 06-Nov-94 08:49:37 GMT (RFC 850, substituído por RFC 1036)
  + Dom Nov 6 08:49:37 1994 (formato ANSI C asctime())
+ `x-amzn-authorization` Os parâmetros de solicitação assinados no formato:

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

  `AWS3`— Essa é uma tag AWS específica da implementação que indica a versão de autenticação usada para assinar a solicitação (atualmente, para o Amazon SWF, esse valor é sempre). `AWS3`

  `AWSAccessKeyId`— Sua ID da chave de AWS acesso.

  `Algorithm`— O algoritmo usado para criar o valor HMAC-SHA do string-to-sign, como ou. `HmacSHA256` `HmacSHA1`

  `Signature`— Base64 (Algoritmo ( StringToSign, SigningKey )). Para obter mais detalhes, consulte [Cálculo da assinatura HMAC-SHA para o Amazon SWF](HMACAuth-swf.md)

  `SignedHeaders`— (Opcional) Se presente, deve conter uma lista de todos os cabeçalhos HTTP usados no cálculo canônico HttpHeaders . Um caractere de ponto e vírgula (;) (caractere ASCII 59) deve ser usado como delimitador para valores de lista. 
+  `x-amz-target`: o serviço de destino da solicitação e a operação para os dados, no formato 

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

   Por exemplo, `com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain`. 
+ `content-type`: o tipo precisa especificar JSON e o conjunto de caracteres, como `application/json; charset=UTF-8`

 O seguinte é um cabeçalho de exemplo para uma solicitação HTTP para criar um domínio. 

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

Aqui está um exemplo da resposta HTTP correspondente. 

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

## Conteúdo do corpo HTTP
<a name="JSONschema"></a>

O corpo de uma solicitação HTTP apresenta os dados da operação especificada no cabeçalho da solicitação HTTP. Use o formato de dados JSON para transmitir valores e estrutura de dados, simultaneamente. Os elementos podem ser aninhados dentro de outros elementos usando a notação de colchetes. Por exemplo, o seguinte mostra uma solicitação para listar todas as execuções de fluxo de trabalho iniciadas entre dois pontos especificados no tempo, usando a notação Unix Time. 

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

## Exemplo de solicitação e resposta JSON do Amazon SWF
<a name="JSONMajorExample"></a>

O exemplo a seguir mostra uma solicitação ao Amazon SWF para obter uma descrição do domínio que criamos anteriormente. Em seguida, ele mostra a resposta do Amazon SWF. 

### Solicitação 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"}
```

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

Observe que o protocolo (`HTTP/1.1`) é seguido por um código de status (`200`). Um valor de código de `200` indica uma operação bem-sucedida. 

O Amazon SWF não serializa valores nulos. Se o analisador JSON estiver configurado para serializar valores nulos para solicitações, o Amazon SWF os ignorará. 

# Cálculo da assinatura HMAC-SHA para o Amazon SWF
<a name="HMACAuth-swf"></a>

Toda solicitação ao Amazon SWF deve ser autenticada. Eles assinam AWS SDKs automaticamente suas solicitações e gerenciam sua autenticação baseada em tokens. No entanto, se você quiser escrever suas próprias solicitações HTTP `POST`, precisará criar um valor `x-amzn-authorization` para o conteúdo HTTP `POST Header` como parte da autenticação da sua solicitação.

Para obter mais informações sobre cabeçalhos de formatação, consulte [Conteúdo de cabeçalho HTTP](UsingJSON-swf.md#HTTPHeader). Para a AWS SDK para Java implementação da assinatura da AWS versão 3, consulte a classe [ AWSSigner.java.](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java)

## Criação de uma assinatura de solicitação
<a name="AuthProcess"></a>

Antes de criar uma assinatura de solicitação HMAC-SHA, você deve obter suas credenciais da AWS (o ID de chave de acesso e a chave secreta).

**Importante**  
Você pode usar um SHA1 ou SHA256 para assinar suas solicitações. No entanto, certifique-se de usar o mesmo método por todo o processo de assinatura. O método escolhido deve corresponder ao valor do nome `Algorithm` no cabeçalho HTTP. 

### Para criar a assinatura de solicitação
<a name="swf-create-request-signature-steps"></a>

1. Crie uma forma canônica dos cabeçalhos de solicitação HTTP. A forma canônica do cabeçalho HTTP inclui o seguinte:
   + `host`
   + Qualquer elemento de cabeçalho que comece com `x-amz-`

   Para obter mais informações sobre os cabeçalhos incluídos, consulte [Conteúdo de cabeçalho HTTP](UsingJSON-swf.md#HTTPHeader).

   1. Para cada par de nome/valor de cabeçalho, converta o nome do cabeçalho (mas não o valor do cabeçalho) em letras minúsculas.

   1. Construa um mapa do nome do cabeçalho para valores de cabeçalho separados por vírgula.

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

      Para obter mais informações, consulte a [Seção 4.2 da RFC 2616](http://tools.ietf.org/html/rfc2616).

   1. Converta cada par de nome/valor de cabeçalho em uma string no formato `headerName:headerValue`. Remova todos os espaços em branco do início e do final de `headerName` e `headerValue`, sem espaços em cada lado dos dois pontos.

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

   1. Insira uma nova linha (`U+000A`) após cada string convertida, incluindo a última string.

   1. Classifique a coleção de strings convertidas em ordem alfabética, por nome de cabeçalho.

1. Crie um string-to-sign valor que inclua os seguintes itens:
   + Linha `1`: o método HTTP (`POST`), seguido por uma nova linha.
   + Linha `2`: o URI da solicitação (`/`), seguido por uma nova linha.
   + Linha `3`: uma string vazia seguida por uma nova linha.
**nota**  
Normalmente, a string de consulta aparece aqui, mas o Amazon SWF não usa uma string de consulta.
   + Linhas `4–n`: a string que representa os cabeçalhos de solicitação canônicos que você calculou na Etapa 1, seguida por uma nova linha. Essa nova linha cria uma linha em branco entre os cabeçalhos e o corpo da solicitação HTTP. Para obter mais informações, consulte [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html).
   + O corpo da solicitação, *não* seguido por uma nova linha.

1. Calcule o SHA1 resumo SHA256 ou resumo do string-to-sign valor. Use o mesmo método SHA por todo o processo.

1. Compute e codifique em Base64 o HMAC-SHA usando um SHA256 ou um SHA1 resumo (dependendo do método usado) do valor resultante da etapa anterior e da chave de acesso secreta temporária do Security Token Service usando a ação da AWS API. `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)`
**nota**  
O Amazon SWF espera um sinal de igual (`=`) no final do valor HMAC-SHA codificado em Base64. Se a sua rotina de codificação em Base64 não incluir o sinal de igual acrescentado, acrescente um ao final do valor.

   Para obter mais informações sobre o uso de credenciais de segurança temporárias com o Amazon SWF e AWS outros serviços, [AWS consulte Serviços que funcionam com o IAM no Guia](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html) do usuário *do IAM*.

1. Coloque o valor resultante como o valor do nome `Signature` no cabeçalho `x-amzn-authorization` da solicitação HTTP para o Amazon SWF.

1. O Amazon SWF verifica a solicitação e executa a operação especificada.