You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Wire框架调用gRPC风格URL时的路径与冒号配置问题

解决Wire框架调用Google Photos gRPC API的路径问题

我来帮你搞定这两个Wire框架使用里的路径配置坑——这俩都是适配Google这类gRPC Transcoding(REST风格gRPC)场景时的常见问题:

1. 正确保留API版本前缀/v1

你当前在baseUrl里加/v1的写法,Wire会默认把它当作服务根路径的一部分,反而会忽略掉。更合理的做法是把baseUrl只设为根域名,然后通过proto文件的HTTP注解来指定包含版本前缀的完整路径:

GrpcClient.Builder()
    .client(okHttpClient)
    .baseUrl("https://photoslibrary.googleapis.com") // 仅保留根域名
    .build()

2. 配置支持带冒号的URL格式

Google Photos的mediaItems:search是gRPC Transcoding的标准路径格式,需要在proto文件中添加google.api.http注解来绑定方法与HTTP路径。具体步骤如下:

首先,在proto文件中导入Google的API注解依赖:

import "google/api/annotations.proto";

然后修改服务方法,添加HTTP映射配置:

service MediaItems {
  rpc Search(SearchMediaItemCommand) returns (stream SearchMediaItemUpdate) {
    option (google.api.http) = {
      post: "/v1/mediaItems:search"
      body: "*" // 表示将请求体完整作为HTTP请求的body
    };
  }
}

这样Wire生成代码时,就会根据这个注解构造出符合要求的/v1/mediaItems:search路径,而不是默认的/MediaItems/Search格式。

额外提示

如果你的项目还没引入Google API的proto依赖,需要在构建工具中添加对应依赖(以Gradle为例):

implementation "com.google.api.grpc:proto-google-common-protos:2.20.0"

这种方式比用OkHttp拦截器修改路径优雅得多,完全符合Wire框架的设计逻辑。

内容的提问来源于stack exchange,提问作者Jacek Kwiecień

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:27:43