Fetching data from REST APIs using Ktor in Android

Jordan Mungujakisa
2 min readFeb 9, 2024

--

Photo by Marc Reichelt on Unsplash

To make an HTTP request using Ktor, you need mainly two dependencies

  1. The Ktor client which provides the main client functionality
implementation("io.ktor:ktor-client-core:$ktor_version")

2. The Ktor engine which is dependent on the platform and is responsible for processing network requests. Example client engines include CIO, Apache, Android, iOS, etc.

implementation("io.ktor:ktor-client-android:$ktor_version")

For a Kotlin Multiplatform (KMM) Project, you need to add a dependency for the required Ktor engine to the corresponding source set.

Reference:

https://ktor.io/docs/client-dependencies.html#engine-dependency

Making HTTP requests

The following steps are required to make an HTTP request;

  1. Set up the client passing the engine as a parameter. (The engine parameter is optional)
val client = HttpClient(Android)

2. Making the HTTP request.

We use the request method which takes a URL as a parameter, inside this function you can specify the HTTP methods, add headers & cookies, define the request body, etc.

val httpResponse: HttpResponse = client.request("www.example.com") {
//configure the request parameters

//specify the http method
method = HttpMethod.Get

//specify parameters
url{
parameters.append("latitude", lat)
parameters.append("longitude", lon)
}

//specify request headers
headers {
append(HttpHeaders.Accept, "text/html")
append(HttpHeaders.Authorization, "abc123")
append(HttpHeaders.UserAgent, "ktor client")
}

//specify request body as plain text
setBody("Body content")
}

A request returns a HTTPResponse which can be parsed as a String, JSON, etc.

Receiving a response

The HTTPResponse object contains information about the response, such as the status code, headers, and content. The response content can be obtained in various forms, including raw bytes, JSON, or other custom deserialization methods.

  1. To get the status code;
val statusCode = httpResponse.status.value
print("Response Status Code = $statusCode")

This can be used to determine whether the request was made successfully and therefore present the appropriate message to the user.

2. To get the response body;

val responseBody = httpResponse.body()

This method returns the response body from the API which you can then parse appropriately in your app.

Happy coding 🤓

Ciao

If you found this helpful, consider clapping and following for more content like this!

--

--

Jordan Mungujakisa

Mobile app alchemist who is trying to transmute elegant designs, into elegant code, into beautiful mobile app experiences.