Impostare una risposta del gateway per un'API REST utilizzando la console API Gateway - Amazon API Gateway

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à.

Impostare una risposta del gateway per un'API REST utilizzando la console API Gateway

Per configurare una risposta del gateway mediante la console API Gateway
  1. Accedere alla console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway.

  2. Scegliere una REST API.

  3. Nel riquadro di navigazione principale di Gateway API, scegli Risposte di Gateway.

  4. Scegli un tipo di risposta, quindi scegli Modifica. In questa procedura guidata, utilizziamo Token di autenticazione mancante come esempio.

  5. Ora puoi cambiare il valore dell'opzione Codice di stato generato da Gateway API per restituire un codice di stato diverso che soddisfi i requisiti dell'API. In questo esempio, la personalizzazione cambia il codice di stato da quello predefinito (403) al codice 404, poiché questo messaggio di errore viene ricevuto quando un client chiama una risorsa non valida o non supportata che può essere considerata come non trovata.

  6. Per tornare alle intestazioni personalizzate, seleziona Aggiungi intestazione della risposta in Intestazioni di risposta. A scopo illustrativo, aggiungiamo le seguenti intestazioni personalizzate:

    Access-Control-Allow-Origin:'a.b.c' x-request-id:method.request.header.x-amzn-RequestId x-request-path:method.request.path.petId x-request-query:method.request.querystring.q

    Nelle precedenti mappature delle intestazioni, viene mappato un nome di dominio statico ('a.b.c') all'intestazione Allow-Control-Allow-Origin per consentire a CORS di accedere all'API; l'intestazione della richiesta di input di x-amzn-RequestId viene mappata a request-id nella risposta; la variabile di percorso petId della richiesta in entrata viene mappata all'intestazione request-path nella risposta, mentre il parametro di query q della richiesta originale viene mappato all'intestazione request-query della risposta.

  7. In Modelli di risposta, non modificare application/json in Tipo di contenuto e immetti il seguente modello di mappatura del corpo nell'editor Corpo modello:

    { "message":"$context.error.messageString", "type": "$context.error.responseType", "statusCode": "'404'", "stage": "$context.stage", "resourcePath": "$context.resourcePath", "stageVariables.a": "$stageVariables.a" }

    Questo modello mostra come mappare le proprietà $context e $stageVariables alle proprietà del corpo di risposta del gateway.

  8. Seleziona Salvataggio delle modifiche.

  9. Distribuzione dell'API in una fase nuova o esistente.

Esegui un test della risposta del gateway chiamando il seguente comando CURL, supponendo che l'URL di richiamo del metodo API corrispondente sia https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}:

curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1

Poiché il parametro aggiuntivo della stringa di query q=1 non è compatibile con l'API, viene restituito un errore dalla risposta del gateway specificata. Dovresti visualizzare una risposta del gateway simile alla seguente:

> GET /custErr/pets/5?q=1 HTTP/1.1 Host: o81lxisefl.execute-api.us-east-1.amazonaws.com User-Agent: curl/7.51.0 Accept: */* HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 334 Connection: keep-alive Date: Tue, 02 May 2017 03:15:47 GMT x-amzn-RequestId: 123344566 Access-Control-Allow-Origin: a.b.c x-amzn-ErrorType: MissingAuthenticationTokenException header-1: static x-request-query: 1 x-request-path: 5 X-Cache: Error from cloudfront Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront) X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA== { "message":"Missing Authentication Token", "type": MISSING_AUTHENTICATION_TOKEN, "statusCode": '404', "stage": custErr, "resourcePath": /pets/{petId}, "stageVariables.a": a }

Il precedente esempio presuppone che il back-end dell'API sia Pet Store e l'API abbia una variabile di fase, a, definita.