

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Envoi de demandes HTTP à Amazon SWF
<a name="UsingJSON-swf"></a>

Si vous n'utilisez pas l'un d'entre eux AWS SDKs, vous pouvez effectuer des opérations Amazon Simple Workflow Service (Amazon SWF) via HTTP à l'aide de la méthode de requête POST. La méthode POST nécessite que vous définissiez l'opération dans l'en-tête de la requête et que vous fournissiez les données de l'opération au format JSON dans le corps de la requête. 

## Contenu de l'en-tête HTTP
<a name="HTTPHeader"></a>

Amazon SWF requiert les informations suivantes dans l'en-tête d'une requête HTTP :
+ `host`Le point de terminaison Amazon SWF. 
+ `x-amz-date`Vous devez fournir l'horodatage dans l'`Date`en-tête HTTP ou dans le AWS `x-amz-date header` (certaines bibliothèques clientes HTTP ne vous permettent pas de définir l'`Date`en-tête). Lorsqu'un en-tête `x-amz-date` est présent, le système ignore tout en-tête `Date` lors de l'authentification de la demande.

  La date doit être spécifiée dans l'un des formats suivants, comme indiqué dans le RFC HTTP/1.1 :
  + Sun, 06 Nov 1994 08:49:37 GMT (RFC 822, mis à jour par RFC 1123)
  + Sunday, 06-Nov-94 08:49:37 GMT (RFC 850, rendu obsolète par RFC 1036)
  + Dim 6 nov 08:49:37 1994 (format asctime() ANSI C)
+ `x-amzn-authorization` Les paramètres de requête signés au format :

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

  `AWS3`— Il s'agit d'une balise AWS spécifique à l'implémentation qui indique la version d'authentification utilisée pour signer la demande (actuellement, cette valeur est toujours valable pour Amazon SWF). `AWS3`

  `AWSAccessKeyId`— L'identifiant de votre clé d' AWS accès.

  `Algorithm`— L'algorithme utilisé pour créer la valeur HMAC-SHA de string-to-sign, telle que ou. `HmacSHA256` `HmacSHA1`

  `Signature`— Base64 (Algorithme ( StringToSign, SigningKey )). Pour en savoir plus, consultez la section [Calcul de la signature HMAC-SHA pour Amazon SWF](HMACAuth-swf.md).

  `SignedHeaders`— (Facultatif) Le cas échéant, doit contenir une liste de tous les en-têtes HTTP utilisés dans le calcul canonisé HttpHeaders . Vous devez utiliser un point virgule (;) (caractère ASCII 59) pour délimiter les valeurs de la liste. 
+  `x-amz-target`— Le service de destination de la demande et le fonctionnement des données, au format 

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

   Par exemple, `com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain` 
+ `content-type`— Le type doit spécifier le JSON et le jeu de caractères, comme `application/json; charset=UTF-8`

 Voici un exemple d'en-tête de requête HTTP utilisé pour créer un domaine. 

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

Voici un exemple de la réponse HTTP correspondante. 

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

## Contenu du corps HTTP
<a name="JSONschema"></a>

Le corps d'une requête HTTP contient les données de l'opération spécifiée dans l'en-tête de la requête HTTP. Utilisez le format de données JSON pour transmettre simultanément les valeurs de données et la structure de données. Pour imbriquer des éléments dans d'autres, utilisez la notation d'accolade. Par exemple, ce qui suit montre une demande visant à répertorier toutes les exécutions de flux de travail qui ont débuté entre deux moments spécifiés, à l'aide de la notation horaire Unix. 

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

## Exemple de demande et de réponse Amazon SWF JSON
<a name="JSONMajorExample"></a>

L'exemple suivant montre une demande adressée à Amazon SWF pour obtenir une description du domaine que nous avons créé précédemment. Il affiche ensuite la réponse Amazon SWF. 

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

### Réponse d'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"}
}
```

Notez que le protocole (`HTTP/1.1`) est suivi d'un code d'état (`200`). La valeur `200` indique une opération réussie. 

Amazon SWF ne sérialise pas les valeurs nulles. Si votre analyseur JSON est configuré pour sérialiser les valeurs nulles pour les requêtes, Amazon SWF les ignore. 

# Calcul de la signature HMAC-SHA pour Amazon SWF
<a name="HMACAuth-swf"></a>

Chaque demande adressée à Amazon SWF doit être authentifiée. Ils signent AWS SDKs automatiquement vos demandes et gèrent votre authentification basée sur des jetons. Toutefois, si vous souhaitez écrire vos propres demandes HTTP `POST`, vous devez créer une valeur `x-amzn-authorization` pour le contenu de l'en-tête HTTP `POST Header` dans le cadre de l'authentification de votre demande.

Pour en savoir plus sur la mise en forme de ces en-têtes, consultez la section [Contenu de l'en-tête HTTP](UsingJSON-swf.md#HTTPHeader). Pour l' AWS SDK pour Java implémentation de la signature de AWS la version 3, consultez la classe [ AWSSigner.java.](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java)

## Création d'une signature de demande
<a name="AuthProcess"></a>

Avant de créer une signature de demande HMAC-SHA, vous devez obtenir vos informations d'identification AWS (ID de clé d'accès et clé secrète).

**Important**  
Vous pouvez utiliser l'un SHA1 ou SHA256 l'autre ou pour signer vos demandes. Cependant, veillez à utiliser la même méthode pour tout le processus de signature. La méthode que vous choisissez doit correspondre à la valeur du nom `Algorithm` de l'en-tête HTTP. 

### Pour créer la signature de demande
<a name="swf-create-request-signature-steps"></a>

1. Créez une forme canonique des en-têtes de requête HTTP. La forme canonique de l'en-tête HTTP comprend les éléments suivants :
   + `host`
   + N'importe quel élément d'en-tête commençant par `x-amz-`

   Pour en savoir plus sur les en-têtes inclus, consultez la section [Contenu de l'en-tête HTTP](UsingJSON-swf.md#HTTPHeader).

   1. Pour chaque paire nom-valeur d'en-tête, convertissez le nom d'en-tête (pas la valeur d'en-tête) en minuscules.

   1. Combinez les champs d'en-tête avec le même nom dans une paire « nom d'en-tête:liste de valeurs séparées par des virgules ».

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

      Pour en savoir plus, consultez la [section 4.2 sur la page RFC 2616](http://tools.ietf.org/html/rfc2616).

   1. Convertissez chaque paire nom-valeur d'en-tête en chaîne au format `headerName:headerValue`. Supprimez les espaces de début et de fin des valeurs `headerName` et `headerValue`, et n'utilisez aucun espace de chaque côté des deux points.

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

   1. Insérez une nouvelle ligne (`U+000A`) après chaque chaîne convertie, y compris la dernière chaîne.

   1. Triez la collection de chaînes converties dans l'ordre alphabétique par nom d'en-tête.

1. Créez une string-to-sign valeur qui inclut les éléments suivants :
   + Ligne `1` : la méthode HTTP (`POST`), suivie d'une nouvelle ligne.
   + Ligne `2` : l'URI de la demande (`/`), suivi d'une nouvelle ligne.
   + Ligne `3` : une chaîne vide suivie d'une nouvelle ligne.
**Note**  
Généralement, la chaîne de requête apparaît ici, mais Amazon SWF n'utilise pas de chaîne de requête.
   + Ligne `4–n` : la chaîne représentant les en-têtes de demandes canoniques calculés à l'étape 1, suivie d'une nouvelle ligne. Cette nouvelle ligne crée une ligne vide entre les en-têtes et le corps de la demande HTTP. Pour plus d'informations, consultez [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html).
   + Le corps de la demande, *non* suivie d'une nouvelle ligne.

1. Calculez SHA256 SHA1 ou résumez la string-to-sign valeur. Utilisez la même méthode SHA tout au long du processus.

1. Calculez et encodez le HMAC-SHA en utilisant un résumé SHA256 ou un SHA1 résumé (selon la méthode que vous avez utilisée) de la valeur résultant de l'étape précédente et de la clé d'accès secrète temporaire du AWS Security Token Service à l'aide de l'action API. `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)`
**Note**  
Amazon SWF attend un signe égal (`=`) à la fin de la valeur HMAC-SHA codée en Base64. Si votre routine d'encodage Base64 n'inclut pas l'ajout de signes égal, insérez-en un à la fin de la valeur.

   Pour plus d'informations sur l'utilisation d'informations d'identification de sécurité temporaires avec Amazon SWF et d'autres AWS services, consultez AWS la section Services That [Work with IAM dans le guide de l'utilisateur *IAM*](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html).

1. Placez la valeur résultante comme valeur du `Signature` nom dans l'`x-amzn-authorization`en-tête de la requête HTTP envoyée à Amazon SWF.

1. Amazon SWF vérifie la demande et exécute l'opération spécifiée.