Как установить basePath в Ktor аналогично Retrofit.Builder(). BaseUrl(baseUrl) Retrofit?
Я пробую Ktor
путем преобразования существующего проекта, который в настоящее время использует Retrofit
.
Хотя я мог легко преобразовать запрос во что-то вроде:
client.get {
url("$BASE_URL/something/somepage/another")
}
Кажется очень утомительным всегда добавлять $BASE_URL
на все пути каждый раз. При модернизации мы могли бы просто сделать что-то вроде:
Retrofit.Builder()
.baseUrl(BASE_URL)
.create(SomeServiceClass::class.java)
Я использую defaultRequest
и установка BASE_URL
там, но, видимо, вы могли только установить url.host
а не весь basePath
.
Есть ли способ сделать то же самое в Ktor
? или, если его нет, как лучше всего справиться с этим?
2 ответа
Вы можете!
Для этого вам необходимо установить запрос по умолчанию при создании экземпляра клиента.
val httpClient = HttpClient(Android) {
defaultRequest {
host = "my.zoo.com"
url {
protocol = URLProtocol.HTTPS
}
}
}
val response = httpClient.get<List<CatsResponse>>(
path = "animals/cats"
)
Это вызовет https://my.zoo.com/animals/cats
Надеюсь, это поможет:)
Из официальных документов
DefaultRequest позволяет настроить базовую часть URL-адреса, которая объединяется с URL-адресом запроса.
defaultRequest {
url("https://ktor.io/docs/")
}
Если вы сделаете следующий запрос, используя клиент с указанной выше конфигурацией,...
val response: HttpResponse = client.get("welcome.html")
... результирующий URL-адрес будет следующим: https://ktor.io/docs/welcome.html