連載
» 2023年06月09日 05時00分 公開

Goとgrpc-gatewayでリバースプロキシを開発する――gRPCサービスのRESTful API化スキマ時間にこっそり学ぶ「gRPC」入門(終)

第8回は、gRPCをサポートしないWebブラウザなどのクライアントからgRPCサービスを利用するためのリバースプロキシgrpc-gatewayを紹介します。プログラミング言語はGoです。

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「スキマ時間にこっそり学ぶ「gRPC」入門」のインデックス

連載:スキマ時間にこっそり学ぶ「gRPC」入門

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。


WebブラウザをgRPCクライアント化する方法

 今回のテーマは、WebブラウザをはじめとするgRPCをサポートしないWebクライアントのgRPCクライアント化です。gRPCはバックエンドでマイクロサービス間の通信に用いられることが多いのですが、フロントエンドでもgRPCを使えれば、Webブラウザのために別途APIを整備する必要がなくなるなどのメリットが生まれます。

 Webブラウザは、本稿の執筆時点でgRPCをサポートしていません。そのため、以下のような手段で間接的にgRPCサービスを利用することになります。

  • gRPC Web
  • Connect
  • grpc-gateway

gRPC-WebとConnect

 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.

grpc-gateway

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。