第8回は、gRPCをサポートしないWebブラウザなどのクライアントからgRPCサービスを利用するためのリバースプロキシgrpc-gatewayを紹介します。プログラミング言語はGoです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
今回のテーマは、WebブラウザをはじめとするgRPCをサポートしないWebクライアントのgRPCクライアント化です。gRPCはバックエンドでマイクロサービス間の通信に用いられることが多いのですが、フロントエンドでもgRPCを使えれば、Webブラウザのために別途APIを整備する必要がなくなるなどのメリットが生まれます。
Webブラウザは、本稿の執筆時点でgRPCをサポートしていません。そのため、以下のような手段で間接的にgRPCサービスを利用することになります。
gRPC-Webは、WebブラウザでgRPCサービスを利用するためのプロトコルです。JavaScriptなどからは、このプロトコルをサポートするクライアントスタブライブラリ(protocのgRPC-Webプラグインで生成)を使用して、gRPCサービスを呼び出すためのコードを記述できます。ただし、gRPC-WebはWebブラウザの機能上の制約により完全なgRPCクライアントになることはできず、実際にはクライアントとgRPCサーバの間にプロトコル変換のためのリバースプロキシを挟む必要があります。リバースプロキシとしては、Envoyというプロキシソフトウェアがよく使われています。
grpc/grpc-web: gRPC for Web Clients
リバースプロキシとは、特定のサーバのために設けられるプロキシ(アクセスを代行するサーバ)で、クライアントは不特定多数となります。これに対して一般的なプロキシ(フォワードプロキシ)は、特定のクライアントのために設けられるプロキシで、サーバは不特定多数となります。いわゆるプロキシというと後者であったため、リバース(逆)プロキシと呼ばれています。フォワードプロキシが、クライアントネットワーク側に設置されるのに対して、リバースプロキシはサーバ側ネットワークに配置されます。後述の図1では、不特定のクライアントからのアクセスを中継し、gRPCサーバへのアクセスを代行していることが示されています。
リバースプロキシによるプロトコル変換とは別に、Connectというライブラリを利用することで、プロトコル定義ファイルからgRPCとgRPC-Webの双方に対応したコードを生成するというアプローチもあります。ConnectはRESTful API形式の独自のプロトコルもサポートするので、これによりWebクライアントからの利用が非常に容易になるというメリットがあります。
Connect - Simple, reliable, interoperable. A better gRPC.
Copyright © ITmedia, Inc. All Rights Reserved.