gpt4 book ai didi

java - 使用 Retrofit、RxJava 和 Observable.share 重新验证?

转载 作者:搜寻专家 更新时间:2023-11-01 07:46:39 35 4
gpt4 key购买 nike

前提:

  1. 我们使用 3 小时后过期的 session token
  2. 我必须使用一个名为 auth 的特殊调用
  3. 目前,当 session token 过期时,我们不会抢先刷新它,而是尝试调用,如果该调用返回 401-UNAUTHORIZED,我们调用 auth 并重试电话。它有效,但它并不漂亮
  4. 我们正在使用 Retrofit1 和 RxJava1(目前无法更新)

我想以这种方式进行更改,我会在调用之前检查是否需要刷新 token 。

我想通过链接 Observable 并在调用之间共享 Auth-Observable 来实现这一点

这样想:

  1. 检查SessionToken是即将过期还是已经过期
  2. 启动 Auth-Call(返回一个 Observable)
  3. 将我的调用链接到 Auth-Call Observable
  4. 当另一个调用发生并且看到 session token 即将过期时,检查是否有正在进行的 Auth-Call。如果有,将新调用链接到 Auth-Call

第一个问题:这实际上是一个聪明的想法吗?
第二个问题:这真的可能吗?
第三个问题:我到底该怎么做?

最佳答案

这个技巧是使用单例 Observable

Observable<AuthResponse> mAuthSingleton = retrofit.authenticate()
.doOnNext( response -> saveSessionToken(response.getSessionToken())
.share();


Observable<AuthResponse> getAuthCallWhenNecessary(){
if(sessionToken == null ||sessionToken.isAboutToExpire())
return mAuthSingleton;
else
return Observable.just(new AuthResponse());
}

Observable<WhateverResponse> getWhatever(){
return getAuthCallWhenNecessary().flatMap(response -> retrofit.getWhatever());
}

您的调用不关心他们在调用 getAuthCallWhenNecessary 时获得的 AuthResponse 是否真实,他们只关心他们从 Auth 获得响应对象

这是我(有点)记录的工作示例:https://gist.github.com/TormundsMember/ebcb3782b14477a3d5b72e898929fe61

关于java - 使用 Retrofit、RxJava 和 Observable.share 重新验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42782013/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com