Как установить basePath в Ktor, аналогично Retrofit. Retrofit.Builder (). BaseUrl (baseUrl)? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь 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? или, если их нет, как лучше всего справиться с этим?

1 Ответ

2 голосов
/ 02 марта 2020

Вы можете!

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

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

Надеюсь, это поможет:)

...