RPC复用同一请求/响应类型报错,能否复用而非创建重复类型?
问题解答
关于重复使用请求类型的错误
你遇到的这个错误并非Protocol Buffers本身的限制,而是你使用的RPC框架(或配套的代码生成工具、自定义lint规则)的约束——部分团队规范会强制要求每个RPC的请求/响应类型唯一,避免后续扩展某个RPC时影响其他依赖同类型的接口。
是否必须创建重复类型?不需要
你有两种方式复用请求类型:
- 调整规则/框架配置:如果这个错误来自lint工具或者框架的强制检查,直接关闭对应的规则或修改配置,就能直接复用
BookRequest给多个RPC接口,比如你最初写的代码:
rpc GetTitle(BookRequest)returns (TitleResponse){} rpc GetPrice(BookRequest) returns (PriceResponse){} message BookRequest { string book_id = 1; }
- 用包装类型间接复用:如果必须遵守“每个RPC用唯一请求类型”的规范,可以通过嵌套包装的方式复用核心结构,避免重复定义字段:
rpc GetTitle(GetTitleRequest)returns (TitleResponse){} rpc GetPrice(GetPriceRequest) returns (PriceResponse){} message GetTitleRequest { BookRequest core = 1; } message GetPriceRequest { BookRequest core = 1; } message BookRequest { string book_id = 1; }
关于返回列表的BookResponse复用
这个完全可以直接复用,多个RPC接口都可以返回BookResponse类型,不会有问题,比如:
rpc GetRecommendBooks(RecommendRequest) returns (BookResponse){} rpc SearchBooks(SearchRequest) returns (BookResponse){} message BookResponse { repeated Book books = 1; }
内容的提问来源于stack exchange,提问作者user3145047
相关产品推荐
相关产品推荐

