Bibliothèque GraphQL Kotlin : guide complet pour travailler avec les API
GraphQL est un langage de requête pour les API qui permet aux clients de demander uniquement les données dont ils ont réellement besoin. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques puissantes pour travailler avec GraphQL. Dans cet article, nous allons détailler trois bibliothèques principales : graphql-kotlin, Apollo Kotlin et KGraphQL, et montrer des exemples de leur utilisation.
1. graphql-kotlin — bibliothèque serveur d'Expedia Group
graphql-kotlin est la bibliothèque la plus populaire pour créer des serveurs GraphQL en Kotlin. Elle prend entièrement en charge toutes les fonctionnalités de la spécification GraphQL et s'intègre parfaitement avec les frameworks Spring Boot, Ktor et Micronaut.
Installation et configuration
Pour ajouter la bibliothèque, ajoutez la dépendance dans build.gradle.kts :
dependencies { // Bibliothèque principale implementation("com.expediagroup:graphql-kotlin-spring-server:6.5.0") // Pour la génération de schéma à partir d'annotations implementation("com.expediagroup:graphql-kotlin-schema-generator:6.5.0")}Création d'une API GraphQL simple
Définissons le modèle de données et le resolver pour les requêtes :
// Modèle de donnéesdata class User(val id: Int, val name: String, val email: String)
// Query resolverclass UserQuery : Query { fun getUser(id: Int): User? { return users.find { it.id == id } } companion object { val users = listOf( User(1, "Anna Petrova", "anna@example.com"), User(2, "Ivan Sidorov", "ivan@example.com") ) }}
// Mutation resolverclass UserMutation : Mutation { fun createUser(name: String, email: String): User { val newUser = User(users.size + 1, name, email) users.add(newUser) return newUser }}Enregistrons maintenant les resolvers dans la configuration Spring Boot :
@Configurationclass GraphQLConfig { @Bean fun userQuery(): UserQuery = UserQuery() @Bean fun userMutation(): UserMutation = UserMutation()}Requêtes à l'API
Exemple de requête GraphQL :
query { getUser(id: 1) { name email }}La réponse contiendra uniquement les champs demandés :
{ "data": { "getUser": { "name": "Anna Petrova", "email": "anna@example.com" } }}2. Apollo Kotlin — bibliothèque cliente pour Android et JVM
Apollo Kotlin est un puissant client GraphQL, développé spécialement pour Kotlin et Android. Il fournit des requêtes typées et une génération automatique de code.
Ajout de la bibliothèque
dependencies { implementation("com.apollographql.apollo:apollo-runtime:3.8.0") implementation("com.apollographql.apollo:apollo-normalized-cache-sqlite:3.8.0")}Création d'une requête
Définissez d'abord la requête GraphQL dans le fichier GetUserQuery.graphql :
query GetUser($id: Int!) { getUser(id: $id) { id name email }}Utilisez ensuite le code généré en Kotlin :
val apolloClient = ApolloClient.builder() .serverUrl("http://localhost:8080/graphql") .build()
suspend fun fetchUser(userId: Int): User? { val response = apolloClient .query(GetUserQuery(userId)) .execute() return response.data?.getUser?.let { user -> User( id = user.id, name = user.name, email = user.email ) }}3. KGraphQL — bibliothèque légère pour Ktor
KGraphQL est une bibliothèque minimaliste pour créer des serveurs GraphQL dans les applications Ktor. Elle