OpenAPI仕様から多くの言語・フレームワーク向けのAPIクライアントSDK、サーバースタブ、ドキュメントを生成
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
Goでgatewayプラグインをインストールする
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway - 2
google.api.httpアノテーションを付けた.protoファイルにgRPCサービスを記述する
- 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 の数値は毎日更新されます。
関連プロジェクト
OpenAPI/Swagger定義からAPIクライアントSDK、サーバースタブ、HTMLドキュメントを生成するコマンドラインツール。
HTTPとgRPCの統一トランスポート、ミドルウェア、Protobufベースのコード生成を備えた、クラウドネイティブなマイクロサービス構築向けの軽量Goフレームワーク。
Swagger UIは、OpenAPI/Swagger仕様ファイルからブラウザー上で操作可能なAPIドキュメントを生成します。
インタラクティブなAPIリファレンス、オフラインファーストのAPIクライアント、多数のWebフレームワーク向け連携機能を備えたオープンソースのOpenAPI/Swaggerツールキット。
JSON入力でgRPCサーバーを呼び出す、curlのようなコマンドラインツール。server reflectionやprotoファイルからスキーマを取得できます。