Echolot
コマンドラインとCI

echolot grpc

gRPCサーバのサービスとメソッドを一覧表示し、JSONメッセージで呼び出します。

echolot grpc は、gRPCサービスを記述し、そのメソッドを呼び出します。メッセージはJSONで書きます。サービスは、サーバのリフレクションか .proto ファイルから読み取ります。 アプリでの同じ操作については、gRPCリクエストを参照してください。

サブコマンド動作
echolot grpc describeサーバまたは .proto ファイルのサービスとメソッドを、各メソッドのフィールドとともに一覧表示します。
echolot grpc callメソッドを呼び出し、応答をJSONで出力します。

例では、Alpenglowのインベントリサービス(Alpenglowワークスペースの specs/inventory.proto)を使います。サービスはMac上の localhost:50051 で動作します。デモAPIはgRPCを提供できません。

echolot grpc describe

echolot grpc describe [<url>] [--proto <file>] [--header <header> ...] [--insecure] [--timeout <seconds>] [--json]
echolot grpc describe --proto Alpenglow.echolot/specs/inventory.proto
Alpenglow.echolot/specs/inventory.proto: 1 service
alpenglow.inventory.v1.Inventory
  ListWarehouses (unary): alpenglow.inventory.v1.ListWarehousesRequest → alpenglow.inventory.v1.ListWarehousesResponse
  WatchStock (server streaming): alpenglow.inventory.v1.WatchStockRequest → alpenglow.inventory.v1.StockLevel
    skus: repeated string
  Reserve (unary): alpenglow.inventory.v1.ReserveRequest → alpenglow.inventory.v1.Reservation
    sku: string
    quantity: int32
    orderId: string

代わりにサーバを指定する(echolot grpc describe http://localhost:50051)と、そのリフレクションサービスに問い合わせます。各メソッドには、ユニタリ、サーバストリーミング、 クライアントストリーミング、双方向のどれか、リクエストとレスポンスの型、リクエストのフィールドが表示されます。

オプション意味
<url>サーバ(http://host:port または https://host:port)。--proto を使う場合は不要です。
--proto <file>サービスを記述する .proto ファイル。インポート先は同じ場所に置きます。指定しない場合は、サーバのリフレクションに問い合わせます。
-H、--header <header>'Name: value' 形式のメタデータ。複数回指定できます。
-k、--insecureTLS証明書の検証をスキップします。
--timeout <seconds>呼び出し全体を待つ秒数。デフォルトは30。
--json記述内容をJSONで出力します。

echolot grpc call

echolot grpc call <url> <method> [--data <json>] [--deadline <ms>] [--compress <algorithm>] [--proto <file>] [--header <header> ...] [--insecure] [--timeout <seconds>]

<method> は package.Service/Method です。メッセージはJSONで、デフォルトは {} です。-d - で標準入力から読み込みます。クライアントストリーミングのメソッドでは配列を指定し、 各要素が1つのメッセージになります。応答はJSONとして標準出力に出力されます。

echolot grpc call http://localhost:50051 alpenglow.inventory.v1.Inventory/Reserve \
  -d '{"sku": "TNT-MH-2P", "quantity": 1, "orderId": "ord_7Hk2Lw"}' \
  --proto Alpenglow.echolot/specs/inventory.proto

ステータス、受信したメッセージの数、所要時間は標準エラーに出力されます。OK 以外のステータスでは、終了コード1で終了します。

オプション意味
-d、--data <json>JSONのメッセージ。- は標準入力から読み込みます。デフォルトは {}。
--deadline <ms>ミリ秒単位のデッドライン。grpc-timeout として送信されます。
--compress <algorithm>送信するメッセージを圧縮します:gzip または deflate。圧縮された応答は、指定にかかわらず読み取れます。
--proto <file>サービスを記述する .proto ファイル。インポート先は同じ場所に置きます。指定しない場合は、サーバのリフレクションに問い合わせます。
-H、--header <header>'Name: value' 形式のメタデータ。複数回指定できます。
-k、--insecureTLS証明書の検証をスキップします。
--timeout <seconds>呼び出し全体を待つ秒数。デフォルトは30。

http:// はTLSなしのHTTP/2を使い、https:// はTLSを使います。よく使われる型(google.protobuf.Timestamp など)は組み込まれているため、それらをインポートする .proto ファイルに 追加のファイルは必要ありません。

終了コード

コード条件
0describe がサービスを見つけました。call がステータス OK で終了しました。
1サーバに接続できないか記述できなかった、または呼び出しのステータスが OK ではありませんでした。
64オプションが正しくありません。

このページの内容