もくじ
分かりにくいところ
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ルートの処理を呼び出す。