【问题标题】:How to create a wrapper for Retrofit API using RxJava如何使用 RxJava 为 Retrofit API 创建一个包装器
【发布时间】:2020-02-17 19:01:10
【问题描述】:

我有两个 API,分别是 API 1 和 API 2。API 1 获取身份验证令牌,API 2 获取用户个人资料信息。我需要从 ViewModel 访问 API 2,但如果 API 2 出现身份验证错误,那么我需要先获取新令牌,然后再访问 API 2(用户信息)

目前,我对所有 API 使用 RxJava Single 和 Retrofit,但对 API 一个接一个。有很多 API 使用身份验证令牌,如果它在任何 API 中过期,那么我需要调用身份验证 API 并再次获取令牌,然后使用新的身份验证令牌调用 API。

设计包装器的最佳方式应该是什么,以便它可以与所有具有代码重用性的 API 一起使用。

提前致谢。

【问题讨论】:

    标签: android rx-java retrofit2


    【解决方案1】:

    我有一些想法。如果您有获取 API 响应的基本模型,您可以为响应代码制作自定义 getter 并检查 token_expired 中的响应代码。

    这是我从 API 获得的示例响应。

    { 
        response_code: "200",
        response_msg: "",
        result: ...
    }
    

    这是我的 BaseModel。

    class BaseModel<T> {
        @SerializedName("response_code")
        var response_code: Int? = null
            get() {
                if(field == ErrorStatusCode.TOKEN_EXPIRE) {
                    ErrorCodeHandler.requestNewToken()
                }
                return field
            },
        @SerializedName("response_msg")
        var response_msg: String? = null
        @SerializedName("result")
        var data: T? = null
    }
    

    所以每当令牌过期时,我都会通过调用ErrorCodeHandler.requestNewToken() 来请求网络令牌

    但如果你想调用发现令牌超时的 API,我也不知道该怎么做。

    PS。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-13
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多