

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

# 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).