Один ресурс API в Kotlin
Многие API адресуют объект по идентификатору в конце
пути. Ответ - один JSON-объект, его разбирают так же,
как локальную строку, только источником служит
response.body.
Чтение "/users/1" на typicode возвращает
пользователя с полем name. Модель снова
может быть короткой, лишние ключи отбрасывают
настройкой Json:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class ApiUser(val id: Int, val name: String)
fun main() {
val json = Json { ignoreUnknownKeys = true }
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://jsonplaceholder.typicode.com/users/1",
),
)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
val user = json.decodeFromString<ApiUser>(
response.body(),
)
println(user.name)
}
Тот же путь с другим числом в конце дает другую
запись. Достаточно поменять сегмент адреса и снова
прочитать name из разобранного объекта:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class ApiUser(val id: Int, val name: String)
fun main() {
val json = Json { ignoreUnknownKeys = true }
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://jsonplaceholder.typicode.com/users/2",
),
)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
val user = json.decodeFromString<ApiUser>(
response.body(),
)
println(user.id)
println(user.name)
}