

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kompresi muatan untuk REST APIs di API Gateway
<a name="api-gateway-gzip-compression-decompression"></a>

 API Gateway memungkinkan klien Anda memanggil API Anda dengan muatan terkompresi dengan menggunakan salah satu pengkodean [konten yang didukung](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). Secara default, API Gateway mendukung dekompresi payload permintaan metode. Namun, Anda harus mengonfigurasi API Anda untuk mengaktifkan kompresi payload respons metode. 

 Untuk mengaktifkan kompresi pada [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html), setel [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#minimumCompressionSize](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#minimumCompressionSize)properti ke bilangan bulat non-negatif antara 0 dan 10485760 (10M byte) saat Anda membuat API atau setelah Anda membuat API. Untuk menonaktifkan kompresi pada API, atur `minimumCompressionSize` ke null atau hapus sama sekali. Anda dapat mengaktifkan atau menonaktifkan kompresi untuk API dengan menggunakan konsol API Gateway, API AWS CLI, atau API Gateway REST API. 

Jika Anda ingin kompresi diterapkan pada muatan dengan ukuran berapa pun, atur `minimumCompressionSize` nilainya ke nol. Namun, mengompresi data dengan ukuran kecil sebenarnya dapat meningkatkan ukuran data akhir. Selain itu, kompresi di API Gateway dan dekompresi di klien dapat meningkatkan latensi keseluruhan dan membutuhkan lebih banyak waktu komputasi. Anda harus menjalankan kasus pengujian terhadap API Anda untuk menentukan nilai optimal.

Klien dapat mengirimkan permintaan API dengan muatan terkompresi dan `Content-Encoding` header yang sesuai untuk API Gateway untuk mendekompresi dan menerapkan templat pemetaan yang berlaku, sebelum meneruskan permintaan ke titik akhir integrasi. Setelah kompresi diaktifkan dan API diterapkan, klien dapat menerima respons API dengan muatan terkompresi jika menentukan `Accept-Encoding` header yang sesuai dalam permintaan metode. 

Saat titik akhir integrasi mengharapkan dan mengembalikan muatan JSON yang tidak terkompresi, templat pemetaan apa pun yang dikonfigurasi untuk muatan JSON yang tidak terkompresi berlaku untuk muatan terkompresi. Untuk payload permintaan metode terkompresi, API Gateway mendekompresi payload, menerapkan template pemetaan, dan meneruskan permintaan yang dipetakan ke titik akhir integrasi. Untuk payload respons integrasi yang tidak terkompresi, API Gateway menerapkan template pemetaan, memampatkan payload yang dipetakan, dan mengembalikan payload terkompresi ke klien. 

**Topics**
+ [Aktifkan kompresi payload untuk API di API Gateway](api-gateway-enable-compression.md)
+ [Panggil metode API dengan payload terkompresi di API Gateway](api-gateway-make-request-with-compressed-payload.md)
+ [Menerima respons API dengan payload terkompresi di API Gateway](api-gateway-receive-response-with-compressed-payload.md)

# Aktifkan kompresi payload untuk API di API Gateway
<a name="api-gateway-enable-compression"></a>

Anda dapat mengaktifkan kompresi untuk API menggunakan konsol API Gateway, the AWS CLI, atau AWS SDK.

Untuk API yang ada, Anda harus menerapkan API setelah mengaktifkan kompresi agar perubahan diterapkan. Untuk API baru, Anda dapat menerapkan API setelah penyiapan API selesai.

**catatan**  
Pengkodean konten dengan prioritas tertinggi harus didukung oleh API Gateway. Jika tidak, kompresi tidak diterapkan pada muatan respons.

**Topics**
+ [Mengaktifkan kompresi payload untuk API menggunakan konsol API Gateway](#api-gateway-enable-compression-console)
+ [Aktifkan kompresi payload untuk API menggunakan AWS CLI](#api-gateway-enable-compression-cli)
+ [Pengkodean konten yang didukung oleh API Gateway](#api-gateway-supported-content-encodings)

## Mengaktifkan kompresi payload untuk API menggunakan konsol API Gateway
<a name="api-gateway-enable-compression-console"></a>

Prosedur berikut menjelaskan cara mengaktifkan kompresi payload untuk API. 

**Untuk mengaktifkan kompresi payload dengan menggunakan konsol API Gateway**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API yang sudah ada atau buat yang baru.

1. Di panel navigasi utama, pilih **pengaturan API**. 

1. Di bagian **detail API**, pilih **Edit**.

1. Aktifkan **pengkodean konten** untuk mengaktifkan kompresi muatan. Untuk **ukuran tubuh Minimum**, masukkan angka untuk ukuran kompresi minimum (dalam byte). Untuk mematikan kompresi, matikan opsi **Pengkodean konten**.

1. Pilih **Simpan perubahan**.

## Aktifkan kompresi payload untuk API menggunakan AWS CLI
<a name="api-gateway-enable-compression-cli"></a>



[create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)Perintah berikut membuat API dengan kompresi payload:

```
aws apigateway create-rest-api \
    --name "My test API" \
    --minimum-compression-size 0
```

[update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)Perintah berikut memungkinkan kompresi payload untuk API yang ada:

```
aws apigateway update-rest-api \
    --rest-api-id 1234567890 \
    --patch-operations op=replace,path=/minimumCompressionSize,value=0
```

`minimumCompressionSize`Properti memiliki nilai integer non-negatif antara 0 dan 10485760 (10M byte). Ini mengukur ambang kompresi. Jika ukuran muatan lebih kecil dari nilai ini, kompresi atau dekompresi tidak diterapkan pada muatan. Pengaturan ke nol memungkinkan kompresi untuk ukuran muatan apa pun.

[update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)Perintah berikut mematikan kompresi payload:

```
aws apigateway update-rest-api \
    --rest-api-id 1234567890 \
    --patch-operations op=replace,path=/minimumCompressionSize,value=
```

Anda juga dapat mengatur `value` ke string kosong `""` atau menghilangkan `value` properti sama sekali dalam panggilan sebelumnya.

## Pengkodean konten yang didukung oleh API Gateway
<a name="api-gateway-supported-content-encodings"></a>

API Gateway mendukung pengkodean konten berikut:
+ `deflate`
+ `gzip`
+ `identity`

API Gateway juga mendukung format `Accept-Encoding` header berikut, sesuai dengan spesifikasi [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4):
+ `Accept-Encoding:deflate,gzip`
+ `Accept-Encoding:`
+ `Accept-Encoding:*`
+ `Accept-Encoding:deflate;q=0.5,gzip;q=1.0`
+ `Accept-Encoding:gzip;q=1.0,identity;q=0.5,*;q=0`

# Panggil metode API dengan payload terkompresi di API Gateway
<a name="api-gateway-make-request-with-compressed-payload"></a>

Untuk membuat permintaan API dengan muatan terkompresi, klien harus menyetel `Content-Encoding` header dengan salah satu pengkodean [konten yang didukung](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). 

Misalkan Anda adalah klien API dan ingin memanggil metode PetStore API (`POST /pets`). Jangan panggil metode dengan menggunakan output JSON berikut:

```
POST /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Content-Length: ...

{
  "type": "dog",
  "price": 249.99
}
```

Sebagai gantinya, Anda dapat memanggil metode dengan muatan yang sama dikompresi dengan menggunakan pengkodean GZIP:

```
POST /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Content-Encoding:gzip
Content-Length: ...

���RPP*�,HU�RPJ�OW��e&���L,�,-y�j
```

Ketika API Gateway menerima permintaan, itu memverifikasi apakah pengkodean konten yang ditentukan didukung. Kemudian, ia mencoba untuk mendekompresi muatan dengan pengkodean konten yang ditentukan. Jika dekompresi berhasil, ia mengirimkan permintaan ke titik akhir integrasi. Jika pengkodean yang ditentukan tidak didukung atau muatan yang disediakan tidak dikompresi dengan pengkodean tertentu, API Gateway mengembalikan respons `415 Unsupported Media Type` kesalahan. Kesalahan tidak dicatat ke CloudWatch Log, jika terjadi pada fase awal dekompresi sebelum API dan tahap Anda diidentifikasi. 

# Menerima respons API dengan payload terkompresi di API Gateway
<a name="api-gateway-receive-response-with-compressed-payload"></a>

[Saat membuat permintaan pada API yang mendukung kompresi, klien dapat memilih untuk menerima muatan respons terkompresi dari format tertentu dengan menentukan `Accept-Encoding` header dengan pengkodean konten yang didukung.](api-gateway-enable-compression.md#api-gateway-supported-content-encodings) 

API Gateway hanya memampatkan payload respons jika kondisi berikut terpenuhi:
+  Permintaan masuk memiliki `Accept-Encoding` header dengan pengkodean dan format konten yang didukung. 
**catatan**  
Jika header tidak disetel, nilai default adalah `*` seperti yang didefinisikan dalam [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4). Dalam kasus seperti itu, API Gateway tidak memampatkan muatan. Beberapa browser atau klien dapat menambahkan `Accept-Encoding` (misalnya,`Accept-Encoding:gzip, deflate, br`) secara otomatis ke permintaan yang diaktifkan kompresi. Ini dapat mengaktifkan kompresi payload di API Gateway. Tanpa spesifikasi eksplisit dari nilai `Accept-Encoding` header yang didukung, API Gateway tidak memampatkan payload. 
+  `minimumCompressionSize`Ini diatur pada API untuk mengaktifkan kompresi.
+  Respons integrasi tidak memiliki `Content-Encoding` header. 
+  Ukuran muatan respons integrasi, setelah templat pemetaan yang berlaku diterapkan, lebih besar dari atau sama dengan nilai yang ditentukan`minimumCompressionSize`.

API Gateway menerapkan template pemetaan apa pun yang dikonfigurasi untuk respons integrasi sebelum mengompresi payload. Jika respons integrasi berisi `Content-Encoding` header, API Gateway mengasumsikan bahwa payload respons integrasi sudah dikompresi dan melewatkan pemrosesan kompresi.

Contohnya adalah contoh PetStore API dan permintaan berikut:

```
GET /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Accept: application/json
```

Backend merespons permintaan dengan muatan JSON yang tidak terkompresi yang mirip dengan yang berikut ini:

```
200 OK

[
  { 
    "id": 1, 
    "type": "dog", 
    "price": 249.99 
  }, 
  { 
    "id": 2, 
    "type": "cat", 
    "price": 124.99 
  }, 
  { 
    "id": 3, 
    "type": "fish", 
    "price": 0.99 
  } 
]
```

Untuk menerima output ini sebagai payload terkompresi, klien API Anda dapat mengirimkan permintaan sebagai berikut:

```
GET /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Accept-Encoding:gzip
```

Klien menerima respons dengan `Content-Encoding` header dan muatan yang dikodekan GZIP yang mirip dengan berikut ini: 

```
200 OK
Content-Encoding:gzip
...

���RP�

J�)JV
�:P^IeA*������+(�L	�X�YZ�ku0L0B7!9��C#�&����Y��a���^�X
```

Ketika payload respons dikompresi, hanya ukuran data terkompresi yang ditagih untuk transfer data.