

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Invio di richieste HTTP ad Amazon SWF
<a name="UsingJSON-swf"></a>

Se non utilizzi uno di questi AWS SDKs, puoi eseguire operazioni di Amazon Simple Workflow Service (Amazon SWF) su HTTP utilizzando il metodo di richiesta POST. Per utilizzare il metodo POST devi specificare l'operazione nell'intestazione della richiesta e fornire i dati per l'operazione nel formato JSON nel corpo della richiesta. 

## Contenuti nell'intestazione HTTP
<a name="HTTPHeader"></a>

Amazon SWF richiede le seguenti informazioni nell'intestazione di una richiesta HTTP:
+ `host`L'endpoint Amazon SWF. 
+ `x-amz-date`È necessario fornire il timestamp nell'`Date`intestazione HTTP o nel AWS `x-amz-date header` (alcune librerie client HTTP non consentono di impostare l'intestazione). `Date` Quando un'intestazione `x-amz-date` è presente, il sistema ignora qualsiasi intestazione `Date` all'autenticazione della richiesta.

  La data deve essere specificata in uno dei seguenti tre formati, come indicato nel protocollo HTTP/1.1 RFC:
  + Dom, 06 novembre 1994 08:49:37 GMT (RFC 822, aggiornato da RFC 1123)
  + Domenica, 06-Nov-94 08:49:37 GMT (RFC 850, reso obsoleto da RFC 1036)
  + Dom Nov 6 08:49:37 1994 (Formato asctime() ANSI C)
+ `x-amzn-authorization` I parametri della richiesta firmata nel formato:

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

  `AWS3`— Si tratta di un tag AWS specifico dell'implementazione che indica la versione di autenticazione utilizzata per firmare la richiesta (attualmente, per Amazon SWF questo valore è sempre). `AWS3`

  `AWSAccessKeyId`— L'ID della tua chiave di accesso. AWS 

  `Algorithm`— L'algoritmo utilizzato per creare il valore HMAC-SHA di string-to-sign, ad esempio o. `HmacSHA256` `HmacSHA1`

  `Signature`— Base64 (Algorithm (,)). StringToSign SigningKey Per informazioni dettagliate, consulta [Calcolo della firma HMAC-SHA per Amazon SWF](HMACAuth-swf.md)

  `SignedHeaders`— (Facoltativo) Se presente, deve contenere un elenco di tutte le intestazioni HTTP utilizzate nel calcolo canonicalizzato. HttpHeaders Un singolo punto e virgola (;) (carattere ASCII 59) deve essere utilizzato come delimitatore per i valori dell'elenco. 
+  `x-amz-target`— Il servizio di destinazione della richiesta e l'operazione per i dati, nel formato 

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

   Ad esempio, `com.amazonaws.swf.service.model.SimpleWorkflowService.RegisterDomain` 
+ `content-type`— Il tipo deve specificare JSON e il set di caratteri, come `application/json; charset=UTF-8`

 Il seguente è un esempio di intestazione per una richiesta HTTP per la creazione di 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"}
```

Di seguito è riportato un esempio della risposta HTTP corrispondente. 

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

## Contenuto del corpo HTTP
<a name="JSONschema"></a>

Il corpo di una richiesta HTTP contiene i dati per l'operazione specificata nell'intestazione di una richiesta HTTP. Utilizza il formato dati JSON per trasmettere simultaneamente i valori dei dati e la struttura corrispondente. Gli elementi possono essere annidati all'interno di altri elementi utilizzando la notazione parentesi. Ad esempio, quanto segue mostra una richiesta per elencare tutte le esecuzioni del flusso di lavoro iniziate tra due momenti specifici, utilizzando la notazione Unix Time. 

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

## Esempio di richiesta e risposta JSON di Amazon SWF
<a name="JSONMajorExample"></a>

L'esempio seguente mostra una richiesta ad Amazon SWF per una descrizione del dominio che abbiamo creato in precedenza. Quindi mostra la risposta di Amazon SWF. 

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

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

Il protocollo (`HTTP/1.1`) è seguito dal codice di stato (`200`). Un valore del codice di `200` indica un'operazione riuscita. 

Amazon SWF non serializza valori nulli. Se il parser JSON è impostato per serializzare valori nulli per le richieste, Amazon SWF li ignora. 

# Calcolo della firma HMAC-SHA per Amazon SWF
<a name="HMACAuth-swf"></a>

Ogni richiesta ad Amazon SWF deve essere autenticata. Firma AWS SDKs automaticamente le tue richieste e gestisci l'autenticazione basata su token. Tuttavia, se vuoi scrivere una tua richiesta HTTP `POST`, devi creare un valore `x-amzn-authorization` per i contenuti HTTP `POST Header` come parte dell'autenticazione della richiesta.

Per maggiori informazioni sulla formattazione delle intestazioni, consulta [Contenuti nell'intestazione HTTP](UsingJSON-swf.md#HTTPHeader). Per l' AWS SDK per Java implementazione della firma della AWS versione 3, consultate la [ AWSSignerclasse.java.](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java)

## Creazione di una firma di richiesta
<a name="AuthProcess"></a>

Prima di creare una firma di richiesta HMAC-SHA, devi ricevere le credenziali AWS (l'ID chiave di accesso e la chiave segreta).

**Importante**  
Puoi usare entrambi SHA1 o SHA256 per firmare le tue richieste. Verifica comunque di utilizzare lo stesso metodo in tutto il processo di firma. Il metodo scelto deve corrispondere al valore del nome `Algorithm` nell'intestazione HTTP. 

### Per creare la firma di richiesta
<a name="swf-create-request-signature-steps"></a>

1. Crea un modello canonico delle intestazioni di richiesta HTTP. Il formato canonico dell'intestazione HTTP comprende quanto segue:
   + `host`
   + Qualunque elemento dell'intestazione che inizi con `x-amz-`

   Per ulteriori informazioni sulle intestazioni incluse, consulta [Contenuti nell'intestazione HTTP](UsingJSON-swf.md#HTTPHeader).

   1. Per ogni coppia nome-valore dell'intestazione, converti il nome dell'intestazione (ma non il valore) in caratteri minuscoli.

   1. Crea una mappa del nome dell'intestazione con i valori separati da virgole.

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

      Per maggiori informazioni, consulta la [sezione 4.2 del protocollo RFC 2616](http://tools.ietf.org/html/rfc2616).

   1. Per ogni coppia nome-valore dell'intestazione, converti la coppia nome-valore in una stringa nel formato `headerName:headerValue`. Elimina gli spazi all'inizio e alla fine del `headerName` e del `headerValue`, senza spazi ai lati dei due punti.

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

   1. Inserisci una nuova riga (`U+000A`) dopo ogni stringa convertita, compresa l'ultima.

   1. Disponi la raccolta delle stringhe convertite in ordine alfabetico in base al nome dell'intestazione.

1. Crea un string-to-sign valore che includa i seguenti elementi:
   + Riga `1`: il metodo HTTP (`POST`), seguito da una nuova riga.
   + Riga `2`: l'URI della richiesta (`/`), seguito da una nuova riga.
   + Riga `3`: una stringa vuota seguita da una nuova riga.
**Nota**  
In genere, la stringa di query viene visualizzata qui, ma Amazon SWF non utilizza una stringa di query.
   + Righe `4–n`: la stringa che rappresenta le intestazioni di richiesta in forma canonica calcolate nella Fase 1, seguita da una nuova riga. Questa nuova riga crea una riga vuota tra le intestazioni e il corpo della richiesta HTTP. Per ulteriori informazioni, consulta il protocollo [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html).
   + Il corpo della richiesta, *non* seguito da una nuova riga.

1. Calcola SHA256 o SHA1 digest il valore. string-to-sign Utilizza lo stesso metodo SHA in tutto il processo.

1. Calcola e codifica in Base64 l'HMAC-SHA utilizzando un digest SHA256 o un SHA1 digest (a seconda del metodo utilizzato) del valore risultante dal passaggio precedente e la chiave di accesso segreta temporanea del Security Token Service utilizzando l'azione API. AWS `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)`
**Nota**  
Amazon SWF prevede un segno di uguaglianza (`=`) alla fine del valore HMAC-SHA con codifica Base64. Se la tua routine di codifica in base 64 non comprende l'aggiunta di segni uguale, aggiungine uno alla fine del valore.

   Per ulteriori informazioni sull'utilizzo di credenziali di sicurezza temporanee con Amazon SWF e AWS altri servizi, [AWS consulta Services That Work with](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html) IAM nella IAM User *Guide*.

1. Inserisci il valore risultante come valore per il `Signature` nome nell'`x-amzn-authorization`intestazione della richiesta HTTP ad Amazon SWF.

1. Amazon SWF verifica la richiesta ed esegue l'operazione specificata.