

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

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

------