Repolode
grpc-ecosystem

grpc-ecosystem/grpc-gateway

Goサービス向けに、RESTfulなJSON HTTP呼び出しをgRPCリクエストへ変換するリバースプロキシサーバーを生成するprotocプラグイン。

スター
20,008
フォーク
2,415
未解決の Issue
150
最終コミット
16 時間前

これは何?

gRPC-Gatewayは、Protocol Buffersコンパイラ(protoc)のプラグインです。protobufのサービス定義を読み込み、リバースプロキシサーバーを生成します。このサーバーはRESTfulなHTTP+JSONリクエストを受け付けてgRPCサービスに転送するため、1つの実装でgRPCクライアントとJSONクライアントの両方に対応できます。

HTTPのマッピングは、.protoファイル内のgoogle.api.httpアノテーションによって定義します。アノテーションがない場合でも、ジェネレーターはデフォルトのマッピングでメソッドを公開できます。また、protoファイルを変更できない場合は、外部のgRPC API ConfigurationファイルでHTTPルールを指定できます。さらに、Swagger 2.0定義を生成するprotoc-gen-openapiv2と、OpenAPI 3.1を出力するアルファ版のprotoc-gen-openapiv3も含まれています。

生成されたコードは、Go向けのgrpc-gateway runtimeパッケージに依存します。クエリ文字列とパスパラメーターに対応し、PATCHリクエストをフィールドマスクにマッピングできます。また、ストリーミングレスポンスを改行区切りJSONとして返し、Grpc-TimeoutヘッダーによるgRPCタイムアウトの指定もサポートします。

主な機能

  • 01HTTP+JSONリクエストをgRPC呼び出しに変換するリバースプロキシを生成します。
  • 02google.api.httpアノテーションを使い、HTTPのパス、クエリパラメーター、リクエストボディをgRPCメッセージにマッピングします。
  • 03protoc-gen-openapiv2でSwagger 2.0定義を生成します。
  • 04アルファ版のOpenAPI 3.1ジェネレーターprotoc-gen-openapiv3を提供します。
  • 05PATCHリクエストをフィールドマスク付きのgRPCリクエストに変換し、ストリーミングレスポンスを改行区切りJSONとして返します。

ユースケース

  • JSON over RESTにしか対応していないクライアントに、既存のgRPCサービスを公開する。
  • 内部でgRPCを導入しながら、後方互換性のためにRESTful APIを維持する。
  • protobuf定義からSwaggerまたはOpenAPIドキュメントを直接生成する。
  • ブラウザーやgRPCのサポートが限定的な言語から、gRPCバックエンドを利用できるようにする。

クイックスタート

  1. 1

    Goでgatewayプラグインをインストールする

    go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
  2. 2

    google.api.httpアノテーションを付けた.protoファイルにgRPCサービスを記述する

  3. 3

    プラグインを使い、protocまたはbufでリバースプロキシのコードを生成する

    protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt paths=source_relative your/service/v1/your_service.proto

使う前に知っておきたいこと

  • Goサービス向けのGoコードのみを生成します。
  • コード生成にはprotocまたはbufとprotobufツールチェーンのセットアップが必要です。
  • OpenAPI 3.1ジェネレーター(protoc-gen-openapiv3)はアルファ版で、出力が変更される可能性があります。

収録されている特集

トピック

よくある質問

grpc-gateway とは?
Goサービス向けに、RESTfulなJSON HTTP呼び出しをgRPCリクエストへ変換するリバースプロキシサーバーを生成するprotocプラグイン。 gRPC-Gatewayは、Protocol Buffersコンパイラ(protoc)のプラグインです。protobufのサービス定義を読み込み、リバースプロキシサーバーを生成します。このサーバーはRESTfulなHTTP+JSONリクエストを受け付けてgRPCサービスに転送するため、1つの実装でgRPCクライアントとJSONクライアントの両方に対応できます。
grpc-gateway は無料で使えますか?ライセンスは?
grpc-gateway は BSD-3-Clause ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
grpc-gateway は今もメンテナンスされていますか?
活発にメンテナンス中。grpc-gateway の最終コミットは 2026年10月22日 です。
grpc-gateway は何に使えますか?
JSON over RESTにしか対応していないクライアントに、既存のgRPCサービスを公開する。 内部でgRPCを導入しながら、後方互換性のためにRESTful APIを維持する。 protobuf定義からSwaggerまたはOpenAPIドキュメントを直接生成する。 ブラウザーやgRPCのサポートが限定的な言語から、gRPCバックエンドを利用できるようにする。
grpc-gateway のインストール方法は?
Goでgatewayプラグインをインストールする: go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway google.api.httpアノテーションを付けた.protoファイルにgRPCサービスを記述する プラグインを使い、protocまたはbufでリバースプロキシのコードを生成する: protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt paths=source_relative your/service/v1/your_service.proto
grpc-gateway はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/grpc-ecosystem/grpc-gateway

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト