Creare una web api in Kotlin con Ktor

Mattepuffo's logo
Creare una web api in Kotlin con Ktor

Creare una web api in Kotlin con Ktor

Ktor è un web framework per Kotlin per la creazione di applicazione asincrone sia client che server.

In questo articolo vediamo come usarlo per creare una web api; ovviamente faremo un esempio basico.

Io ho creato il progetto partendo dalla pagina di start, aggiungendo i plugins GSON e Routing.

Questo il mio file Application.kt, da dove parte tutta l'applicazione:

import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import mp.com.plugins.*

fun main() {
    embeddedServer(Netty, port = 8080, host = "0.0.0.0", module = Application::module)
        .start(wait = true)
}

fun Application.module() {
    configureSerialization()
    configureRouting()
}

Nella "cartella" plugins ho due file.

Serialization.kt dove attivo il plugin per il JSON:

import io.ktor.serialization.gson.*
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.server.application.*

fun Application.configureSerialization() {
    install(ContentNegotiation) {
        gson {}
    }
}

E Routing.kt, dove metteremo tutte le nostre rotte:

import io.ktor.server.routing.*
import io.ktor.server.response.*
import io.ktor.server.application.*
import mp.com.models.Customer

fun Application.configureRouting() {
    routing {
        get("/") {
            val listCustomer = listOf<Customer>(
                Customer(1, "nome 1", "cognome 1"),
                Customer(2, "nome 2", "cognome 2"),
                Customer(3, "nome 3", "cognome 3"),
            )
            call.respond(listCustomer)
        }
    }
}

Per ora ce ne è una sola che ci manda in output la lista in formato JSON.

Poi nella "cartella" models ci mettiamo le classi che fanno contenitori; ad esempio Customer.kt:

data class Customer(val id: Int, val firstName: String, val lastName: String)

E direi che è tutto!

Magari prossimamente approfondiamo qualche cosa, come la connessione ad un db.

Enjoy!


Condividi

Commentami!