В моем приложении я хотел бы абстрагировать запросы к моему API. Однако, чтобы получить доступ к моему API, пользователь должен войти в систему, и сервер отправляет обратно cook ie в форме JSESSIONID.
Поэтому у меня есть первый экземпляр Retrofit, созданный для этого с использованием интерфейса, содержащего способы входа пользователя в систему:
interface MyService {
@POST("api/login" )
fun login(@Header("cred")id: String): Completable
companion object {
operator fun invoke(): MyService {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val cookieHandler = CookieManager()
val client = OkHttpClient.Builder().addNetworkInterceptor(interceptor)
.cookieJar(JavaNetCookieJar(cookieHandler))
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build()
return Retrofit.Builder()
.baseUrl("http://mytestapi.com")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build()
.create(MyService::class.java)
}
}
Я хотел бы создать второй интерфейс Retrofit, который позволит мне выполнять очень специфичные c запросы, но для этого пользователь должен войти в систему. .
Как я могу передать маркер MyService
для входа в мою вторую модификацию?