

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

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