

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

# Optimalkan kinerja REST APIs
<a name="rest-api-optimize"></a>

Setelah Anda membuat API tersedia untuk dipanggil, Anda mungkin menyadari bahwa itu perlu dioptimalkan untuk meningkatkan daya tanggap. API Gateway menyediakan beberapa strategi untuk mengoptimalkan API Anda, seperti cache respons dan kompresi payload. Di bagian ini, Anda dapat mempelajari cara mengaktifkan kemampuan ini.

**Topics**
+ [Pengaturan cache untuk REST APIs di API Gateway](api-gateway-caching.md)
+ [Kompresi muatan untuk REST APIs di API Gateway](api-gateway-gzip-compression-decompression.md)

# Pengaturan cache untuk REST APIs di API Gateway
<a name="api-gateway-caching"></a>

Anda dapat mengaktifkan caching API di API Gateway untuk men-cache respons titik akhir Anda. Dengan caching, Anda dapat mengurangi jumlah panggilan yang dilakukan ke titik akhir Anda dan juga meningkatkan latensi permintaan ke API Anda.

Saat Anda mengaktifkan caching untuk suatu tahap, API Gateway menyimpan respons dari titik akhir Anda untuk periode tertentu time-to-live (TTL), dalam hitungan detik. API Gateway kemudian merespons permintaan dengan mencari respons titik akhir dari cache alih-alih membuat permintaan ke titik akhir Anda. Nilai TTL default untuk caching API adalah 300 detik. Nilai TTL maksimum adalah 3600 detik. TTL = 0 berarti caching dinonaktifkan.

**catatan**  
Caching adalah upaya terbaik. Anda dapat menggunakan `CacheMissCount` metrik `CacheHitCount` dan di Amazon CloudWatch untuk memantau permintaan yang disajikan API Gateway dari cache API.

Ukuran maksimum respons yang dapat di-cache adalah 1048576 byte. Enkripsi data cache dapat meningkatkan ukuran respons saat sedang di-cache.

Ini adalah Layanan yang Memenuhi Syarat HIPAA. [Untuk informasi lebih lanjut tentang AWS, Undang-Undang Portabilitas dan Akuntabilitas Asuransi Kesehatan AS tahun 1996 (HIPAA), dan menggunakan AWS layanan untuk memproses, menyimpan, dan mengirimkan informasi kesehatan yang dilindungi (PHI), lihat Ikhtisar HIPAA.](https://aws.amazon.com/compliance/hipaa-compliance/)

**penting**  
Saat Anda mengaktifkan caching untuk suatu tahap, hanya `GET` metode yang mengaktifkan caching secara default. Ini membantu memastikan keamanan dan ketersediaan API Anda. Anda dapat mengaktifkan caching untuk metode lain dengan [mengganti pengaturan metode](#override-api-gateway-stage-cache-for-method-cache).

**penting**  
Caching dibebankan per jam berdasarkan ukuran cache yang Anda pilih. Caching tidak memenuhi syarat untuk Tingkat AWS Gratis. Untuk informasi selengkapnya, lihat [Harga API Gateway](https://aws.amazon.com/api-gateway/pricing/).

## Aktifkan caching Amazon API Gateway
<a name="enable-api-gateway-caching"></a>

Di API Gateway, Anda dapat mengaktifkan caching untuk tahap tertentu.

 Ketika Anda mengaktifkan caching, Anda harus memilih kapasitas cache. Secara umum, kapasitas yang lebih besar memberikan kinerja yang lebih baik, tetapi juga lebih mahal. Untuk ukuran cache yang didukung, lihat [cacheClusterSize](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html#apigw-CreateStage-request-cacheClusterSize)di *Referensi API Gateway API*.

 API Gateway memungkinkan caching dengan membuat instance cache khusus. Proses ini bisa memakan waktu hingga 4 menit. 

API Gateway mengubah kapasitas caching dengan menghapus instance cache yang ada dan membuat yang baru dengan kapasitas yang dimodifikasi. Semua data cache yang ada dihapus. 

**catatan**  
Kapasitas cache mempengaruhi CPU, memori, dan bandwidth jaringan dari instance cache. Akibatnya, kapasitas cache dapat memengaruhi kinerja cache Anda.   
API Gateway merekomendasikan agar Anda menjalankan uji pemuatan 10 menit untuk memverifikasi bahwa kapasitas cache sesuai dengan beban kerja Anda. Pastikan bahwa lalu lintas selama uji beban mencerminkan lalu lintas produksi. Misalnya, sertakan ramp up, lalu lintas konstan, dan lonjakan lalu lintas. Tes beban harus mencakup respons yang dapat disajikan dari cache, serta respons unik yang menambahkan item ke cache. Pantau metrik latensi, 4xx, 5xx, cache hit, dan cache miss selama uji beban. Sesuaikan kapasitas cache sesuai kebutuhan berdasarkan metrik ini. Untuk informasi selengkapnya tentang pengujian beban, lihat [Bagaimana cara memilih kapasitas cache API Gateway terbaik agar tidak mencapai batas laju?](https://repost.aws/knowledge-center/api-gateway-cache-capacity) .

------
#### [ Konsol Manajemen AWS ]

 Di konsol API Gateway, Anda mengonfigurasi caching di halaman **Tahapan**. Anda menyediakan cache tahap dan menentukan pengaturan cache tingkat metode default. Jika Anda mengaktifkan cache tingkat metode default, caching tingkat metode diaktifkan untuk semua `GET` metode di panggung Anda, kecuali metode tersebut memiliki penggantian metode. `GET`Metode tambahan apa pun yang Anda terapkan ke tahap Anda akan memiliki cache tingkat metode. Untuk mengonfigurasi pengaturan caching tingkat metode untuk metode spesifik tahap Anda, Anda dapat menggunakan penggantian metode. Untuk informasi selengkapnya tentang penggantian metode, lihat. [Ganti caching tingkat tahap API Gateway untuk caching tingkat metode](#override-api-gateway-stage-cache-for-method-cache)

**Untuk mengonfigurasi caching API untuk tahap tertentu:**

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

1. Memilih **Tahapan**.

1. Dalam daftar **Tahapan** untuk API, pilih stage.

1. Di bagian **Detail tahap**, pilih **Edit**.

1. Di bawah **Pengaturan tambahan**, untuk **pengaturan Cache**, aktifkan **cache API Penyediaan**.

   Ini menyediakan cluster cache untuk tahap Anda.

1. Untuk mengaktifkan caching untuk tahap Anda, aktifkan caching tingkat **metode Default.**

   Ini mengaktifkan caching tingkat metode untuk semua `GET` metode di panggung Anda. `GET`Metode tambahan apa pun yang Anda terapkan ke tahap ini akan memiliki cache tingkat metode. 
**catatan**  
Jika Anda memiliki setelan yang ada untuk cache tingkat metode, mengubah pengaturan caching tingkat metode default tidak memengaruhi pengaturan yang ada.  
![\[Aktifkan cache API penyediaan dan caching tingkat metode default.\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/api-caching-stage-flow.png)

1. Pilih **Simpan perubahan**.

------
#### [ AWS CLI ]

Perintah [tahap pembaruan berikut memperbarui tahapan](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) untuk menyediakan cache dan mengaktifkan caching tingkat metode untuk semua metode di panggung Anda: `GET`

```
aws apigateway update-stage \
    --rest-api-id a1b2c3 \
    --stage-name 'prod' \
    --patch-operations file://patch.json
```

Isi dari `patch.json` adalah sebagai berikut:

```
[
     {
          "op": "replace",
          "path": "/cacheClusterEnabled",
          "value": "true"
     },
     {
          "op": "replace",
          "path": "/cacheClusterSize",
          "value": "0.5"
     },
     {
        "op": "replace",
        "path": "/*/*/caching/enabled",
        "value": "true"
     }
]
```

**catatan**  
Jika Anda memiliki setelan yang ada untuk cache tingkat metode, mengubah pengaturan caching tingkat metode default tidak memengaruhi pengaturan yang ada.

------

**catatan**  
 Membuat atau menghapus cache membutuhkan waktu sekitar 4 menit agar API Gateway selesai.   
Ketika cache dibuat, nilai **cluster Cache** berubah dari `Create in progress` ke`Active`. Ketika penghapusan cache selesai, nilai **cluster Cache** berubah dari `Delete in progress` ke. `Inactive`  
Saat Anda mengaktifkan caching tingkat metode untuk semua metode di panggung Anda, nilai caching **tingkat metode Default berubah menjadi**. `Active` Jika Anda menonaktifkan caching tingkat metode untuk semua metode di panggung Anda, nilai caching **tingkat metode Default akan berubah menjadi**. `Inactive` Jika Anda memiliki setelan yang ada untuk cache tingkat metode, mengubah status cache tidak memengaruhi pengaturan tersebut. 

Saat Anda mengaktifkan caching dalam **pengaturan Cache** tahap, hanya `GET` metode yang di-cache. Untuk memastikan keamanan dan ketersediaan API Anda, sebaiknya jangan mengubah setelan ini. Namun, Anda dapat mengaktifkan caching untuk metode lain dengan [mengganti pengaturan metode](#override-api-gateway-stage-cache-for-method-cache).

 Jika Anda ingin memverifikasi apakah caching berfungsi seperti yang diharapkan, Anda memiliki dua opsi umum: 
+  Periksa CloudWatch metrik **CacheHitCount**dan **CacheMissCount**untuk API dan panggung Anda. 
+  Masukkan stempel waktu dalam respons. 

**catatan**  
Jangan gunakan `X-Cache` header dari CloudFront respons untuk menentukan apakah API Anda sedang dilayani dari instance cache API Gateway Anda.

## Ganti caching tingkat tahap API Gateway untuk caching tingkat metode
<a name="override-api-gateway-stage-cache-for-method-cache"></a>

Anda dapat mengganti pengaturan cache tingkat tahap dengan mengaktifkan atau mematikan caching untuk metode tertentu. Anda juga dapat memodifikasi periode TTL atau mengaktifkan atau menonaktifkan enkripsi untuk respons yang di-cache. 

Jika Anda mengantisipasi bahwa metode yang Anda caching akan menerima data sensitif dalam tanggapannya, enkripsi data cache Anda. Anda mungkin perlu melakukan ini untuk mematuhi berbagai kerangka kerja kepatuhan. Untuk informasi selengkapnya, lihat [kontrol Amazon API Gateway](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) di *Panduan AWS Security Hub Pengguna*.

------
#### [ Konsol Manajemen AWS ]

Jika Anda mengubah pengaturan caching tingkat metode default di **detail Stage**, itu tidak memengaruhi pengaturan cache tingkat metode yang memiliki penggantian.

Jika Anda mengantisipasi bahwa metode yang Anda caching akan menerima data sensitif dalam tanggapannya, di **Pengaturan Cache, pilih **Enkripsi** data cache**.

**Untuk mengonfigurasi caching API untuk metode individual menggunakan konsol:**

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

1. Pilih API.

1. Memilih **Tahapan**.

1. Dalam daftar **Tahapan** untuk API, perluas tahap dan pilih metode di API.

1. **Di bagian **Penggantian Metode**, pilih Edit.**

1. Di bagian **Pengaturan metode**, aktifkan atau matikan **Aktifkan cache metode** atau sesuaikan opsi lain yang diinginkan.
**catatan**  
Caching tidak aktif sampai Anda menyediakan cluster cache untuk tahap Anda.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

Perintah [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) berikut mematikan cache hanya untuk metode ini: `GET /pets`

```
aws apigateway update-stage /
    --rest-api-id a1b2c3 /
    --stage-name 'prod' /
    --patch-operations file://patch.json
```

Isi dari `patch.json` adalah sebagai berikut:

```
[{
        "op": "replace",
        "path": "/~1pets/GET/caching/enabled",
        "value": "false"
}]
```

------

## Gunakan metode atau parameter integrasi sebagai kunci cache untuk mengindeks respons yang di-cache
<a name="enable-api-gateway-cache-keys"></a>

Anda dapat menggunakan metode atau parameter integrasi sebagai kunci cache untuk mengindeks respons yang di-cache. Ini termasuk header khusus, jalur URL, atau string kueri. Anda dapat menentukan beberapa atau semua parameter ini sebagai kunci cache, tetapi Anda harus menentukan setidaknya satu nilai. Bila Anda memiliki kunci cache, API Gateway menyimpan respons dari setiap nilai kunci secara terpisah, termasuk saat kunci cache tidak ada.

**catatan**  
Kunci cache diperlukan saat mengatur caching pada sumber daya.

 Misalnya, Anda memiliki permintaan dalam format berikut: 

```
GET /users?type=... HTTP/1.1
host: example.com
...
```

Dalam permintaan ini, `type` dapat mengambil nilai `admin` atau`regular`. Jika Anda menyertakan `type` parameter sebagai bagian dari kunci cache, respons dari di-cache `GET /users?type=admin` secara terpisah dari yang dari`GET /users?type=regular`. 

 Ketika sebuah metode atau permintaan integrasi mengambil lebih dari satu parameter, Anda dapat memilih untuk menyertakan beberapa atau semua parameter untuk membuat kunci cache. Misalnya, Anda hanya dapat menyertakan `type` parameter dalam kunci cache untuk permintaan berikut, dibuat dalam urutan yang tercantum dalam periode TTL: 

```
GET /users?type=admin&department=A HTTP/1.1
host: example.com
...
```

 Respons dari permintaan ini di-cache dan digunakan untuk melayani permintaan berikut: 

```
GET /users?type=admin&department=B HTTP/1.1
host: example.com
...
```

------
#### [ Konsol Manajemen AWS ]

Untuk menyertakan metode atau parameter permintaan integrasi sebagai bagian dari kunci cache di konsol API Gateway, pilih **Caching** setelah Anda menambahkan parameter. 

![\[Sertakan parameter metode atau integrasi sebagai kunci cache untuk mengindeks respons yang di-cache\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/api-caching-including-parameter-as-cache-key-new-console.png)


------
#### [ AWS CLI ]

Perintah [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) berikut menciptakan `GET` metode dan membutuhkan `type` parameter string query:

```
aws apigateway put-method /
    --rest-api-id a1b2c3 /
    --resource-id aaa111 /
    --http-method GET /
    --authorization-type "NONE" /
    --request-parameters "method.request.querystring.type=true"
```

Perintah [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) berikut membuat integrasi untuk `GET` metode dengan titik akhir HTTP dan menetapkan bahwa API Gateway menyimpan parameter permintaan metode: `type`

```
aws apigateway put-integration /
    --rest-api-id a1b2c3 /
    --resource-id aaa111 /
    --http-method GET /
    --type HTTP /
    --integration-http-method GET /
    --uri 'https://example.com' /
    --cache-key-parameters "method.request.querystring.type"
```

Untuk menentukan cache API Gateway parameter permintaan integrasi, gunakan `integration.request.location.name` sebagai parameter kunci cache.

------

## Siram cache tahap API di API Gateway
<a name="flush-api-caching"></a>

Saat caching API diaktifkan, Anda dapat membersihkan cache tahap API Anda untuk memastikan bahwa klien API Anda mendapatkan respons terbaru dari titik akhir integrasi Anda.

------
#### [ Konsol Manajemen AWS ]

**Untuk menyiram cache tahap API**

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

1. Pilih API yang memiliki tahapan dengan cache.

1. Di panel navigasi utama, pilih **Tahapan**, lalu pilih panggung Anda dengan cache.

1. Pilih menu **Stage actions**, dan kemudian pilih **Flush stage cache**.

------
#### [ AWS CLI ]

[flush-stage-cache](https://docs.aws.amazon.com/cli/latest/reference/apigateway/flush-stage-cache.html)Perintah berikut membersihkan cache panggung:

```
aws apigateway flush-stage-cache \
    --rest-api-id a1b2c3 \
    --stage-name prod
```

------

**catatan**  
Setelah cache dimatikan, respons dilayani dari titik akhir integrasi hingga cache dibangun kembali. Selama periode ini, jumlah permintaan yang dikirim ke titik akhir integrasi dapat meningkat. Ini dapat meningkatkan latensi keseluruhan API untuk sementara waktu. 

## Membatalkan entri cache API Gateway
<a name="invalidate-method-caching"></a>

Klien API Anda dapat membatalkan entri cache yang ada dan memuatnya kembali dari titik akhir integrasi untuk permintaan individual. Klien harus mengirim permintaan yang berisi `Cache-Control: max-age=0` header. Klien menerima respons langsung dari titik akhir integrasi alih-alih cache, asalkan klien berwenang untuk melakukannya. Ini menggantikan entri cache yang ada dengan respons baru, yang diambil dari titik akhir integrasi. 

 Untuk memberikan izin kepada klien, lampirkan kebijakan format berikut ke peran eksekusi IAM bagi pengguna.

**catatan**  
Pembatalan cache lintas akun tidak didukung.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:InvalidateCache"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/stage-name/GET/resource-path-specifier"
            ]
        }
    ]
}
```

------

 Kebijakan ini memungkinkan layanan eksekusi API Gateway membatalkan cache untuk permintaan pada sumber daya tertentu (atau sumber daya). Untuk menentukan sekelompok sumber daya yang ditargetkan, gunakan karakter wildcard (\$1) untuk `account-id``api-id`, dan entri lain dalam nilai ARN. `Resource` Untuk informasi selengkapnya tentang cara menyetel izin untuk layanan eksekusi API Gateway, lihat[Kontrol akses ke REST API dengan izin IAM](permissions.md). 

 Jika Anda tidak memaksakan `InvalidateCache` kebijakan (atau memilih kotak centang **Memerlukan otorisasi** di konsol), klien mana pun dapat membatalkan cache API. Jika sebagian besar atau semua klien membatalkan cache API, ini dapat meningkatkan latensi API Anda secara signifikan. 

 Saat kebijakan diberlakukan, caching diaktifkan dan otorisasi diperlukan.

Anda dapat menentukan cara API Gateway menangani permintaan yang tidak sah dengan memilih dari opsi berikut:

**Gagal permintaan dengan kode status 403**  
API Gateway mengembalikan `403 Unauthorized` respons.  
 Untuk mengatur opsi ini menggunakan API, gunakan`FAIL_WITH_403`.

**Abaikan header kontrol cache; Tambahkan peringatan di header respons**  
API Gateway memproses permintaan dan menambahkan header peringatan dalam respons.  
 Untuk mengatur opsi ini menggunakan API, gunakan`SUCCEED_WITH_RESPONSE_HEADER`. 

**Abaikan header kontrol cache**  
API Gateway memproses permintaan dan tidak menambahkan header peringatan dalam respons.  
 Untuk mengatur opsi ini menggunakan API, gunakan`SUCCEED_WITHOUT_RESPONSE_HEADER`.

Anda dapat menyetel perilaku penanganan permintaan yang tidak sah menggunakan konsol API Gateway atau AWS CLI.

------
#### [ Konsol Manajemen AWS ]

**Untuk menentukan bagaimana permintaan yang tidak sah ditangani**

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

1. Pilih API yang memiliki tahapan dengan cache.

1. Di panel navigasi utama, pilih **Tahapan**, lalu pilih panggung Anda dengan cache.

1. Untuk **detail Stage**, pilih **Edit**.

1. Untuk **penanganan permintaan yang tidak sah**, pilih opsi.

1. Pilih **Lanjutkan**.

1. Tinjau perubahan Anda dan pilih **Simpan perubahan**.

------
#### [ AWS CLI ]

Perintah [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) berikut memperbarui tahapan untuk menangani permintaan yang tidak sah dengan gagal permintaan dengan kode status 403:

```
aws apigateway update-stage /
    --rest-api-id a1b2c3 /
    --stage-name 'prod' /
    --patch-operations 'op=replace,path=/*/*/caching/unauthorizedCacheControlHeaderStrategy,value="FAIL_WITH_403"'
```

------

## CloudFormation contoh tahap dengan cache
<a name="cfn-cache-example"></a>

 CloudFormation Template berikut membuat contoh API, menyediakan cache `0.5` GB untuk `Prod` panggung, dan mengaktifkan caching tingkat metode untuk semua metode. `GET`

**penting**  
Caching dibebankan per jam berdasarkan ukuran cache yang Anda pilih. Caching tidak memenuhi syarat untuk Tingkat AWS Gratis. Untuk informasi selengkapnya, lihat [Harga API Gateway](https://aws.amazon.com/api-gateway/pricing/).

### Contoh CloudFormation template
<a name="cfn-cache-example-code"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: cache-example
  PetsResource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'pets'
  PetsMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref PetsResource
      HttpMethod: GET
      ApiKeyRequired: true
      AuthorizationType: NONE
      Integration:
        Type: HTTP_PROXY
        IntegrationHttpMethod: GET
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - PetsMethodGet
    Properties:
      RestApiId: !Ref Api
  ApiStage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
      StageName: Prod
      Description: Prod Stage with a cache
      RestApiId: !Ref Api
      DeploymentId: !Ref ApiDeployment
      CacheClusterEnabled: True
      CacheClusterSize: 0.5
      MethodSettings:
        - ResourcePath: /*
          HttpMethod: '*'
          CachingEnabled: True
```

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