【问题标题】: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。希望对您有所帮助。