

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# API Gateway 中的內容類型轉換
<a name="api-gateway-payload-encodings-workflow"></a>

 您的 API 的 `binaryMediaTypes`、用戶端請求中的標頭，以及整合 `contentHandling` 屬性的組合將決定 API Gateway 編碼有效承載的方式。

下表顯示 API Gateway 如何轉換請求的 `Content-Type` 標頭、[RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) 資源的 `binaryMediaTypes` 清單與 [Integration](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) 資源的 `contentHandling` 屬性值之特定組態的請求酬載。


| 方法請求承載 | 請求 `Content-Type` 標頭 | `binaryMediaTypes` | `contentHandling` | 整合請求承載 | 
| --- | --- | --- | --- | --- | 
| 文字資料 | 任何資料類型 | 未定義 | 未定義 | UTF8 編碼字串 | 
| 文字資料 | 任何資料類型 | 未定義 | CONVERT\$1TO\$1BINARY | Base64 解碼的二進位 Blob | 
| 文字資料 | 任何資料類型 | 未定義 | CONVERT\$1TO\$1TEXT | UTF8 編碼字串 | 
| 文字資料 | 文字資料類型 | 設定相符媒體類型 | 未定義 | 文字資料 | 
| 文字資料 | 文字資料類型 | 設定相符媒體類型 | CONVERT\$1TO\$1BINARY | Base64 解碼的二進位 Blob | 
| 文字資料 | 文字資料類型 | 設定相符媒體類型 | CONVERT\$1TO\$1TEXT | 文字資料 | 
| 二進位資料 | 二進位資料類型 | 設定相符媒體類型 | 未定義 | 二進位資料 | 
| 二進位資料 | 二進位資料類型 | 設定相符媒體類型 | CONVERT\$1TO\$1BINARY | 二進位資料 | 
| 二進位資料 | 二進位資料類型 | 設定相符媒體類型 | CONVERT\$1TO\$1TEXT | Base64 編碼字串 | 

下表顯示 API Gateway 如何轉換請求的 `Accept` 標頭、[RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) 資源的 `binaryMediaTypes` 清單與 [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html) 資源的 `contentHandling` 屬性值之特定組態的回應酬載。

**重要**  
 當請求的 `Accept` 標頭中包含多個媒體類型時，API Gateway 只會採用第一個 `Accept` 媒體類型。如果您無法控制 `Accept` 媒體類型的順序，而且二進位內容的媒體類型不是清單中的第一個類型，您可以在 API 的 `binaryMediaTypes` 清單中新增第一個 `Accept` 媒體類型。API Gateway 將以二進位處理此清單中的所有內容類型。  
例如，若要在瀏覽器中使用 `<img>` 元素來傳送 JPEG 檔案，瀏覽器可能會在請求中傳送 `Accept:image/webp,image/*,*/*;q=0.8`。透過將 `image/webp` 新增至 `binaryMediaTypes` 清單，端點就能收到二進位格式的 JPEG 檔案。


| 整合回應承載 | 請求 `Accept` 標頭 | `binaryMediaTypes` | `contentHandling` | 方法回應承載 | 
| --- | --- | --- | --- | --- | 
| 文字或二進位資料 | 文字類型 | 未定義 | 未定義 | UTF8 編碼字串 | 
| 文字或二進位資料 | 文字類型 | 未定義 | CONVERT\$1TO\$1BINARY | Base64 解碼的 Blob | 
| 文字或二進位資料 | 文字類型 | 未定義 | CONVERT\$1TO\$1TEXT | UTF8 編碼字串 | 
| 文字資料 | 文字類型 | 設定相符媒體類型 | 未定義 | 文字資料 | 
| 文字資料 | 文字類型 | 設定相符媒體類型 | CONVERT\$1TO\$1BINARY | Base64 解碼的 Blob | 
| 文字資料 | 文字類型 | 設定相符媒體類型 | CONVERT\$1TO\$1TEXT | UTF8 編碼字串 | 
| 文字資料 | 二進位類型 | 設定相符媒體類型 | 未定義 | Base64 解碼的 Blob | 
| 文字資料 | 二進位類型 | 設定相符媒體類型 | CONVERT\$1TO\$1BINARY | Base64 解碼的 Blob | 
| 文字資料 | 二進位類型 | 設定相符媒體類型 | CONVERT\$1TO\$1TEXT | UTF8 編碼字串 | 
| 二進位資料 | 文字類型 | 設定相符媒體類型 | 未定義 | Base64 編碼字串 | 
| 二進位資料 | 文字類型 | 設定相符媒體類型 | CONVERT\$1TO\$1BINARY | 二進位資料 | 
| 二進位資料 | 文字類型 | 設定相符媒體類型 | CONVERT\$1TO\$1TEXT | Base64 編碼字串 | 
| 二進位資料 | 二進位類型 | 設定相符媒體類型 | 未定義 | 二進位資料 | 
| 二進位資料 | 二進位類型 | 設定相符媒體類型 | CONVERT\$1TO\$1BINARY | 二進位資料 | 
| 二進位資料 | 二進位類型 | 設定相符媒體類型 | CONVERT\$1TO\$1TEXT | Base64 編碼字串 | 

將文字承載轉換成二進位 Blob 時，API Gateway 會假設文字資料是 Base64 編碼字串，並將二進位資料輸出為 Base64 解碼的 Blob。如果轉換失敗，它會傳回 `500` 回應，表示 API 組態錯誤。您不會為這類轉換提供對應範本，但您必須在 API 上啟用[傳遞行為](integration-passthrough-behaviors.md)。

將二進位承載轉換成文字字串時，API Gateway 一律會在二進位資料上套用 Base64 編碼。您可以為這類承載定義對應範本，但只能透過 `$input.body` 存取對應範本中的 Base64 編碼字串，如下列範例對應範本摘要所示。

```
{   
    "data": "$input.body"
}
```

若要傳遞二進位承載而不進行任何修改，您必須在 API 上啟用[傳遞行為](integration-passthrough-behaviors.md)。