【grpc】gRPCを用いたバックエンドからBFFにファイルを送信

皆様こんにちは。
AMDlabの松本です。
普段はWebエンジニアとして、開発に携わってます。

今回は弊社の自社サービスで使用しているgrpcでバックエンドからBFF(backend for frontend)に対してファイルを送信する方法について簡単にご紹介していきます。

まず、gRPCについて簡単な説明です。
gRPCとはGoogleが開発した RPC(Remote Procedure Call)システムで、HTTP/2を経由した関数呼び出しを行う事ができます。
protoファイルに構造化データをシリアライズするための設定を記載することで、言語やプラットフォームに関係なく関数を定義する事ができます。
また、HTTP/2を経由する必要があるので今回はReactで作成したBFFを通しています。

しかし、ファイルを送信する際には注意が必要です。
と言うのも、gRPCでは受信メッセージは4MBに制限されているからです。

今回の記事は4MB以上のデータをバックエンドからBFFにどのように送信すればよいかを書いていきます。

開発環境


開発環境は下記のようになっています。
golang v1.19.4
google.golang.org/grpc v1.45.0

react v18.2.0
grpc/grpc-js”: “1.4.4

protoファイル


まず、protoファイルの作成を行います。

protoファイルの設定は以上で完了です。
注意点としてはサービスのResponse側には必ずstreamと付けてください。
これをつけることで、Server streaming RPCとなり、一つのRequestに対して複数のResponseを返却できるようになります。

バックエンド側


次にバックエンド側の処理を記載します。
ここでファイルを送信する際に、1024byteにファイルを分割して送信します。

BFF側


最後に受け取る側のBFFの処理を書いていきます。
ここでは、1024byteで受け取ったファイルを結合して一つのファイルにします。

 

下記の箇所でログ出力を行った場合の実行ログを貼ります。
1024byteで分割されて送られているのと、最後は余りが送られてきています。

 

おわりに


BFFにgolangや他の言語を使用して記載されている記事は見かけたのですが、JavaScriptで書かれた記事はあまり見なかったです。
BFFはフロントエンドエンジニアが管理するところが多いのかなぁと、思っているのですがフロントエンドエンジニアでもBFFはgolangを選定しているところが多いのかな? と今回記事を書きながら思いっていました。
それでもフロントエンドエンジニアの方ならJavaScriptは馴染み深いと思うので少しでもお力になれば幸いです!

Tech
Go gRPC
ARTICLES