okHttp3 слишком медленный
Отправляю запросы на сервер. С помощью Authenticator получаю bearer token, добавляю его в хеддер. Однако ответ получаю за 2,5 секунды (сервер работает корректно, тестировала через postman, такой задержи не было). В чем может быть проблема?
NetworkModule.kt
@Module
class NetworkModule {
private val json = Json {
ignoreUnknownKeys = true
coerceInputValues = true
}
@Singleton
@Provides
fun provideOkHttpClient(
tokenAuthenticator: TokenAuthenticator
): OkHttpClient =
OkHttpClient().newBuilder()
.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.authenticator(tokenAuthenticator)
.build()
@Singleton
@Provides
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
@Singleton
@Provides
fun provideSessionApi(retrofit: Retrofit): SessionService {
return retrofit.create(SessionService::class.java)
}
@Singleton
@Provides
fun provideAnimalApi(retrofit: Retrofit): AnimalService =
retrofit.create(AnimalService::class.java)
@Singleton
@Provides
fun provideRetrofitAnimalDataSource(
animalService: AnimalService
): RetrofitAnimalDataSource {
return RetrofitAnimalDataSourceImpl(animalService)
}
}
TokenAuthenticator.kt
class TokenAuthenticator @Inject constructor(
private val sessionService: Provider<SessionService>
) : Authenticator {
override fun authenticate(route: Route?, response: Response): Request {
val token = getUpdatedToken()
return response.request.newBuilder()
.header("Authorization", token)
.build()
}
private fun getUpdatedToken(): String {
val tokenResponse = sessionService.get().updateToken().execute().body()
return tokenResponse?.tokenType + " " + tokenResponse?.accessToken
}
}
SessionService.kt
interface SessionService {
@POST("oauth2/token")
@FormUrlEncoded
fun updateToken(
@Field("grant_type") grantType: String = GRANT_TYPE,
@Field("client_id") clientId: String = CLIENT_ID,
@Field("client_secret") clientSecret: String = CLIENT_SECRET
): Call<SessionResponse>
}
AnimalService.kt
interface AnimalService {
@Headers("Content-Type: application/json;charset=UTF-8")
@GET("animals")
suspend fun getAnimals(): AnimalsResponse
@Headers("Content-Type: application/json;charset=UTF-8")
@GET("animals/{id}")
suspend fun getAnimalById(@Path("id") id: Int): AnimalDetailsMainResponse
}