

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Realizar solicitudes HTTP a Amazon SWF
<a name="UsingJSON-swf"></a>

Si no utiliza ninguno de los AWS SDKs, puede realizar operaciones de Amazon Simple Workflow Service (Amazon SWF) a través de HTTP mediante el método de solicitud POST. El método POST requiere que especifique la operación en el encabezado de la solicitud y proporcione los datos para la operación en formato JSON en el cuerpo de la solicitud. 

## Contenido de los encabezados HTTP
<a name="HTTPHeader"></a>

Amazon SWF requiere que figure la siguiente información en el encabezado de una solicitud HTTP:
+ `host`: el punto de conexión de Amazon SWF. 
+ `x-amz-date`Debe proporcionar la marca de tiempo en el `Date` encabezado HTTP o en el AWS `x-amz-date header` (algunas bibliotecas de clientes HTTP no le permiten configurar el `Date` encabezado). Cuando hay un encabezado `x-amz-date` presente, el sistema hace caso omiso de cualquier encabezado `Date` al autenticar la solicitud.

  La fecha debe especificarse en uno de los tres formatos siguientes, como se especifica en HTTP/1.1 RFC:
  + Sun, 06 Nov 1994 08:49:37 GMT (RFC 822, actualizado por RFC 1123)
  + Sunday, 06-Nov-94 08:49:37 GMT (RFC 850, obsoleto en RFC 1036)
  + Sun Nov 6 08:49:37 1994 (formato asctime() de ANSI C)
+ `x-amzn-authorization`: los parámetros de solicitud firmados en el formato:

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

  `AWS3`— Se trata de una etiqueta AWS específica de la implementación que indica la versión de autenticación utilizada para firmar la solicitud (actualmente, en Amazon SWF, este valor es siempre). `AWS3`

  `AWSAccessKeyId`— Su AWS ID de clave de acceso.

  `Algorithm`— El algoritmo utilizado para crear el valor HMAC-SHA del string-to-sign, como o. `HmacSHA256` `HmacSHA1`

  `Signature`— Base64 (algoritmo (,)) StringToSign. SigningKey Para obtener más información, consulte [Cálculo de la firma HMAC-SHA para Amazon SWF](HMACAuth-swf.md).

  `SignedHeaders`— (Opcional) Si está presente, debe contener una lista de todos los encabezados HTTP utilizados en el cálculo HttpHeaders canonicalizado. Debe utilizar un solo punto y coma (;) (carácter ASCII 59) para delimitar los valores de la lista. 
+  `x-amz-target`: el servicio de destino de la solicitud y la operación de los datos, en el formato: 

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

   Por ejemplo, `com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain` 
+ `content-type`: el tipo debe especificar JSON y el conjunto de caracteres, como `application/json; charset=UTF-8`

 A continuación se muestra un ejemplo de un encabezado en una solicitud HTTP para crear un dominio. 

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

Este es un ejemplo de la respuesta HTTP correspondiente. 

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

## Contenido de cuerpo HTTP
<a name="JSONschema"></a>

El cuerpo de una solicitud HTTP contiene los datos de la operación especificada en el encabezado de la solicitud HTTP. Use el formato de datos JSON para transmitir los valores de los datos y la estructura de datos, de forma simultánea. Los elementos se pueden anidar en otros elementos mediante la notación de corchete. Por ejemplo, a continuación se muestra una solicitud para enumerar todas las ejecuciones de flujos de trabajo que se iniciaron entre dos puntos específicos en el tiempo (mediante la anotación horaria de Unix). 

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

## Ejemplo de solicitud y respuesta JSON de Amazon SWF
<a name="JSONMajorExample"></a>

El siguiente ejemplo muestra una solicitud a Amazon SWF para una descripción del dominio que hemos creado previamente. A continuación se muestra la respuesta de Amazon SWF. 

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

### Respuesta de 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 el protocolo (`HTTP/1.1`) va seguido de un código de estado (`200`). Un valor de código de `200` indica el éxito de la operación. 

Amazon SWF no serializa valores “null”. Si su analizador de JSON está configurado para serializar valores “null” para las solicitudes, Amazon SWF no los tendrá en cuenta. 

# Cálculo de la firma HMAC-SHA para Amazon SWF
<a name="HMACAuth-swf"></a>

Cada solicitud enviada a Amazon SWF se debe autenticar. Firman AWS SDKs automáticamente sus solicitudes y administran su autenticación basada en tokens. Sin embargo, si desea escribir sus propias solicitudes HTTP `POST`, debe crear un valor `x-amzn-authorization` para el contenido HTTP `POST Header` como para de la autenticación de su solicitud.

Para obtener más información sobre cómo formatear los encabezados, consulte [Contenido de los encabezados HTTP](UsingJSON-swf.md#HTTPHeader). Para ver la AWS SDK para Java implementación de la firma de la AWS versión 3, consulta la [ AWSSignerclase.java.](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java)

## Creación de una firma de solicitud
<a name="AuthProcess"></a>

Antes de crear una firma de solicitud HMAC-SHA, debe obtener sus credenciales de AWS (el ID de clave de acceso y la clave secreta).

**importante**  
Puede usar cualquiera de las dos SHA1 opciones SHA256 para firmar sus solicitudes. Sin embargo, asegúrese de utilizar el mismo método para todo el proceso de firma. El método que elija tiene que corresponder al valor del nombre de `Algorithm` en el encabezado HTTP. 

### Para crear la firma de solicitud
<a name="swf-create-request-signature-steps"></a>

1. Cree una forma canónica de los encabezados de solicitud HTTP. La forma canónica del encabezado de HTTP incluye lo siguiente:
   + `host`
   + Cualquier elemento del encabezado que empiece por `x-amz-`

   Para obtener más información sobre los encabezados incluidos, consulte [Contenido de los encabezados HTTP](UsingJSON-swf.md#HTTPHeader).

   1. Para cada par de nombre-valor del encabezado, convierta el nombre del encabezado (pero no el valor del encabezado) en minúsculas.

   1. Cree un mapa que exprese la relación entre el nombre del encabezado y los valores del encabezado separados por comas.

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

      Para obtener más información, consulte la [sección 4.2 de RFC 2616](http://tools.ietf.org/html/rfc2616).

   1. Para cada par de nombre-valor del encabezado, convierta el par de nombre-valor en una cadena en el formato `headerName:headerValue`. Suprima los espacios en blanco del principio y del fin de `headerName` y `headerValue`, sin espacios a cada lado de los dos puntos.

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

   1. Inserte una nueva línea (`U+000A`) después de cada cadena convertida, incluida la última cadena.

   1. Ordene la colección de cadenas convertidas alfabéticamente, por nombre de encabezado.

1. Cree un string-to-sign valor que incluya los siguientes elementos:
   + Línea `1`: el método HTTP (`POST`), seguido de una nueva línea.
   + Línea `2`: el URI de la solicitud (`/`), seguido de una nueva línea.
   + Línea `3`: una cadena vacía seguida de una nueva línea.
**nota**  
Normalmente, la cadena de consulta aparece aquí, pero Amazon SWF no utiliza ninguna cadena de consulta.
   + Líneas `4–n`: la cadena que representa los encabezados de la solicitud en formato canónico calculados en el Paso 1, seguida de una nueva línea. Esta nueva línea crea una línea en blanco entre los encabezados y el cuerpo de la solicitud HTTP. Para obtener más información, consulte [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html).
   + El cuerpo de la solicitud, *no* seguido de una nueva línea.

1. Calcule el SHA1 resumen SHA256 o el resumen del string-to-sign valor. Utilice el mismo método SHA en todo el proceso.

1. Calcule y codifique en Base64 el HMAC-SHA utilizando un resumen SHA256 o un SHA1 resumen (según el método que haya utilizado) del valor resultante del paso anterior y la clave de acceso secreta temporal del servicio de token de AWS seguridad mediante la acción de la API. `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)`
**nota**  
Amazon SWF requiere un signo igual (`=`) al final del valor HMAC-SHA codificado en Base64. Si su rutina de codificación Base64 no incluye el signo de igual al final, inserte uno al final del valor.

   Para obtener más información sobre el uso de credenciales de seguridad temporales con Amazon SWF y otros AWS servicios, consulte [AWS Servicios que funcionan con IAM en la Guía del usuario de *IAM*](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html).

1. Coloque el valor resultante como el valor para el nombre `Signature` en el encabezado `x-amzn-authorization` de la solicitud HTTP enviada a Amazon SWF.

1. Amazon SWF comprueba la solicitud y realiza la operación especificada.