Bibliotecas GraphQL para Kotlin: descripción completa y guía práctica
GraphQL es un lenguaje de consulta para API que permite a los clientes obtener solo los datos que realmente necesitan. En el ecosistema de Kotlin, existen varias bibliotecas potentes para trabajar con GraphQL, tanto del lado del servidor como del lado del cliente. En este artículo, analizaremos tres bibliotecas clave: graphql-kotlin, KGraphQL y Apollo Kotlin, y mostraremos ejemplos de su uso.
1. graphql-kotlin — biblioteca oficial de Expedia Group
graphql-kotlin es la biblioteca más madura y mantenida para crear servidores GraphQL en Kotlin. Aprovecha al máximo las capacidades del lenguaje, como corrutinas, clases de datos y seguridad contra nulos.
Características principales:
- Soporte para corrutinas de Kotlin para procesamiento asíncrono
- Generación automática de esquemas a partir de clases de datos
- Soporte integrado para suscripciones a través de WebSocket
- Integración con Spring Boot, Ktor y otros frameworks
- Soporte completo de la especificación GraphQL de junio de 2018
Ejemplo de servidor con graphql-kotlin:
// Definimos el modelo de datosdata class User(val id: String, val name: String, val email: String)
// Creamos un Query resolverclass UserQuery : Query { fun getUser(id: String): User? { // Lógica para obtener el usuario return User(id = "1", name = "Iván Petrov", email = "ivan@example.com") } fun users(): List<User> = listOf( User("1", "Iván", "ivan@example.com"), User("2", "María", "maria@example.com") )}
// Configuración e inicio del servidorfun main() { val schema = Schema { query(UserQuery()) } val server = GraphQLServer(schema) server.start(port = 8080)}Ejemplo de consulta del cliente:
query { user(id: "1") { name email }}2. KGraphQL — alternativa ligera
KGraphQL es una biblioteca minimalista para crear API GraphQL. Se caracteriza por su facilidad de configuración y la ausencia de dependencias innecesarias.
Características clave:
- Tamaño mínimo: alrededor de 100 KB
- No requiere Spring Boot ni otros frameworks pesados
- Soporte para DSL en la definición del esquema
- Posibilidad de integración con cualquier servidor HTTP
Ejemplo de uso de KGraphQL:
// Definimos el modelodata class Product(val id: Int, val title: String, val price: Double)
// Creamos el esquema GraphQLval schema = schema { query("products") { resolver { -> listOf( Product(1, "Portátil", 89999.99), Product(2, "Ratón", 2499.50) ) } } query("product") { resolver { id: Int -> Product(id, "Producto #$id", 1000.0) } }}
// Inicio del servidorfun main() { val server = KGraphQLServer(schema) server.start(port = 4000)}3. Apollo Kotlin — biblioteca cliente de Apollo
Apollo Kotlin es un potente cliente para trabajar con API GraphQL. Genera código seguro en cuanto a tipos basado en el esquema GraphQL, lo que simplifica enormemente el desarrollo.
Ventajas de Apollo Kotlin:
- Generación de código Kotlin a partir de archivos .graphql
- Soporte para almacenamiento en caché (caché normalizado)
- Trabajo con corrutinas y Flow
- Manejo automático de errores
- Soporte para mutaciones, consultas y suscripciones
Ejemplo de uso de Apollo Kotlin en el cliente:
// Primero definimos la consulta en un archivo .graphql// file: GetUser.graphql// query GetUser($id: ID!) {// user(id: $id) {// id// name// email// } También en la biblioteca
Juniper: Biblioteca GraphQL completa para Rust
Trabajo con Kafka en Kotlin: bibliotecas y ejemplos