LoginSignup
17
13

More than 1 year has passed since last update.

[備忘録] grpCurlの使い方

Posted at

はじめに

最近gRPCでAPIテスト書いたりちょっとしたマイクロサービス開発したりとでgrpcurlと触れ合う機会が多かったので備忘録を兼ねてまとめました。

なるべくイメージがつきやすいように実行コマンドとその出力をセットで書くようにしています。

読んで欲しい人

  • grpc最近触れたけど手軽にサーバーリクエスト送る方法がまだイメージつかない人
  • grpcurlっていうのがあるのを知って使い方を知りたい人
  • grpcurlのオプションとか見たい人

gRPCについての説明は以前Go言語+gRPCをはじめから丁寧に解説してみた(宣伝)の記事を書いたことがあるので気になる方はそちらをご覧ください

grpcurlとは

公式: https://github.com/fullstorydev/grpcurl

grpcurlは、gRPCサーバーを操作するためのコマンドラインツールで以下の特徴を持ちます。

  • curlライクに作られている
  • ストリーミング方式を含むあらゆる種類のRPC方式をサポートしている
  • セキュア/TLS サーバーとプレーンテキストサーバー (TLS を使用しない) の両方をサポートし、TLS構成のための多くのオプションを備えている

インストール

バイナリで欲しい人

HomeBrewで入れたい人

brew install grpcurl

Goで入れたい人

go install github.com/fullstorydev/grpcurl/cmd/grpcurl

インストール確認

下記のコマンドが正常に動けばgrpcurlのインストールは完了です。

grpcurl -help

環境準備

こちらも以前の記事で使った

のリポジトリを使います。

git clone https://github.com/ishishow/grpc_tutorial.git
cd grpc_tutorial
go run server.go
% Go gRPC Beginners Tutorial! // 起動成功です

サービス一覧を表示

% grpcurl -plaintext localhost:9000 list                                                         [~]
chat.ChatService
grpc.reflection.v1alpha.ServerReflection
-plaintextオプション

省略するとTLSで接続されます

list

grpcサーバーが持つサービスの一覧が確認できます。
今回はchat.ChatServiceとリフレクションの2つになります。

サービスの呼び出し

grpcurl -plaintext -d '{"body": "ishishow"}' localhost:9000 chat.Service
{
  "body": "ishishow! Hello From the Server!"
}

こちらリクエストパラメータ有りの場合になります。

リクエストなしの場合は-d{...}は必要ありません。

ポイント

  • 公式にもありますが、-dオプションはサーバーアドレスとサービス名の前に記述する必要があります。

To send a non-empty request, use the -d argument.

Note that all arguments must come before the server address and method name:

サーバーリフレクション

grpcurlはサーバーリフレクション を使っているのでそちらの処理がされていないとprotoファイルを直接渡さなければgrpcurlは実行できません。

サーバーリフレクションを使わないで実行する方法はこちら を参考にしてください。

また、各言語におけるサーバーリフレクション実装サンプルはこちら になります。

※ C# Go Java C++ Pythonはサポートされていますが、Ruby,とNodeはサーバーリフレクションはサポートされていませんので注意が必要です

他のクライアントツール

最後に他の有名なgrpcクライアントツールを紹介します。

  • grpcc
    • grpcc は JavaScript (Node.js) で書かれています。サーバーリフレクションには対応していないのでprotoを読み込む必要があります。
  • evans
    • evansは非インタラクティブなCLIモードとインタラクティブなREPLモードを兼ね備えた高機能なツールです。こちらはサーバーリフレクションに対応しています。
  • bloomrpc
    • こちらはおすすめのGUIで使えるクライアントツールです。PostmanとGraphQL Playgroundにinspireされているらしく、綺麗な見た目でわかりやすくリクエストが送れます。
    • editor-preview.gif

参考リンク

17
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
13