改造中的动态路径

f2p*_*eek 21 rest android httprequest retrofit

我正在尝试使用类似的方式访问资源http://192.168.1.64:5050/api/{api_key}/updater.info.

我该如何动态设置api_key参数?我试过使用RequestInterceptor基本网址没有成功的地方http://192.168.1.64:5050/api/{api_key}.

@Override
public void intercept(RequestFacade request) {
    request.addPathParam("api_key", apiKey);
}
Run Code Online (Sandbox Code Playgroud)

还有其他选择吗?

cgr*_*cgr 30

用这个:

@PUT("/path1/path2/{userId}")
void getSomething(
        @Path("userId") String userId
);
Run Code Online (Sandbox Code Playgroud)

你调用这样的方法:

String userId = "1234";
service.getSomething(userId);
Run Code Online (Sandbox Code Playgroud)


Jak*_*ton 16

路径替换不会发生在API端点的基本URL内,只会发生在方法上的相对URL字符串.我将假设您不希望在每个接口方法声明上为相对URL添加前缀.

虽然措辞不力,但Endpoint各州的犹太人:

调用者应始终查询实例以获取最新值,而不是缓存返回的值.

这意味着对于每个请求,Endpoint将查询实例以获取基本URL的值.

您可以提供Endpoint可以更改API密钥值的自定义实现:

public final class FooEndpoint implements Endpoint {
  private static final String BASE = "http://192.168.1.64:5050/api/";

  private String url;

  public void setApiKey(String apiKey) {
    url = BASE + apiKey;
  }

  @Override public String getName() {
    return "default";
  }

  @Override public String getUrl() {
    if (url == null) throw new IllegalStateException("API key not set.");
    return url;
  }
}
Run Code Online (Sandbox Code Playgroud)