About
Kotlin + SpringBoot でgRPCのバックエンドサービスを構築しつつ、WebのフロントエンドからはgRPC-Webでアクセスする、という構成を試したときのメモです。
ざっくりと以下のような構成になります。
仕組み上、BrowserとReverseProxy間の通信はHTTP/1.Xになるので、gRPCのメリットのうちコネクション効率性に関するメリットは享受できないですが、Protocol BuffersによるAPIスキーマ管理の効率化メリットは享受できます。
後から関係者に説明するための参考資料として、試した内容のメモや備忘録を複数回に分けて記載します。
サンプル
GitHubに置きました
サンプルについて
構成
- Service
- Kotlin
- Spring Boot 2.0.0 + grpc-spring-boot-starter
- ReverseProxy
- Envoy
- Web
- TypeScript
- Nuxt.js 2.9.2
動作
docker-compose up
で起動すると、localhost:3000
でWebにアクセスできます。
Nameフィールドに適当な文字列を入力してSendを押すと、バックエンドから下記のような構造のレスポンスを受信します。
{
"message": "Hello ${name}",
"nameLength": ${name.length}
}
バックエンドでは、フロントのサービスであるGreeterService
と、内部サービスであるTextAnalyzerService
が協調することで、上記のようなレスポンスを返しています。
今後
このサンプルを作るにあたって学んだことやハマったことを、要素毎に複数回に分けて見ていきます。