Как создать оболочку для Retrofit API с помощью RxJava - PullRequest
2 голосов
/ 17 февраля 2020

У меня есть два API, скажем, API 1 и API 2. API 1 получает токен аутентификации, а API 2 - информацию профиля пользователя. Мне нужно нажать API 2 из ViewModel, но если API 2 выдает ошибку аутентификации, мне нужно сначала получить новый токен, а затем нажать API 2 (информация о пользователе)

В настоящее время я использую Rx Java Single и Модификация для всех API, но для API по одному. Существует множество API, которые используют токен аутентификации, и если срок его действия истекает в любом из API, мне нужно вызвать API аутентификации и снова получить токен, а затем вызвать API с новым токеном аутентификации.

Что следует быть наилучшим способом разработки оболочки, чтобы ее можно было использовать со всеми API с возможностью повторного использования кода.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 февраля 2020

У меня есть идея. Если у вас есть базовая модель для получения ответа для API, вы можете создать собственный геттер для кода ответа и проверить, является ли код ответа в 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
}

Поэтому, когда срок действия токена истекает, я буду запрашивать Net токен по вызову ErrorCodeHandler.requestNewToken()

Но если вы хотите вызвать API, для которого обнаружен тайм-аут Я понятия не имею, что делать.

PS. Надеюсь, что это поможет.

...