【问题标题】:Can Retrofit support different versions of the same api in AndroidRetrofit能否支持Android中同一个api的不同版本
【发布时间】:2019-02-21 20:50:12
【问题描述】:

我有一个 Android 应用程序,我正在使用 Retrofit 发出 http 请求。服务器端已经提出了更新版本的 api。我的应用程序必须同时支持旧版本和新版本。例如:

  1. 旧版:https://api.company.com/abc/def/2018-01-01/add
  2. 新版本:https://api.company.com/abc/def/2019-01-01/add

我的 BASE_URL 是:https://api.company.com

我的问题是,在 Retrofit 中支持这两个版本的最佳方式是什么。使用旧版本还是新版本的决定是在运行时做出的。

提前致谢。

【问题讨论】:

  • 能否将api版本参数传递给改造接口方法?
  • 我想过,但它是一个有很多 api 的大应用程序,这意味着要更新很多代码。因此,决定反对它。有没有一种聪明的方法可以将它用作路径参数。

标签: android api retrofit version


【解决方案1】:

你可以用路径和你的界面做这样的事情

@GET("abc/def/{version}/add")
    Call<List<String>> getFilterValues(@Path(value = "version", encoded = true))

版本将被放入您拥有{version}的网址中

使用示例

String version = "2018-01-01";

if(useNewVersion){
    version = "2019-01-01";
}

Call<List<String>> call = api.getFilterValues(version);

【讨论】:

  • 但是那个版本不是必须保持不变吗?我必须在运行时决定版本。
  • @tyczi make @GET("/abc/def/{version}/add") Call&lt;List&lt;String&gt;&gt; getFilterValues(@Path(value = "version", encoded = true) String path) bcoz 改造在改造客户端中获取基本网址以 / 结尾。
  • @Kanika 使 https://api.company.com/ 保持不变。其他部分用作动态 URL。这是一个很好的做法,如果您的应用程序从调试到开发,那么您只需更改域名,其他事情都是一样的。
  • @Kanika 谁说它必须保持不变?该路径值只是您传递的参数,就像其他任何东西一样。我用用法示例编辑了我的答案
【解决方案2】:

这是上述答案的扩展变体,但如果端点太多,imo也会很困难:

@GET
Single<JsonResponse> getSomething(@Url String url);


String requestUrl = "....";
restApiService.getSomething(requestUrl);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多