

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

# Ikhtisar WebSocket APIs di API Gateway
<a name="apigateway-websocket-api-overview"></a>

Di API Gateway Anda dapat membuat WebSocket API sebagai frontend stateful untuk AWS layanan (seperti Lambda atau DynamoDB) atau untuk titik akhir HTTP. WebSocket API memanggil backend Anda berdasarkan konten pesan yang diterimanya dari aplikasi klien.

Tidak seperti REST API, yang menerima dan merespons permintaan, WebSocket API mendukung komunikasi dua arah antara aplikasi klien dan backend Anda. Backend dapat mengirim pesan callback ke klien yang terhubung.

Di WebSocket API Anda, pesan JSON yang masuk diarahkan ke integrasi backend berdasarkan rute yang Anda konfigurasikan. (Pesan non-JSON diarahkan ke `$default` rute yang Anda konfigurasikan.)

*Rute* menyertakan *kunci rute*, yang merupakan nilai yang diharapkan setelah *ekspresi pemilihan rute* dievaluasi. `routeSelectionExpression`Ini adalah atribut yang didefinisikan pada tingkat API. Ini menentukan properti JSON yang diharapkan hadir dalam payload pesan. Untuk informasi selengkapnya tentang ekspresi pemilihan rute, lihat[Ekspresi pemilihan rute](websocket-api-develop-routes.md#apigateway-websocket-api-route-selection-expressions).

Misalnya, jika pesan JSON Anda berisi `action` properti, dan Anda ingin melakukan tindakan berbeda berdasarkan properti ini, ekspresi pemilihan rute Anda mungkin`${request.body.action}`. Tabel routing Anda akan menentukan tindakan mana yang akan dilakukan dengan mencocokkan nilai `action` properti terhadap nilai kunci rute kustom yang telah Anda tentukan dalam tabel.

## Menggunakan rute untuk WebSocket API
<a name="apigateway-websocket-api-overview-routes"></a>

Ada tiga rute standar yang dapat digunakan:`$connect`,`$disconnect`, dan`$default`. Selain itu, Anda dapat membuat rute khusus.
+ API Gateway memanggil `$connect` rute saat koneksi persisten antara klien dan WebSocket API sedang dimulai.
+ API Gateway memanggil `$disconnect` rute saat klien atau server terputus dari API.
+ API Gateway memanggil rute kustom setelah ekspresi pemilihan rute dievaluasi terhadap pesan jika rute yang cocok ditemukan; kecocokan menentukan integrasi mana yang dipanggil.
+ API Gateway memanggil `$default` rute jika ekspresi pemilihan rute tidak dapat dievaluasi terhadap pesan atau jika tidak ditemukan rute yang cocok.

Untuk informasi selengkapnya tentang `$disconnect` rute `$connect` dan rute, lihat[Mengelola pengguna yang terhubung dan aplikasi klien: `$connect` dan `$disconnect` rute](apigateway-websocket-api-route-keys-connect-disconnect.md).

Untuk informasi selengkapnya tentang `$default` rute dan rute khusus, lihat[Memanggil integrasi backend Anda dengan `$default` Rute dan rute khusus di API Gateway](apigateway-websocket-api-routes-integrations.md).

## Mengirim data ke aplikasi klien yang terhubung
<a name="apigateway-websocket-api-overview-send-data"></a>

Layanan backend dapat mengirim data ke aplikasi klien yang terhubung. Anda dapat mengirim data dengan melakukan hal berikut:
+ Gunakan integrasi untuk mengirim respons, yang dikembalikan ke klien dengan respons rute yang telah Anda tentukan.
+ Anda dapat menggunakan `@connections` API untuk mengirim permintaan POST. Untuk informasi selengkapnya, lihat [Gunakan `@connections` perintah di layanan backend Anda](apigateway-how-to-call-websocket-api-connections.md).

## WebSocket Kode status API
<a name="apigateway-websocket-status-codes"></a>

API Gateway WebSocket APIs menggunakan kode status berikut untuk komunikasi dari server ke klien seperti yang dijelaskan dalam [WebSocket Tutup Registri Nomor Kode](https://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number):

1001  
API Gateway mengembalikan kode status ini saat klien menganggur selama 10 menit atau mencapai masa pakai koneksi maksimum 2 jam.

1003  
API Gateway mengembalikan kode status ini ketika titik akhir menerima tipe media biner. Jenis media biner tidak didukung untuk WebSocket APIs.

1005  
API Gateway mengembalikan kode status ini jika klien mengirimkan bingkai tutup tanpa kode penutupan.

1006  
API Gateway mengembalikan kode status ini jika ada penutupan koneksi yang tidak terduga, seperti koneksi TCP ditutup tanpa bingkai WebSocket tutup.

1008  
API Gateway mengembalikan kode status ini ketika titik akhir menerima terlalu banyak permintaan dari klien tertentu.

1009  
API Gateway mengembalikan kode status ini ketika titik akhir menerima pesan yang terlalu besar untuk diproses.

1011  
API Gateway mengembalikan kode status ini ketika ada kesalahan server internal. 

1012  
API Gateway mengembalikan kode status ini jika layanan dimulai ulang.

# Mengelola pengguna yang terhubung dan aplikasi klien: `$connect` dan `$disconnect` rute
<a name="apigateway-websocket-api-route-keys-connect-disconnect"></a>

Bagian berikut menjelaskan cara menggunakan `$connect` dan `$disconnect` rute untuk WebSocket API Anda.

**Topics**
+ [`$connect`Rute](#apigateway-websocket-api-routes-about-connect)
+ [Melewati informasi koneksi dari `$connect` rute](#apigateway-websocket-api-passing-connectionId-on-connect)
+ [`$disconnect`Rute](#apigateway-websocket-api-routes-about-disconnect)

## `$connect`Rute
<a name="apigateway-websocket-api-routes-about-connect"></a>

Aplikasi klien terhubung ke WebSocket API Anda dengan mengirimkan permintaan WebSocket pemutakhiran. Jika permintaan berhasil, `$connect` rute dijalankan saat koneksi sedang dibuat.

Karena WebSocket koneksi adalah koneksi stateful, Anda dapat mengonfigurasi otorisasi pada rute saja. `$connect` `AuthN`/`AuthZ`akan dilakukan hanya pada waktu koneksi.

Sampai eksekusi integrasi yang terkait dengan `$connect` rute selesai, permintaan pemutakhiran tertunda dan koneksi sebenarnya tidak akan dibuat. Jika `$connect` permintaan gagal (misalnya, karena `AuthN` `AuthZ` /kegagalan atau kegagalan integrasi), koneksi tidak akan dibuat.

**catatan**  
Jika otorisasi gagal`$connect`, koneksi tidak akan dibuat, dan klien akan menerima `401` atau `403` tanggapan.

Menyiapkan integrasi untuk `$connect` adalah opsional. Anda harus mempertimbangkan untuk menyiapkan `$connect` integrasi jika:
+ Anda ingin mengaktifkan klien untuk menentukan subprotokol dengan menggunakan bidang. `Sec-WebSocket-Protocol` Untuk kode sampel, lihat [Siapkan `$connect` rute yang membutuhkan WebSocket subprotokol](websocket-connect-route-subprotocol.md).
+ Anda ingin diberi tahu saat klien terhubung.
+ Anda ingin membatasi koneksi atau mengontrol siapa yang terhubung.
+ Anda ingin backend Anda mengirim pesan kembali ke klien menggunakan URL callback.
+ Anda ingin menyimpan setiap ID koneksi dan informasi lainnya ke dalam database (misalnya, Amazon DynamoDB).

## Melewati informasi koneksi dari `$connect` rute
<a name="apigateway-websocket-api-passing-connectionId-on-connect"></a>

 Anda dapat menggunakan integrasi proxy dan non-proxy untuk meneruskan informasi dari `$connect` rute ke database atau lainnya. Layanan AWS

### Untuk meneruskan informasi koneksi menggunakan integrasi proxy
<a name="websocket-connect-proxy-integration"></a>

Anda dapat mengakses informasi koneksi dari integrasi proxy Lambda dalam acara tersebut. Gunakan AWS Lambda fungsi lain Layanan AWS atau untuk memposting ke koneksi. 

Fungsi Lambda berikut menunjukkan cara menggunakan `requestContext` objek untuk mencatat ID koneksi, nama domain, nama panggung, dan string kueri. 

------
#### [ Node.js ]

```
 export const handler = async(event, context) => {
    const connectId = event["requestContext"]["connectionId"]
    const domainName = event["requestContext"]["domainName"]
    const stageName = event["requestContext"]["stage"]
    const qs = event['queryStringParameters']
    console.log('Connection ID: ', connectId, 'Domain Name: ', domainName, 'Stage Name: ', stageName, 'Query Strings: ', qs )
    return {"statusCode" : 200}
};
```

------
#### [ Python ]

```
import json
import logging
logger = logging.getLogger()
logger.setLevel("INFO")


def lambda_handler(event, context):
    connectId = event["requestContext"]["connectionId"]
    domainName = event["requestContext"]["domainName"]
    stageName = event["requestContext"]["stage"]
    qs = event['queryStringParameters']
    connectionInfo = {
        'Connection ID': connectId,
        'Domain Name': domainName,
        'Stage Name': stageName,
        'Query Strings': qs}
    logging.info(connectionInfo)
    return {"statusCode": 200}
```

------

### Untuk meneruskan informasi koneksi menggunakan integrasi non-proxy
<a name="websocket-connect-non-proxy-integration"></a>
+ Anda dapat mengakses informasi koneksi dengan integrasi non-proxy. Siapkan permintaan integrasi dan berikan template permintaan WebSocket API. Template pemetaan [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) berikut menyediakan permintaan integrasi. Permintaan ini mengirimkan rincian berikut ke integrasi non-proxy: 
  + ID Koneksi
  + Nama domain
  + Nama panggung
  + Jalan
  + Header
  + String pertanyaan

  Permintaan ini mengirimkan ID koneksi, nama domain, nama panggung, jalur, header, dan string kueri ke integrasi non-proxy.

  ```
  {
      "connectionId": "$context.connectionId",
      "domain": "$context.domainName",
      "stage": "$context.stage",
      "params": "$input.params()"
  }
  ```

  Untuk informasi selengkapnya tentang pengaturan transformasi data, lihat[Transformasi data untuk WebSocket APIs di API Gateway](websocket-api-data-transformations.md).

  Untuk menyelesaikan permintaan integrasi, `StatusCode: 200` tetapkan respons integrasi. Untuk mempelajari lebih lanjut tentang menyiapkan respons integrasi, lihat[Menyiapkan respons integrasi menggunakan konsol API Gateway](apigateway-websocket-api-integration-responses.md#apigateway-websocket-api-integration-response-using-console).

## `$disconnect`Rute
<a name="apigateway-websocket-api-routes-about-disconnect"></a>

`$disconnect`Rute dijalankan setelah koneksi ditutup.

Koneksi dapat ditutup oleh server atau oleh klien. Karena koneksi sudah ditutup saat dijalankan, `$disconnect` adalah acara upaya terbaik. API Gateway akan mencoba yang terbaik untuk mengirimkan `$disconnect` acara ke integrasi Anda, tetapi tidak dapat menjamin pengiriman.

Backend dapat memulai pemutusan dengan menggunakan API. `@connections` Untuk informasi selengkapnya, lihat [Gunakan `@connections` perintah di layanan backend Anda](apigateway-how-to-call-websocket-api-connections.md).

# Memanggil integrasi backend Anda dengan `$default` Rute dan rute khusus di API Gateway
<a name="apigateway-websocket-api-routes-integrations"></a>

Bagian berikut menjelaskan cara memanggil integrasi backend Anda menggunakan `$default` rute atau rute khusus untuk API. WebSocket 

**Topics**
+ [Menggunakan rute untuk memproses pesan](#apigateway-websocket-api-overview-routes)
+ [`$default`Rute](#apigateway-websocket-api-routes-about-default)
+ [Rute khusus](#apigateway-websocket-api-routes-about-custom)
+ [Menggunakan integrasi API Gateway WebSocket API untuk terhubung ke logika bisnis Anda](#apigateway-websocket-api-overview-integrations)
+ [Perbedaan penting antara WebSocket APIs dan REST APIs](#apigateway-websocket-api-overview-integrations-differences)

## Menggunakan rute untuk memproses pesan
<a name="apigateway-websocket-api-overview-routes"></a>

Di API Gateway WebSocket APIs, pesan dapat dikirim dari klien ke layanan backend Anda dan sebaliknya. Tidak seperti request/response model HTTP, WebSocket di backend dapat mengirim pesan ke klien tanpa klien mengambil tindakan apa pun.

Pesan dapat berupa JSON atau non-JSON. Namun, hanya pesan JSON yang dapat dialihkan ke integrasi tertentu berdasarkan konten pesan. Pesan non-JSON diteruskan ke backend melalui rute. `$default`

**catatan**  
API Gateway mendukung muatan pesan hingga 128 KB dengan ukuran bingkai maksimum 32 KB. Jika pesan melebihi 32 KB, Anda harus membaginya menjadi beberapa frame, masing-masing 32 KB atau lebih kecil. Jika pesan yang lebih besar (atau bingkai) diterima, koneksi ditutup dengan kode 1009.  
Saat ini payload biner tidak didukung. Jika bingkai biner diterima, koneksi ditutup dengan kode 1003. Namun, dimungkinkan untuk mengonversi muatan biner menjadi teks. Lihat [Jenis media biner untuk WebSocket APIs di API Gateway](websocket-api-develop-binary-media-types.md).

 WebSocket APIs Dengan API Gateway, pesan JSON dapat dirutekan untuk menjalankan layanan backend tertentu berdasarkan konten pesan. Ketika klien mengirim pesan melalui WebSocket koneksinya, ini menghasilkan *permintaan rute* ke WebSocket API. Permintaan akan dicocokkan dengan rute dengan kunci rute yang sesuai di API Gateway. Anda dapat menyiapkan permintaan rute untuk WebSocket API di konsol API Gateway, dengan menggunakan AWS CLI, atau dengan menggunakan AWS SDK.

**catatan**  
Di AWS CLI dan AWS SDKs, Anda dapat membuat rute sebelum atau setelah Anda membuat integrasi. Saat ini konsol tidak mendukung penggunaan kembali integrasi, jadi Anda harus membuat rute terlebih dahulu dan kemudian membuat integrasi untuk rute itu.

Anda dapat mengonfigurasi API Gateway untuk melakukan validasi pada permintaan rute sebelum melanjutkan dengan permintaan integrasi. Jika validasi gagal, API Gateway gagal permintaan tanpa memanggil backend Anda, mengirimkan respons `"Bad request body"` gateway yang serupa dengan yang berikut ke klien, dan menerbitkan hasil validasi di Log: CloudWatch 

```
{"message" : "Bad request body", "connectionId": "{connectionId}", "messageId": "{messageId}"}
```

Ini mengurangi panggilan yang tidak perlu ke backend Anda dan memungkinkan Anda fokus pada persyaratan lain dari API Anda.

Anda juga dapat menentukan respons rute untuk rute API Anda untuk mengaktifkan komunikasi dua arah. Respons rute menjelaskan data apa yang akan dikirim ke klien Anda setelah menyelesaikan integrasi rute tertentu. Tidak perlu menentukan respons untuk rute jika, misalnya, Anda ingin klien mengirim pesan ke backend Anda tanpa menerima respons (komunikasi satu arah). Namun, jika Anda tidak memberikan respons rute, API Gateway tidak akan mengirimkan informasi apa pun tentang hasil integrasi Anda ke klien Anda.

## `$default`Rute
<a name="apigateway-websocket-api-routes-about-default"></a>

Setiap API Gateway WebSocket API dapat memiliki `$default` rute. Ini adalah nilai routing khusus yang dapat digunakan dengan cara-cara berikut:
+ Anda dapat menggunakannya bersama dengan kunci rute yang ditentukan, untuk menentukan rute “fallback” (misalnya, integrasi tiruan generik yang mengembalikan pesan kesalahan tertentu) untuk pesan masuk yang tidak cocok dengan kunci rute yang ditentukan.
+ Anda dapat menggunakannya tanpa kunci rute yang ditentukan, untuk menentukan model proxy yang mendelegasikan perutean ke komponen backend.
+ Anda dapat menggunakannya untuk menentukan rute untuk muatan non-JSON.

## Rute khusus
<a name="apigateway-websocket-api-routes-about-custom"></a>

Jika Anda ingin menjalankan integrasi tertentu berdasarkan konten pesan, Anda dapat melakukannya dengan membuat rute khusus.

Rute kustom menggunakan kunci rute dan integrasi yang Anda tentukan. Saat pesan masuk berisi properti JSON, dan properti tersebut mengevaluasi nilai yang cocok dengan nilai kunci rute, API Gateway akan memanggil integrasi. (Untuk informasi selengkapnya, lihat [Ikhtisar WebSocket APIs di API Gateway](apigateway-websocket-api-overview.md).)

Misalnya, Anda ingin membuat aplikasi ruang obrolan. Anda dapat memulai dengan membuat WebSocket API yang ekspresi pemilihan rutenya`$request.body.action`. Anda kemudian dapat menentukan dua rute: `joinroom` dan`sendmessage`. Aplikasi klien mungkin memanggil `joinroom` rute dengan mengirim pesan seperti berikut:

```
{"action":"joinroom","roomname":"developers"}
```

Dan itu mungkin memanggil `sendmessage` rute dengan mengirim pesan seperti berikut:

```
{"action":"sendmessage","message":"Hello everyone"}
```

## Menggunakan integrasi API Gateway WebSocket API untuk terhubung ke logika bisnis Anda
<a name="apigateway-websocket-api-overview-integrations"></a>

Setelah menyiapkan rute untuk API Gateway WebSocket API, Anda harus menentukan integrasi yang ingin Anda gunakan. Seperti halnya rute, yang dapat memiliki permintaan rute dan respons rute, integrasi dapat memiliki *permintaan integrasi* dan *respons integrasi*. *Permintaan integrasi* berisi informasi yang diharapkan oleh backend Anda untuk memproses permintaan yang berasal dari klien Anda. *Respons integrasi* berisi data yang dikembalikan backend Anda ke API Gateway, dan yang dapat digunakan untuk membuat pesan yang akan dikirim ke klien (jika respons rute ditentukan).

Untuk informasi selengkapnya tentang menyiapkan integrasi, lihat[Integrasi untuk WebSocket APIs di API Gateway](apigateway-websocket-api-integrations.md).

## Perbedaan penting antara WebSocket APIs dan REST APIs
<a name="apigateway-websocket-api-overview-integrations-differences"></a>

Integrasi untuk WebSocket APIs mirip dengan integrasi untuk REST APIs, kecuali untuk perbedaan berikut:
+ Saat ini, di konsol API Gateway Anda harus membuat rute terlebih dahulu dan kemudian membuat integrasi sebagai target rute tersebut. Namun, di API dan CLI, Anda dapat membuat rute dan integrasi secara independen, dalam urutan apa pun.
+ Anda dapat menggunakan integrasi tunggal untuk beberapa rute. Misalnya, jika Anda memiliki serangkaian tindakan yang terkait erat satu sama lain, Anda mungkin ingin semua rute tersebut menuju ke satu fungsi Lambda. Daripada mendefinisikan detail integrasi beberapa kali, Anda dapat menentukannya sekali dan menetapkannya ke setiap rute terkait.
**catatan**  
Saat ini konsol tidak mendukung penggunaan kembali integrasi, jadi Anda harus membuat rute terlebih dahulu dan kemudian membuat integrasi untuk rute itu.  
Di AWS CLI dan AWS SDKs, Anda dapat menggunakan kembali integrasi dengan menyetel target rute ke nilai`"integrations/{integration-id}"`, di `{integration-id}"` mana ID unik integrasi yang akan dikaitkan dengan rute.
+ API Gateway menyediakan beberapa [ekspresi pilihan](apigateway-websocket-api-selection-expressions.md) yang dapat Anda gunakan dalam rute dan integrasi Anda. Anda tidak perlu bergantung pada jenis konten untuk memilih template input atau pemetaan output. Seperti ekspresi pemilihan rute, Anda dapat menentukan ekspresi seleksi yang akan dievaluasi oleh API Gateway untuk memilih item yang tepat. Semuanya akan kembali ke `$default` template jika template yang cocok tidak ditemukan.
  + Dalam permintaan integrasi, ekspresi pemilihan template mendukung `$request.body.<json_path_expression>` dan nilai statis.
  + Dalam tanggapan integrasi, ekspresi pemilihan template mendukung`$request.body.<json_path_expression>`,, `$integration.response.statuscode``$integration.response.header.<headerName>`, dan nilai statis.

Dalam protokol HTTP, di mana permintaan dan tanggapan dikirim secara serempak; komunikasi pada dasarnya satu arah. Dalam WebSocket protokol, komunikasi adalah dua arah. Respons bersifat asinkron dan tidak harus diterima oleh klien dalam urutan yang sama dengan pesan klien yang dikirim. Selain itu, backend dapat mengirim pesan ke klien.

**catatan**  
Untuk rute yang dikonfigurasi untuk digunakan `AWS_PROXY` atau `LAMBDA_PROXY` diintegrasikan, komunikasi dilakukan satu arah, dan API Gateway tidak akan meneruskan respons backend ke respons rute secara otomatis. Misalnya, dalam kasus `LAMBDA_PROXY` integrasi, badan yang dikembalikan fungsi Lambda tidak akan dikembalikan ke klien. Jika Anda ingin klien menerima tanggapan integrasi, Anda harus menentukan respons rute untuk memungkinkan komunikasi dua arah.

# WebSocket ekspresi seleksi
<a name="apigateway-websocket-api-selection-expressions"></a>

API Gateway menggunakan ekspresi seleksi sebagai cara untuk mengevaluasi konteks permintaan dan respons dan menghasilkan kunci. Kunci tersebut kemudian digunakan untuk memilih dari serangkaian nilai yang mungkin, biasanya disediakan oleh Anda, pengembang API. Kumpulan yang tepat dari variabel yang didukung akan bervariasi tergantung pada ekspresi tertentu. Setiap ekspresi dibahas secara lebih rinci di bawah ini.

Untuk semua ekspresi, bahasa mengikuti seperangkat aturan yang sama:
+ Variabel diawali dengan`"$"`.
+ Kurung kurawal dapat digunakan untuk secara eksplisit mendefinisikan batas variabel, misalnya,. `"${request.body.version}-beta"`
+ Beberapa variabel didukung, tetapi evaluasi hanya terjadi sekali (tidak ada evaluasi rekursif).
+ Tanda dolar (`$`) dapat lolos dengan`"\"`. Ini paling berguna saat mendefinisikan ekspresi yang memetakan ke `$default` kunci yang dicadangkan, misalnya,`"\$default"`.
+ Dalam beberapa kasus, format pola diperlukan. Dalam hal ini, ekspresi harus dibungkus dengan garis miring (`"/"`), misalnya `"/2\d\d/"` untuk mencocokkan kode `2XX` status.

**Topics**
+ [Ekspresi pemilihan respons rute](#apigateway-websocket-api-route-response-selection-expressions)
+ [Ekspresi pemilihan kunci API](#apigateway-websocket-api-apikey-selection-expressions)
+ [Ekspresi pemilihan pemetaan API](#apigateway-websocket-api-mapping-selection-expressions)
+ [WebSocket ringkasan ekspresi seleksi](#apigateway-websocket-api-selection-expression-table)

## Ekspresi pemilihan respons rute
<a name="apigateway-websocket-api-route-response-selection-expressions"></a>

[Respons rute](apigateway-websocket-api-route-response.md) digunakan untuk memodelkan respons dari backend ke klien. Untuk WebSocket APIs, respons rute adalah opsional. Ketika didefinisikan, ini memberi sinyal ke API Gateway bahwa ia harus mengembalikan respons ke klien setelah menerima WebSocket pesan.

Evaluasi *ekspresi pemilihan respons rute* menghasilkan kunci respons rute. Akhirnya, kunci ini akan digunakan untuk memilih dari salah satu yang [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid-routeresponses.html](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid-routeresponses.html)terkait dengan API. Namun, saat ini hanya `$default` kunci yang didukung.

## Ekspresi pemilihan kunci API
<a name="apigateway-websocket-api-apikey-selection-expressions"></a>

Ekspresi ini dievaluasi ketika layanan menentukan permintaan yang diberikan harus dilanjutkan hanya jika klien menyediakan [kunci API](api-gateway-basic-concept.md#apigateway-definition-api-key) yang valid.

Saat ini hanya dua nilai yang didukung adalah `$request.header.x-api-key` dan`$context.authorizer.usageIdentifierKey`.

## Ekspresi pemilihan pemetaan API
<a name="apigateway-websocket-api-mapping-selection-expressions"></a>

Ekspresi ini dievaluasi untuk menentukan tahap API mana yang dipilih saat permintaan dibuat menggunakan domain kustom.

Saat ini, satu-satunya nilai yang didukung adalah `$request.basepath`.

## WebSocket ringkasan ekspresi seleksi
<a name="apigateway-websocket-api-selection-expression-table"></a>

Tabel berikut merangkum kasus penggunaan untuk ekspresi seleksi di WebSocket APIs:


| Ekspresi seleksi | Mengevaluasi ke kunci untuk | Catatan | Contoh kasus penggunaan | 
| --- | --- | --- | --- | 
| Api.RouteSelectionExpression | Route.RouteKey | \$1defaultdidukung sebagai rute catch-all. | Rute WebSocket pesan berdasarkan konteks permintaan klien. | 
| Route.ModelSelectionExpression | Kunci untuk Route.RequestModels | Tidak wajib. Jika disediakan untuk integrasi non-proxy, validasi model terjadi. `$default`didukung sebagai catch-all.  | Lakukan validasi permintaan secara dinamis dalam rute yang sama. | 
| Integration.TemplateSelectionExpression | Kunci untuk Integration.RequestTemplates |  Tidak wajib. Dapat disediakan untuk integrasi non-proxy untuk memanipulasi muatan yang masuk. `${request.body.jsonPath}`dan nilai statis didukung. `$default`didukung sebagai catch-all.  | Memanipulasi permintaan pemanggil berdasarkan properti dinamis permintaan. | 
| Integration.IntegrationResponseSelectionExpression | IntegrationResponse.IntegrationResponseKey |  Tidak wajib. Dapat disediakan untuk integrasi non-proxy. Bertindak sebagai kecocokan pola untuk pesan kesalahan (dari Lambda) atau kode status (dari integrasi HTTP). `$default`diperlukan untuk integrasi non-proxy untuk bertindak sebagai tangkapan semua untuk tanggapan yang berhasil.  |  Memanipulasi respons dari backend. Pilih tindakan yang akan terjadi berdasarkan respons dinamis backend (misalnya, menangani kesalahan tertentu dengan jelas).  | 
| IntegrationResponse.TemplateSelectionExpression | Kunci untuk IntegrationResponse.ResponseTemplates | Tidak wajib. Dapat disediakan untuk integrasi non-proxy. \$1 default didukung.  |  Dalam beberapa kasus, properti dinamis dari respons dapat menentukan transformasi yang berbeda dalam rute yang sama dan integrasi terkait. `${request.body.jsonPath}`,`${integration.response.statuscode}`,`${integration.response.header.headerName}`,`${integration.response.multivalueheader.headerName}`, dan nilai statis didukung. `$default`didukung sebagai catch-all.  | 
| Route.RouteResponseSelectionExpression | RouteResponse.RouteResponseKey |  Harus disediakan untuk memulai komunikasi dua arah untuk suatu WebSocket rute. Saat ini, nilai ini dibatasi `$default` hanya untuk.  |  | 
| RouteResponse.ModelSelectionExpression | Kunci untuk RouteResponse.RequestModels | Saat ini tidak didukung. |  | 