概述目标:为gRPC服务提供REST/JSON入口,自动将请求映射到gRPC方法,并生成OpenAPI文档供前端与集成使用。适用:统一后端gRPC,同时兼容REST API客户端。核心与实战proto定义与HTTP注解:syntax = "proto3";
package api;
import "google/api/annotations.proto";
service Orders {
rpc GetOrder (GetOrderRequest) returns (Order) {
option (google.api.http) = { get: "/v1/orders/{id}" };
}
}
message GetOrderRequest { string id = 1; }
message Order { string id = 1; string status = 2; double amount = 3; }
生成Gateway与OpenAPI:protoc -I . -I ${GOPATH}/src -I third_party \
--grpc-gateway_out grpc_api_configuration=orders.yaml,logtostderr=true:. \
--openapiv2_out logtostderr=true:. \
--go_out . --go-grpc_out . api/orders.proto
运行Gateway:orders-gateway --grpc-server-endpoint localhost:50051 --http-listen :8080
示例REST请求:curl -s http://localhost:8080/v1/orders/ORD-123 | jq
OpenAPI文档:cat api.swagger.json | jq '.paths["/v1/orders/{id}"]'
验证与监控路由映射:验证路径参数映射与返回JSON;观察错误码与gRPC status对应。文档质量:在CI中校验生成的OpenAPI;为前端与第三方导出文档。性能与可靠性:观察Gateway的延迟与吞吐;可借助Envoy/Nginx做前置代理与限流。常见误区注解缺失导致REST路由未生成;需为每个方法添加`google.api.http`。OpenAPI未随proto更新;需在构建流程中自动生成与发布。忽视错误码映射;应明确HTTP错误与gRPC status的对应关系。结语gRPC-Gateway通过注解与代码生成为gRPC服务提供REST入口与文档,兼顾统一后端与广泛互操作性需求。

发表评论 取消回复