

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

# Integrasi untuk WebSocket APIs di API Gateway
<a name="apigateway-websocket-api-integrations"></a>

Setelah menyiapkan rute API, Anda harus mengintegrasikannya dengan titik akhir di backend. Endpoint backend juga disebut sebagai titik akhir integrasi dan dapat berupa fungsi Lambda, titik akhir HTTP, atau tindakan layanan. AWS Integrasi API memiliki permintaan integrasi dan respons integrasi.

Di bagian ini, Anda dapat mempelajari cara menyiapkan permintaan integrasi dan respons integrasi untuk WebSocket API Anda. 

**Topics**
+ [Menyiapkan permintaan integrasi WebSocket API di API Gateway](apigateway-websocket-api-integration-requests.md)
+ [Menyiapkan respons integrasi WebSocket API di API Gateway](apigateway-websocket-api-integration-responses.md)

# Menyiapkan permintaan integrasi WebSocket API di API Gateway
<a name="apigateway-websocket-api-integration-requests"></a>

Menyiapkan permintaan integrasi melibatkan hal-hal berikut:
+ Memilih kunci rute untuk diintegrasikan ke backend.
+ Menentukan titik akhir backend untuk dipanggil. WebSocket APIs mendukung jenis integrasi berikut:
  + `AWS_PROXY`
  + `AWS`
  + `HTTP_PROXY`
  + `HTTP`
  + `MOCK`

  Untuk informasi selengkapnya tentang jenis integrasi, lihat [IntegrationType](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-integrations-integrationid.html#apis-apiid-integrations-integrationid-prop-integration-integrationtype)di API REST API Gateway V2.
+ Mengkonfigurasi cara mengubah data permintaan rute, jika perlu, menjadi data permintaan integrasi dengan menentukan satu atau beberapa templat permintaan.

## Menyiapkan permintaan integrasi WebSocket API menggunakan konsol API Gateway
<a name="apigateway-websocket-api-integration-request-using-console"></a>

**Untuk menambahkan permintaan integrasi ke rute di WebSocket API menggunakan konsol API Gateway**

1. Masuk ke konsol API Gateway, pilih API, dan pilih **Rute**.

1. Di bawah **Rute**, pilih rute.

1. Pilih tab **Permintaan integrasi**, dan kemudian di bagian **Pengaturan permintaan integrasi**, pilih **Edit**.

1. Untuk **jenis Integrasi**, pilih salah satu dari berikut ini:
   + Pilih **fungsi Lambda** hanya jika API Anda akan diintegrasikan dengan AWS Lambda fungsi yang telah Anda buat di akun ini atau di akun lain.

     **Untuk membuat fungsi Lambda baru di AWS Lambda, untuk menetapkan izin sumber daya pada fungsi Lambda, atau untuk melakukan tindakan layanan Lambda lainnya, pilih Layanan sebagai gantinya.AWS **
   + Pilih **HTTP** jika API Anda akan terintegrasi dengan titik akhir HTTP yang ada. Untuk informasi selengkapnya, lihat [Integrasi HTTP untuk REST APIs di API Gateway](setup-http-integrations.md).
   + Pilih **Mock** jika Anda ingin menghasilkan respons API dari API Gateway secara langsung, tanpa perlu backend integrasi. Untuk informasi selengkapnya, lihat [Integrasi tiruan untuk REST APIs di API Gateway](how-to-mock-integration.md).
   + Pilih **AWS layanan** jika API Anda akan terintegrasi dengan AWS layanan.
   + Pilih **tautan VPC** jika API Anda akan menggunakan titik akhir integrasi `VpcLink` sebagai pribadi. Untuk informasi selengkapnya, lihat [Siapkan integrasi pribadi](set-up-private-integration.md).

1. Jika Anda memilih **fungsi Lambda**, lakukan hal berikut:

   1. [Untuk **Menggunakan integrasi proxy Lambda**, pilih kotak centang jika Anda ingin menggunakan integrasi proxy Lambda [atau integrasi proxy Lambda](set-up-lambda-proxy-integrations.md#api-gateway-create-api-as-simple-proxy) lintas akun.](apigateway-cross-account-lambda-integrations.md)

   1. Untuk **fungsi Lambda**, tentukan fungsi dengan salah satu cara berikut:
      + Jika fungsi Lambda Anda berada di akun yang sama, masukkan nama fungsi dan kemudian pilih fungsi dari daftar dropdown.
**catatan**  
Nama fungsi secara opsional dapat menyertakan alias atau spesifikasi versinya, seperti dalam, `HelloWorld``HelloWorld:1`, atau. `HelloWorld:alpha`
      + Jika fungsinya ada di akun yang berbeda, masukkan ARN untuk fungsi tersebut.

   1. Untuk menggunakan nilai batas waktu default 29 detik, tetap aktifkan **batas waktu default**. Untuk menetapkan batas waktu kustom, pilih Batas **waktu default** dan masukkan nilai batas waktu antara `50` dan milidetik. `29000`

1. Jika Anda memilih **HTTP**, ikuti petunjuk di langkah 4 dari[Menyiapkan permintaan integrasi API menggunakan konsol API Gateway](how-to-method-settings-console.md).

1. Jika Anda memilih **Mock**, lanjutkan ke langkah **Permintaan Template**.

1. Jika Anda memilih **AWS layanan**, ikuti instruksi pada langkah 6 dari[Menyiapkan permintaan integrasi API menggunakan konsol API Gateway](how-to-method-settings-console.md).

1. Jika Anda memilih **tautan VPC**, lakukan hal berikut:

   1. Untuk **integrasi proxy VPC**, pilih kotak centang jika Anda ingin permintaan Anda diproksi ke titik akhir Anda. `VPCLink`

   1. Untuk **metode HTTP**, pilih jenis metode HTTP yang paling cocok dengan metode di backend HTTP.

   1. Dari daftar dropdown **tautan VPC**, pilih tautan VPC. Anda dapat memilih `[Use Stage Variables]` dan memasukkan **\$1\$1stageVariables.vpcLinkId\$1** dalam kotak teks di bawah daftar.

      Anda dapat menentukan variabel `vpcLinkId` stage setelah menerapkan API ke tahap dan menetapkan nilainya ke ID. `VpcLink`

   1. Untuk **URL Endpoint**, masukkan URL backend HTTP yang ingin digunakan integrasi ini.

   1. Untuk menggunakan nilai batas waktu default 29 detik, tetap aktifkan **batas waktu default**. Untuk menetapkan batas waktu kustom, pilih Batas **waktu default** dan masukkan nilai batas waktu antara `50` dan milidetik. `29000`

1. Pilih **Simpan perubahan**.

1. Di bawah **templat Permintaan**, lakukan hal berikut:

   1. Untuk memasukkan **ekspresi pemilihan Template**, di bawah **Permintaan template**, pilih **Edit**.

   1. Masukkan **ekspresi pemilihan Template**. Gunakan ekspresi yang dicari API Gateway di payload pesan. Jika ditemukan, itu dievaluasi, dan hasilnya adalah nilai kunci template yang digunakan untuk memilih template pemetaan data yang akan diterapkan ke data dalam payload pesan. Anda membuat template pemetaan data di langkah berikutnya. Pilih **Edit** untuk menyimpan perubahan Anda.

   1. Pilih **Buat template** untuk membuat template pemetaan data. Untuk **kunci Template**, masukkan nilai kunci template yang digunakan untuk memilih template pemetaan data yang akan diterapkan ke data dalam payload pesan. Kemudian, masukkan template pemetaan. Pilih **Buat templat**.

      Untuk informasi tentang ekspresi pemilihan templat, lihat[Ekspresi pemilihan template](websocket-api-data-transformations.md#apigateway-websocket-api-template-selection-expressions).

## Siapkan permintaan integrasi menggunakan AWS CLI
<a name="apigateway-websocket-api-integration-request-using-awscli"></a>

Anda dapat menyiapkan permintaan integrasi untuk rute di WebSocket API dengan menggunakan AWS CLI seperti pada contoh berikut, yang membuat integrasi tiruan:

1. Buat file bernama`integration-params.json`, dengan konten berikut:

   ```
   {"PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "RequestTemplates": {"application/json": "{\"statusCode\":200}"}, "IntegrationType": "MOCK"}
   ```

1. Gunakan perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut untuk membuat integrasi tiruan.

   ```
   aws apigatewayv2 --region us-east-1 create-integration --api-id aabbccddee --cli-input-json file://integration-params.json
   ```

   Outputnya akan terlihat seperti berikut:

   ```
   {
       "PassthroughBehavior": "WHEN_NO_MATCH",
       "TimeoutInMillis": 29000,
       "ConnectionType": "INTERNET",
       "IntegrationResponseSelectionExpression": "${response.statuscode}",
       "RequestTemplates": {
           "application/json": "{\"statusCode\":200}"
       },
       "IntegrationId": "0abcdef",
       "IntegrationType": "MOCK"
   }
   ```

Atau, Anda dapat mengatur permintaan integrasi untuk integrasi proxy dengan menggunakan AWS CLI.

1. Buat fungsi Lambda di konsol Lambda dan berikan peran eksekusi Lambda dasar.

1. Gunakan perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut untuk membuat integrasi.

   ```
   aws apigatewayv2 create-integration --api-id aabbccddee --integration-type AWS_PROXY --integration-method POST --integration-uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:simpleproxy-echo-e2e/invocations
   ```

Outputnya akan terlihat seperti berikut:

```
{
    "PassthroughBehavior": "WHEN_NO_MATCH",
    "IntegrationMethod": "POST",
    "TimeoutInMillis": 29000,
    "ConnectionType": "INTERNET",
    "IntegrationUri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:simpleproxy-echo-e2e/invocations",
    "IntegrationId": "abcdefg",
    "IntegrationType": "AWS_PROXY"
}
```

## Format input fungsi Lambda untuk integrasi proxy untuk WebSocket APIs
<a name="api-gateway-simple-proxy-for-lambda-input-format-websocket"></a>

Dalam integrasi proxy Lambda, API Gateway memetakan seluruh permintaan klien ke `event` parameter input fungsi Lambda backend. Contoh berikut menunjukkan struktur peristiwa masukan dari `$connect` rute dan peristiwa masukan dari rute yang dikirimkan API Gateway ke integrasi proxy Lambda. `$disconnect`

------
#### [ Input from the \$1connect route ]

```
{
    headers: {
      Host: 'abcd123.execute-api.us-east-1.amazonaws.com',
      'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
      'Sec-WebSocket-Key': '...',
      'Sec-WebSocket-Version': '13',
      'X-Amzn-Trace-Id': '...',
      'X-Forwarded-For': '192.0.2.1',
      'X-Forwarded-Port': '443',
      'X-Forwarded-Proto': 'https'
    },
    multiValueHeaders: {
      Host: [ 'abcd123.execute-api.us-east-1.amazonaws.com' ],
      'Sec-WebSocket-Extensions': [ 'permessage-deflate; client_max_window_bits' ],
      'Sec-WebSocket-Key': [ '...' ],
      'Sec-WebSocket-Version': [ '13' ],
      'X-Amzn-Trace-Id': [ '...' ],
      'X-Forwarded-For': [ '192.0.2.1' ],
      'X-Forwarded-Port': [ '443' ],
      'X-Forwarded-Proto': [ 'https' ]
    },
    requestContext: {
      routeKey: '$connect',
      eventType: 'CONNECT',
      extendedRequestId: 'ABCD1234=',
      requestTime: '09/Feb/2024:18:11:43 +0000',
      messageDirection: 'IN',
      stage: 'prod',
      connectedAt: 1707502303419,
      requestTimeEpoch: 1707502303420,
      identity: { sourceIp: '192.0.2.1' },
      requestId: 'ABCD1234=',
      domainName: 'abcd1234.execute-api.us-east-1.amazonaws.com',
      connectionId: 'AAAA1234=',
      apiId: 'abcd1234'
    },
    isBase64Encoded: false
  }
```

------
#### [ Input from the \$1disconnect route ]

```
{
    headers: {
      Host: 'abcd1234.execute-api.us-east-1.amazonaws.com',
      'x-api-key': '',
      'X-Forwarded-For': '',
      'x-restapi': ''
    },
    multiValueHeaders: {
      Host: [ 'abcd1234.execute-api.us-east-1.amazonaws.com' ],
      'x-api-key': [ '' ],
      'X-Forwarded-For': [ '' ],
      'x-restapi': [ '' ]
    },
    requestContext: {
      routeKey: '$disconnect',
      disconnectStatusCode: 1005,
      eventType: 'DISCONNECT',
      extendedRequestId: 'ABCD1234=',
      requestTime: '09/Feb/2024:18:23:28 +0000',
      messageDirection: 'IN',
      disconnectReason: 'Client-side close frame status not set',
      stage: 'prod',
      connectedAt: 1707503007396,
      requestTimeEpoch: 1707503008941,
      identity: { sourceIp: '192.0.2.1' },
      requestId: 'ABCD1234=',
      domainName: 'abcd1234.execute-api.us-east-1.amazonaws.com',
      connectionId: 'AAAA1234=',
      apiId: 'abcd1234'
    },
    isBase64Encoded: false
  }
```

------

# Menyiapkan respons integrasi WebSocket API di API Gateway
<a name="apigateway-websocket-api-integration-responses"></a>

Bagian berikut memberikan gambaran singkat tentang respons integrasi untuk WebSocket API dan cara menyiapkan respons integrasi untuk WebSocket API. 

**Topics**
+ [Ikhtisar tanggapan integrasi](#apigateway-websocket-api-integration-response-overview)
+ [Respons integrasi untuk komunikasi dua arah](#apigateway-websocket-api-integration-response-for-two-way-communication)
+ [Menyiapkan respons integrasi menggunakan konsol API Gateway](#apigateway-websocket-api-integration-response-using-console)
+ [Siapkan respons integrasi menggunakan AWS CLI](#apigateway-websocket-api-integration-response-using-awscli)

## Ikhtisar tanggapan integrasi
<a name="apigateway-websocket-api-integration-response-overview"></a>

Respons integrasi API Gateway adalah cara memodelkan dan memanipulasi respons dari layanan backend. Ada beberapa perbedaan dalam penyiapan REST API versus respons integrasi WebSocket API, tetapi secara konseptual perilakunya sama.

WebSocket rute dapat dikonfigurasi untuk komunikasi dua arah atau satu arah.
+ Saat rute dikonfigurasi untuk komunikasi dua arah, respons integrasi memungkinkan Anda mengonfigurasi transformasi pada muatan pesan yang dikembalikan, mirip dengan respons integrasi untuk REST. APIs
+ Jika rute dikonfigurasi untuk komunikasi satu arah, maka terlepas dari konfigurasi respons integrasi apa pun, tidak ada respons yang akan dikembalikan melalui WebSocket saluran setelah pesan diproses.

 API Gateway tidak akan meneruskan respons backend ke respons rute, kecuali jika Anda menyiapkan respons rute. Untuk mempelajari cara menyiapkan respons rute, lihat[Siapkan respons rute untuk WebSocket APIs di API Gateway](apigateway-websocket-api-route-response.md).

## Respons integrasi untuk komunikasi dua arah
<a name="apigateway-websocket-api-integration-response-for-two-way-communication"></a>

Integrasi dapat dibagi menjadi integrasi *proxy* dan integrasi *non-proxy*.

**penting**  
Untuk *integrasi proxy*, API Gateway secara otomatis meneruskan output backend ke pemanggil sebagai muatan lengkap. Tidak ada respon integrasi.

Untuk *integrasi non-proxy*, Anda harus menyiapkan setidaknya satu respons integrasi:
+ Idealnya, salah satu tanggapan integrasi Anda harus bertindak sebagai tangkapan semua ketika tidak ada pilihan eksplisit yang dapat dibuat. Kasus default ini diwakili dengan menyetel kunci respons integrasi dari`$default`.
+ Dalam semua kasus lain, kunci respons integrasi berfungsi sebagai ekspresi reguler. Ini harus mengikuti format`"/expression/"`.

Untuk integrasi HTTP non-proxy:
+ API Gateway akan mencoba mencocokkan kode status HTTP dari respons backend. Tombol respons integrasi akan berfungsi sebagai ekspresi reguler dalam kasus ini. Jika kecocokan tidak dapat ditemukan, `$default` maka dipilih sebagai respons integrasi.
+ Ekspresi pemilihan template, seperti dijelaskan di atas, berfungsi secara identik. Contoh:
  + `/2\d\d/`: Menerima dan mengubah tanggapan yang berhasil
  + `/4\d\d/`: Menerima dan mengubah kesalahan permintaan yang buruk
  + `$default`: Menerima dan mengubah semua tanggapan tak terduga

Untuk informasi selengkapnya tentang ekspresi pemilihan templat, lihat[Ekspresi pemilihan template](websocket-api-data-transformations.md#apigateway-websocket-api-template-selection-expressions).

## Menyiapkan respons integrasi menggunakan konsol API Gateway
<a name="apigateway-websocket-api-integration-response-using-console"></a>

Untuk menyiapkan respons integrasi rute untuk WebSocket API 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 WebSocket API Anda dan pilih rute Anda.

1. Pilih tab **Permintaan integrasi**, dan kemudian di bagian **Pengaturan respons integrasi**, pilih **Buat respons integrasi**.

1. Untuk **tombol Respons**, masukkan nilai yang akan ditemukan di kunci respons dalam pesan keluar setelah mengevaluasi ekspresi pemilihan respons. Misalnya, Anda dapat memasukkan **/4\$1d\$1d/** untuk menerima dan mengubah kesalahan permintaan buruk atau masuk **\$1default** untuk menerima dan mengubah semua respons yang cocok dengan ekspresi pemilihan templat. 

1. Untuk **ekspresi pemilihan Template**, masukkan ekspresi seleksi untuk mengevaluasi pesan keluar.

1. Pilih **Buat respons**.

1. Anda juga dapat menentukan template pemetaan untuk mengonfigurasi transformasi payload pesan yang dikembalikan. Pilih **Buat templat**.

1. Masukkan nama kunci. Jika Anda memilih ekspresi pemilihan template default, masukkan**\$1\$1default**.

1. Untuk **template Response**, masukkan template pemetaan Anda di editor kode.

1. Pilih **Buat templat**.

1. Pilih **Deploy API** untuk menerapkan API Anda.

 Gunakan perintah [wscat](https://www.npmjs.com/package/wscat) berikut untuk terhubung ke API Anda. Untuk informasi selengkapnya tentang `wscat`, lihat [Gunakan `wscat` untuk terhubung ke WebSocket API dan mengirim pesan ke sana](apigateway-how-to-call-websocket-api-wscat.md). 

```
wscat -c wss://api-id.execute-api.us-east-2.amazonaws.com/test
```

 Saat Anda memanggil rute Anda, muatan pesan yang dikembalikan akan kembali. 

## Siapkan respons integrasi menggunakan AWS CLI
<a name="apigateway-websocket-api-integration-response-using-awscli"></a>

[create-integration-response](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration-response.html)Perintah berikut menciptakan respons `$default` integrasi:

```
aws apigatewayv2 create-integration-response \
    --api-id vaz7da96z6 \
    --integration-id a1b2c3 \
    --integration-response-key '$default'
```