[AWS] API GatewayのWebSocket APIの「ルート選択式」って何?

もくじ

分かりにくいところ

AWSでサーバーレスアプリを作ろうと思い、アプリの機能を検討しているとWebSocketによるクライアント―サーバ間の双方向通信が必要なことが分かった。

参考までに、こんな構成のアプリを考えている。

ここで今回のポイントとなるのが、API GatewayとLambdaの間の通信。

WebクライアントからAPI Gatewayへ何らかのデータが投げられたら、

API Gatewayはデータの中の特定の部分を見て、その内容に応じたLambdaを呼び出す。

その特定の部分がどこかを表すものが「ルート選択式」と呼ばれるものだ。

「ルート選択式」と「ルートキー」、両者は次のような意味となっている。(異論は認める)

言葉意味
ルート選択式API Gatewayがクライアントからデータを受け取ったときに、どの処理を呼び出すべきかを判断するためにデータの中のどの部分を確認すべきかを表す文字列。
例:request.body.action
ルートキールート選択式が表す箇所に記載する文字列。
この記載内容に応じて、API Gatewayはどの処理を呼び出すかを判断する。
必要な機能の数だけ開発者が定義する。
例:registUser
例:sendMessage

で、ここで私含め多くの人が疑問に思うのが、

クライアントは、どのようにしてそのルートキーの値をサーバに渡すの?

ということだと思う。

ルートキーの渡し方

これは、クライアントのJavaScriptでWebSocketクラスを用いて行う。

まず、WebSocketインスタンスの生成。

const socket = new WebSocket("サーバ側のWebSocketのURL wss://から始まる。");

続いて、このインスタンスを用いてサーバにデータを送る。

こんな感じに。

socket.send(JSON.stringify({
    // ルートキー(request.body.actionの場合)
    "action":"registUser",
    // サーバに伝えるデータの中身の例("data"以外でもよい)
    "data": {
        "name": "mochi",
        "age": 5
    },
    (略)
}));

このとき、”action”の値として設定されている “registUser” が、ルートキーと呼ばれるものだ。

ルート選択式を request.body.action に設定している場合、

API Gatewayは上記のデータをクライアントから受け取ると、

“action” に指定されている値を確認しにいく。

今回、”action” の値は “registUser” なので、API Gatewayはこれに対応するルートがあるかを確認する。

ルートが見つかったらそれに対応する処理(例:あらかじめ指定しておいたLambda)を呼び出し、

見つからなければdefaultルートの処理を呼び出す。

コメントする