GraphQL em Kotlin: Visão geral completa das bibliotecas e ferramentas
GraphQL é uma linguagem de consulta para APIs e um ambiente de execução para executar essas consultas com seus dados existentes. Ele fornece aos clientes a capacidade de solicitar exatamente os dados de que precisam, tornando-se uma alternativa poderosa ao REST. No ecossistema Kotlin, existem várias bibliotecas maduras para criar a parte do servidor GraphQL. Neste artigo, analisaremos detalhadamente as principais ferramentas, sua sintaxe e exemplos de uso.
Por que Kotlin para GraphQL?
Kotlin, sendo uma linguagem estaticamente tipada que roda na JVM, é excelente para construir esquemas GraphQL type-safe. O compilador Kotlin ajuda a evitar erros na fase de escrita do código, e a sintaxe expressiva torna o código limpo e conciso. As principais bibliotecas para trabalhar com GraphQL em Kotlin incluem:
- graphql-kotlin (do Expedia Group) — a biblioteca mais popular, fortemente integrada com Spring Boot.
- KGraphQL — uma alternativa com foco em configuração simples e API minimalista.
- Apollo Kotlin — uma biblioteca cliente para Android e KMP, mas também oferece recursos de servidor.
Biblioteca graphql-kotlin
graphql-kotlin é um conjunto de bibliotecas para construir servidores GraphQL em Kotlin. A abordagem principal é usar anotações e classes de dados para geração automática de esquemas.
Instalação
Adicione a dependência em build.gradle.kts:
dependencies { implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.0") implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.0")}Exemplo: Consulta simples
Vamos definir uma classe de dados e um resolver:
import com.expediagroup.graphql.server.operations.Query
data class User(val id: Int, val name: String, val email: String)
class UserQuery : Query { fun getUser(id: Int): User { // Simulação de obtenção do banco de dados return User(id = id, name = "Alice", email = "alice@example.com") }}O graphql-kotlin gerará automaticamente o esquema. Agora o cliente pode executar a consulta:
query { getUser(id: 1) { name email }}A resposta conterá apenas os campos solicitados:
{ "data": { "getUser": { "name": "Alice", "email": "alice@example.com" } }}Mutações (alteração de dados)
Para mutações, usa-se a interface Mutation:
import com.expediagroup.graphql.server.operations.Mutation
class UserMutation : Mutation { fun createUser(name: String, email: String): User { // Lógica de criação de usuário return User(id = 2, name = name, email = email) }}Consulta correspondente:
mutation { createUser(name: "Bob", email: "bob@example.com") { id name }}Biblioteca KGraphQL
KGraphQL oferece uma abordagem mais orientada a DSL, sem a necessidade de anotações. O esquema é construído programaticamente.
Instalação
dependencies { implementation("com.apurebase:kgraphql:0.18.0") implementation("com.apurebase:kgraphql-ktor:0.18.0") // para Ktor}Exemplo: Definição de esquema
import com.apurebase.kgraphql.schema.dsl.SchemaBuilder
val schema = SchemaBuilder { query("hello") { resolver { -> "Hello, World!" } }
query("user") { resolver { id: Int -> User(id = id, name = "Charlie", email = "charlie@example.com") } }
mutation("createUser") { resolver { name: String, email: String -> User(id = 3, name = name, email = email) } }}Em seguida, conecte ao web framework