API auf Kotlin: REST, GraphQL und gRPC — von REST bis zu Microservices

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kotlin und APIs: Die drei Säulen der modernen Entwicklung

\n\n

Haben Sie sich jemals gefragt, warum einige Anwendungen fliegen, während andere selbst auf Flaggschiff-Geräten träge sind? Das Geheimnis liegt oft nicht in der Hardware, sondern darin, wie sie mit dem Server kommunizieren. Wenn Sie in Kotlin programmieren – sei es ein Backend mit Ktor oder eine Android-App – werden Sie früher oder später vor der Wahl stehen: REST, GraphQL oder gRPC?

\n\n

Bei PythonLib lieben wir es, Technologien bis ins kleinste Detail zu verstehen. Heute analysieren wir drei Ansätze für die Arbeit mit APIs auf Kotlin. Kein überflüssiges Geschwafel: nur Code, Vergleiche und reale Anwendungsfälle. Los geht's!

\n\n

REST API auf Kotlin: Ein Klassiker, der nie alt wird

\n\n

REST ist wie ein schwarzer Anzug: überall passend, einfach und verständlich. In Kotlin gibt es zwei Hauptakteure für REST: Ktor (für die Serverseite) und Retrofit (für die Clientseite).

\n\n

Server mit Ktor: API in 5 Minuten schreiben

\n\n

Ktor ist ein Framework von JetBrains, das speziell für Kotlin entwickelt wurde. Es ist asynchron, leichtgewichtig und zwingt keine unnötigen Abhängigkeiten auf.

\n\n
// build.gradle.kts\nimplementation("io.ktor:ktor-server-netty:2.3.7")\nimplementation("io.ktor:ktor-server-content-negotiation:2.3.7")\nimplementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")
\n\n

Und nun der Server selbst:

\n\n
import io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.routing.*\nimport io.ktor.server.response.*\nimport io.ktor.serialization.kotlinx.json.*\nimport io.ktor.server.plugins.contentnegotiation.*\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(val id: Int, val name: String, val email: String)\n\nfun main() {\n    embeddedServer(Netty, port = 8080) {\n        install(ContentNegotiation) {\n            json()\n        }\n        routing {\n            get("/api/users") {\n                val users = listOf(\n                    User(1, "Anna", "anna@example.com"),\n                    User(2, "Boris", "boris@example.com")\n                )\n                call.respond(users)\n            }\n            get("/api/users/{id}") {\n                val id = call.parameters["id"]?.toIntOrNull()\n                if (id != null) {\n                    call.respond(User(id, "Test", "test@example.com"))\n                } else {\n                    call.respondText("Ungültige ID", status = io.ktor.http.HttpStatusCode.BadRequest)\n                }\n            }\n        }\n    }.start(wait = true)\n}
\n\n

Dieser Code ist eine vollwertige REST API auf Kotlin mit zwei Endpunkten. Ktor serialisiert die Daten dank kotlinx.serialization automatisch in JSON.

\n\n

Client mit Retrofit: Verbindung zu jeder API herstellen

\n\n

Retrofit ist der De-facto-Standard für die Android-Entwicklung. Mit Kotlin funktioniert es dank Coroutinen perfekt.

\n\n
// build.gradle.kts\nimplementation("com.squareup.retrofit2:retrofit:2.9.0")\nimplementation("com.squareup.retrofit2:converter-gson:2.9.0")\nimplementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
\n\n

Deklarieren des Interfaces:

\n\n
interface ApiService {\n    @GET("users")\n    suspend fun getUsers(): List<User>\n\n    @GET("users/{id}")\n    suspend fun getUser(@Path("id") userId: Int): User\n\n    @POST("users")\n    suspend fun createUser(@Body user: User): User\n}
\n\n

Client erstellen und Anfrage senden:

\n\n
val retrofit = Retrofit.Builder()\n    .baseUrl("https://api.example.com/")\n    .addConverterFactory(GsonConverterFactory.create())\n    .build()\n\nval service = retrofit.create(ApiService::class.java)\n\n// In einer Coroutine\nGlobalScope.launch {\n    val users = service.getUsers()\n    println(users)\n}
\n\n

Vorteile von REST: Einfachheit, Caching über HTTP, riesige Community.
\nNachteile: Over-Fetching und Under-Fetching von Daten – Sie erhalten oft mehr oder weniger als benötigt.

Blogs

Buchempfehlungen