

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

# Minta validasi untuk WebSocket APIs di API Gateway
<a name="websocket-api-request-validation"></a>

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 gateway “Badan permintaan buruk” ke klien, dan menerbitkan hasil validasi di Log. CloudWatch Menggunakan validasi dengan cara ini mengurangi panggilan yang tidak perlu ke backend API Anda.

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

Anda dapat menggunakan ekspresi pemilihan model untuk memvalidasi permintaan secara dinamis dalam rute yang sama. Validasi model terjadi jika Anda memberikan ekspresi pemilihan model untuk integrasi proxy atau non-proxy. Anda mungkin perlu mendefinisikan `$default` model sebagai fallback ketika tidak ada model yang cocok ditemukan. Jika tidak ada model yang cocok dan `$default` tidak ditentukan, validasi gagal. Ekspresi seleksi terlihat seperti `Route.ModelSelectionExpression` dan mengevaluasi kunci untuk`Route.RequestModels`.

Saat menentukan rute untuk WebSocket API, Anda dapat menentukan *ekspresi pemilihan model* secara opsional. Ekspresi ini dievaluasi untuk memilih model yang akan digunakan untuk validasi tubuh ketika permintaan diterima. Ekspresi mengevaluasi ke salah satu entri dalam rute. [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes.html#apis-apiid-routes-prop-route-requestmodels](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes.html#apis-apiid-routes-prop-route-requestmodels)

Sebuah model dinyatakan sebagai [skema JSON](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04) dan menggambarkan struktur data dari badan permintaan. Sifat ekspresi seleksi ini memungkinkan Anda memilih model secara dinamis untuk divalidasi saat runtime untuk rute tertentu. Untuk informasi tentang cara membuat model, lihat[Model data untuk REST APIs](models-mappings-models.md). 

## Menyiapkan validasi permintaan menggunakan konsol API Gateway
<a name="apigateway-websocket-api-model-selection-expression-example"></a>

Contoh berikut menunjukkan cara mengatur validasi permintaan pada rute.

 Pertama, Anda membuat model, dan kemudian Anda membuat rute. Selanjutnya, Anda mengonfigurasi validasi permintaan pada rute yang baru saja Anda buat. Terakhir, Anda menerapkan dan menguji API Anda. Untuk menyelesaikan tutorial ini, Anda memerlukan WebSocket API dengan `$request.body.action` ekspresi pemilihan rute dan titik akhir integrasi untuk rute baru Anda.

Anda juga `wscat` perlu terhubung ke API Anda. Untuk informasi selengkapnya, lihat [Gunakan `wscat` untuk terhubung ke WebSocket API dan mengirim pesan ke sana](apigateway-how-to-call-websocket-api-wscat.md).

**Untuk membuat model**

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

1. Pilih WebSocket API.

1. Di panel navigasi utama, pilih **Model**.

1. Pilih **Buat model**.

1. Untuk **Nama**, masukkan **emailModel**.

1. Untuk **jenis Konten**, masukkan**application/json**.

1. Untuk **skema Model**, masukkan model berikut:

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type" : "object",
       "required" : [ "address"],
       "properties" : {
           "address": {
               "type": "string"
           }
       }
   }
   ```

   Model ini mengharuskan permintaan berisi alamat email.

1. Pilih **Simpan**.

Pada langkah ini, Anda membuat rute untuk WebSocket API Anda.

**Untuk membuat rute**

1. Di panel navigasi utama, pilih **Rute**.

1. Pilih **Buat rute**.

1. Untuk **kunci Rute**, masukkan**sendMessage**.

1. Pilih jenis integrasi dan tentukan titik akhir integrasi. Untuk mengetahui informasi selengkapnya, lihat [Integrasi untuk WebSocket APIs di API Gateway](apigateway-websocket-api-integrations.md).

1. Pilih **Buat rute**.

Pada langkah ini, Anda menyiapkan validasi permintaan untuk `sendMessage` rute tersebut.

**Untuk mengatur validasi permintaan**

1. Pada tab **Permintaan rute**, di bawah **Pengaturan permintaan rute**, pilih **Edit**.

1. Untuk **ekspresi pemilihan Model**, masukkan**\$1\$1request.body.messageType\$1**.

   API Gateway menggunakan `messageType` properti untuk memvalidasi permintaan yang masuk.

1. Pilih **Tambahkan model permintaan**.

1. Untuk **kunci Model**, masukkan**email**.

1. Untuk **Model**, pilih **EmailModel**.

   API Gateway memvalidasi pesan masuk dengan `messageType` properti yang disetel ke `email` terhadap model ini.
**catatan**  
Jika API Gateway tidak dapat mencocokkan ekspresi pemilihan model dengan kunci model, maka ia memilih `$default` model. Jika tidak ada `$default` model, maka validasi gagal. Untuk produksi APIs, kami sarankan Anda membuat `$default` model.

1. Pilih **Simpan perubahan**.

Pada langkah ini, Anda menerapkan dan menguji API Anda.

**Untuk menerapkan dan menguji API Anda**

1. Pilih **Deploy API**.

1. Pilih tahap yang diinginkan dari daftar dropdown atau masukkan nama tahap baru.

1. Pilih **Deploy**.

1. Di panel navigasi utama, pilih **Tahapan**.

1. Salin WebSocket URL API Anda. URL akan terlihat seperti `wss://abcdef123.execute-api.us-east-2.amazonaws.com/production`.

1. Buka terminal baru dan jalankan **wscat** perintah dengan parameter berikut.

   ```
   wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
   ```

   ```
   Connected (press CTRL+C to quit)
   ```

1. Gunakan perintah berikut untuk menguji API Anda.

   ```
   {"action": "sendMessage", "messageType": "email"}
   ```

   ```
   {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}
   ```

   API Gateway akan gagal permintaan.

   Gunakan perintah berikutnya untuk mengirim permintaan yang valid ke API Anda.

   ```
   {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}
   ```