Pre prácu s REST API používame multiplatformovú knižnicu Ktor. Jej Setup môže byť zložitejší, hlavne ak budeme chcieť implementovať autentifikáciu (Basic, JWT, Bearer a pod.). Najprv uvediem návod bez autentifikácie, v samostatnej kapitole ukážem aj autentifikáciu.
Oficiálne návody:
Keďže chceme pracovať s internetom, nesmieme zabudnúť pridať Internet permission do AndroidManifest.xml. Je to preto,
aby tvoj Android telefón aj GooglePlay vedeli, že aplikácia pracuje s internetom a tým može byť potencionálne nebezpečná.
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Potrebujem pracovat s internetom -->
<uses-permission android:name="android.permission.INTERNET" />
<application/>
</manifest>
Následne pridáme závislosti:
dependencies {
implementation("io.ktor:ktor-client-core:3.5.2") // nevyhnutne
implementation("io.ktor:ktor-client-cio:3.5.2") // nevyhnutne
implementation("io.ktor:ktor-client-content-negotiation:3.5.2") // ak chceme parsovanie JSON
implementation("io.ktor:ktor-serialization-kotlinx-json:3.5.2") // ak chceme parsovanie JSON
implementation("io.ktor:ktor-client-logging:3.5.2") // ak chceme vidiet logy
}
V samostatnom súbore, ktorý môžeme pomenovať ktor.kt, alebo api_client.kt a pod. Vytvoríme globálnu konfiguráciu
nášho HttpClient-a. Nakonfigurovaný klient bude vedieť či a ako má logovať chyby, ako má parsovať JSONy a či má
nejakým spôsobom upravovať každý request pridaním hlavičiek, či úpravou URL.
val client = HttpClient {
// pri chybe (>= 300) vyhodi exception
expectSuccess = true
// povolit logovanie
install(Logging)
// uprav kazdy request pridanim hlavicky (nepovinne)
install(DefaultRequest) {
headers.appendIfNameAbsent("X-App-Platform", "Android")
}
// nastav REST API - pracovanie s JSON
install(ContentNegotiation) {
json(Json {
prettyPrint = true // odosielaj pekne formatovany json
isLenient = true // akceptuj chybajuce uvodzovky v json-e
ignoreUnknownKeys = true // ignoruj nezname kluce
decodeEnumsCaseInsensitive = true // parsuj enumy bez case sensitivity
explicitNulls = false // null nastavi vtedy, ak atribut neexistuje, alebo je null
})
}
}