Merged
requested to merge github/fork/Airthings/kotlin-multiplatform-configurable-http-client into master
Created by: tkirshboim
PR Description
The Problem
It is currently not possible to configure the Ktor HTTP client when using generated Kotlin Multiplatform code. Configuring the HTTP client can be useful for logging or customising request headers, to name a few use cases.
This issue has been raised in #10130 (closed) .
The Solution
This PR makes it possible to configure the Ktor HTTP client by allowing to pass an optional httpClientConfig
parameter to the generated API classes.
An example of how the new httpClientConfig
parameter can be used can be seen here:
private val petApi = PetApi(httpClientConfig = createHttpClientConfig())
private fun createHttpClientConfig(): ((HttpClientConfig<*>) -> Unit) =
{ clientConfig ->
clientConfig.install(UserAgent) {
agent = "my-pet-store-app/${Platform().platform}"
}
clientConfig.install(Logging) {
logger = object : Logger {
override fun log(message: String) {
println("HttpClient: $message")
}
}
level = LogLevel.ALL
}
}
Fixes #10130 (closed)
CCs
Kotlin technical committee: @jimschubert @dr4ke616 @karismann @Zomzog @andrewemery @4brunu @yutaka0m
Reporter of #10130 (closed) : @krzema12
PR checklist
-
Read the contribution guidelines. -
Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community. -
Run the following to build the project and update samples: ./mvnw clean package ./bin/generate-samples.sh ./bin/utils/export_docs_generators.sh
./bin/generate-samples.sh bin/configs/java*
. For Windows users, please run the script in Git BASH. -
File the PR against the correct branch: master
(5.3.0),6.0.x
-
If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.