API en Kotlin : REST, GraphQL et gRPC — de REST aux microservices

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Kotlin et les API : les trois piliers du développement moderne

\n\n

Avez-vous déjà réfléchi à pourquoi certaines applications volent alors que d'autres ralentissent même sur des flagships ? Le secret réside souvent non pas dans le matériel, mais dans la façon dont elles communiquent avec le serveur. Si vous codez en Kotlin — que ce soit un backend avec Ktor ou une application Android — tôt ou tard, vous serez confronté au choix : REST, GraphQL ou gRPC ?

\n\n

Chez PythonLib, nous aimons comprendre les technologies dans les moindres détails. Aujourd'hui, nous allons décomposer trois approches pour travailler avec des API en Kotlin. Pas de blabla : seulement du code, des comparaisons et des cas réels. C'est parti !

\n\n

API REST en Kotlin : un classique qui ne se démode pas

\n\n

REST, c'est comme un costume noir : approprié partout, simple et compréhensible. En Kotlin, pour REST, il y a deux acteurs principaux : Ktor (pour la partie serveur) et Retrofit (pour la partie cliente).

\n\n

Serveur avec Ktor : écrivez une API en 5 minutes

\n\n

Ktor est un framework de JetBrains, créé spécialement pour Kotlin. Il est asynchrone, léger et n'impose pas de dépendances superflues.

\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

Et maintenant le serveur lui-même :

\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@example.com"),\n                    User(2, "Борис", "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@example.com"))\n                } else {\n                    call.respondText("Неверный ID", status = io.ktor.http.HttpStatusCode.BadRequest)\n                }\n            }\n        }\n    }.start(wait = true)\n}
\n\n

Ce code est une API REST complète en Kotlin avec deux endpoints. Ktor sérialise automatiquement les données en JSON grâce à kotlinx.serialization.

\n\n

Client avec Retrofit : connectez-vous à n'importe quelle API

\n\n

Retrofit est le standard de facto pour le développement Android. Avec Kotlin, il fonctionne parfaitement grâce aux coroutines.

\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

Déclarons l'interface :

\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

Créons le client et effectuons une requête :

\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// Dans une coroutine\nGlobalScope.launch {\n    val users = service.getUsers()\n    println(users)\n}
\n\n

Avantages de REST : simplicité, mise en cache via HTTP, immense communauté.
\nInconvénients : sur-récupération et sous-récupération de données — vous obtenez souvent plus ou moins que ce dont vous avez besoin.

Blogs

Book Recommendations