Android Retrofit动态端点URL

时间:2014-09-29 23:12:59

标签: android rest retrofit

有没有办法为改造库提供动态端点网址。 我知道修改用于生成实现的改进的接口是困难的或不可能的,但还有另一种方法。

例如,我可以动态更改“/ users / {user} / repos”

public interface GitHubService {
  @GET("/users/{user}/repos")
  List<Repo> listRepos(@Path("user") String user);
}

我想这样做的原因是因为api设计者提供了一个enpoint url的地图,而客户端坚持使用它们,这样当api改变时我们就不需要发布应用程序的更新了。

2 个答案:

答案 0 :(得分:0)

我甚至不知道它是否会起作用,但我会尝试这样做:

listReposTemplateUrl()返回当前api的模板,其中{user}将被替换。然后,您将其替换为特定用户,并将已更换{user}的整个网址传递给listRepos()来电。

我的api界面:

public interface MyApi {
    @GET("/apiTemplates/listRepos")
    String listReposTemplateUrl();

    @GET("/{listReposUrl}")
    List<Repo> listRepos(@Path("listReposUrl") String listReposUrl);
}

助手类:

class TemplateUrlFiller {
    public static String fillListRepos(String template, String user) {
        return template.replace("{user}", user);
    }
}

用法:

String user = "Bob";
String listReposTemplate = getMyApi().listReposTemplateUrl(); // "/users/{user}/repos" || "/giveMyRepos/{user}" || ...

List<Repo> = getMyApi().listRepos(TemplateUrlFiller.fillListRepos(listReposTemplate, user));

答案 1 :(得分:0)

您可以在界面中使用它:

@GET("{id}.htm?ca=2_s")
    Call<ResponseBody> getAppartsDetailed(@Path(value = "id", encoded = true)String appartId);

关键是

  

@Path(value =&#34; id&#34;,encoded = true)

然后你会得到

  

yourBaseUrl / 1164374459.htm?CA = 2_S