Bibliotecas GraphQL para Kotlin: visão geral completa e guia prático
GraphQL é uma linguagem de consulta para APIs que permite aos clientes obter apenas os dados de que realmente precisam. No ecossistema Kotlin, existem várias bibliotecas poderosas para trabalhar com GraphQL, tanto no lado do servidor quanto no lado do cliente. Neste artigo, veremos três bibliotecas principais: graphql-kotlin, KGraphQL e Apollo Kotlin, além de mostrar exemplos de seu uso.
1. graphql-kotlin — biblioteca oficial do Expedia Group
graphql-kotlin é a biblioteca mais madura e suportada para criar servidores GraphQL em Kotlin. Ela utiliza totalmente os recursos da linguagem, como corrotinas, classes de dados e null-safety.
Principais recursos:
- Suporte a corrotinas Kotlin para processamento assíncrono
- Geração automática de esquemas a partir de classes de dados
- Suporte integrado a assinaturas (Subscriptions) via WebSocket
- Integração com Spring Boot, Ktor e outros frameworks
- Suporte completo à especificação GraphQL June 2018
Exemplo de servidor com graphql-kotlin:
// Definindo o modelo de dadosdata class User(val id: String, val name: String, val email: String)
// Criando o Query resolverclass UserQuery : Query { fun getUser(id: String): User? { // Lógica para obter o usuário return User(id = "1", name = "Ivan Petrov", email = "ivan@example.com") } fun users(): List<User> = listOf( User("1", "Ivan", "ivan@example.com"), User("2", "Maria", "maria@example.com") )}
// Configuração e inicialização do servidorfun main() { val schema = Schema { query(UserQuery()) } val server = GraphQLServer(schema) server.start(port = 8080)}Exemplo de consulta do cliente:
query { user(id: "1") { name email }}2. KGraphQL — alternativa leve
KGraphQL é uma biblioteca minimalista para criar APIs GraphQL. Ela se destaca pela simplicidade de configuração e pela ausência de dependências desnecessárias.
Principais características:
- Tamanho mínimo — cerca de 100 KB
- Não requer Spring Boot ou outros frameworks pesados
- Suporte a DSL para definição de esquemas
- Possibilidade de integração com qualquer servidor HTTP
Exemplo de uso do KGraphQL:
// Definindo o modelodata class Product(val id: Int, val title: String, val price: Double)
// Criando o esquema GraphQLval schema = schema { query("products") { resolver { -> listOf( Product(1, "Notebook", 89999.99), Product(2, "Mouse", 2499.50) ) } } query("product") { resolver { id: Int -> Product(id, "Produto #$id", 1000.0) } }}
// Inicializando o servidorfun main() { val server = KGraphQLServer(schema) server.start(port = 4000)}3. Apollo Kotlin — biblioteca cliente da Apollo
Apollo Kotlin é um cliente poderoso para trabalhar com APIs GraphQL. Ele gera código type-safe com base no esquema GraphQL, o que simplifica significativamente o desenvolvimento.
Vantagens do Apollo Kotlin:
- Geração de código Kotlin a partir de arquivos .graphql
- Suporte a cache (cache normalizado)
- Trabalho com corrotinas e Flow
- Tratamento automático de erros
- Suporte a mutações, consultas e assinaturas
Exemplo de uso do Apollo Kotlin no cliente:
// Primeiro, definimos a consulta em um arquivo .graphql// file: GetUser.graphql// query GetUser($id: ID!) {// user(id: $id) {// id// name// email// }