Crear un servidor GraphQL con Ruby on Rails 6

Hace poco tiempo me vi en la necesidad de crear un servidor GraphQL con Ruby on Rails 6, algo que nunca antes había hecho. A decir verdad, soy nuevo usando Rail así que la tarea parecía bastante intimidante en principio.

Ya entrado en la labor descubrí que hacerlo puede resultar relativamente sencillo si entiendes GraphQL y cómo funciona.

Aprovecho para hacer una anotación: durante este artículo no entraré en detalles acerca de lo que es GraphQL o Ruby on Rails, porque estoy asumiendo que has tenido contacto con ellos, aunque no seas un experto.

Una cosa más, este artículo está dividido en dos partes para hacer más digerible su lectura.

Qué es GraphQL

Tomando un poco de lo que explica la página oficial de GraphQL, es un lenguaje de consulta para API, que permite describir los resultados esperados y llenar esas consultas con nuestros datos existentes.

Y ¿eso qué significa? Que mediante las queries de GraphQL podemos solicitar exactamente los datos que necesitamos a diferencia de las peticiones a una API RESTful.

query {
  users{
    id
    name
  }
}

Este sencillo ejemplo muestra una query de GraphQL que solicita información sobre usuarios, pero al mismo tiempo indica que solo se quiere obtener el id y el name del usuario.

Por supuesto podríamos necesitar obtener también el apellido del usuario, por lo que la query quedaría como sigue.

query {
  users {
    id
    name
    lastname
  }
}

¿Alcanzas a ver la belleza de esto? El sitio de How to GraphQL tiene ejemplos y tutoriales muy buenos para adentrarse más en GraphQL.

Qué es Ruby On Rails

Si tienes experiencia en el mundo del desarrollo web es probable que ya sepas qué es Ruby on Rails, y si no estoy seguro que es porque eres nuevo o porque has vivido debajo de una roca en los últimos 10 años.

Ruby on Rails es un framework (¿el framework?) para la creación de aplicaciones web escrito en Ruby y que sigue el patrón MVC.

Existen grandes ejemplos de aplicaciones construidas usando RoR (también así se le conoce a Ruby on Rails), pero entre las más famosas tenemos a GitHub, Shopify, Airbnb, Twitch y otras más.

En este artículo no voy a hablar de cómo instalar RoR, pero puedes encontrar información al respecto en los siguientes enlaces:

Preparando RoR para GraphQL

Es hora de ponernos manos a la obra para crear nuestro servidor GraphQL usando Ruby on Rails.

En este punto daremos por sentado que ya tienes una nueva aplicación RoR creada y tu editor de código favorito abierto y lilsto para modificar tu aplicación. ¿Aún no? Vamos, crea una nueva aplicación y abre el editor y después continúa leyendo.

Nuestro servidor GraphQL funcionará con la gema graphql-ruby y además utilizaremos graphiql-rails para ejecutar las queries y mutaciones que crearemos.

Así que lo primero que hay que hacer es abrir el Gemfile y agregar las siguientes líneas al final:

gem "graphql"
gem "graphiql-rails"

Ahora, en tu terminal, ejecuta bundle install para instalar las nuevas gemas.

bundle install

Recuerda que para que este comando funcione debes encontrarte en el directorio raíz de tu aplicación Rails.

Inicializando el servidor GraphQL

Es momento de generar el servidor GraphQL y los archivos necesarios para su ejecución. Ingresa el siguiente comando en la terminal:

rails generate graphql:install

El comando genera una serie de archivos y directorios necesarios para el funcionamiento del servidor GraphQL, incluyendo la ruta necesaria para el endpoint de GraphQL.

/app/controllers/graphql_controller.rb contiene el controlador para el servidor GraphQL que responde a la ruta /graphql de nuestro servidor.

El directorio /app/graphql contiene los tipos básicos necesarios para el servidor GraphQL. Tambien contendrá las queries y mutaciones que creemos para el servidor.

Si revisas el archivo config/routes.rb podrás observar que se ha agregado una nueva ruta que responde al método POST.

post "/graphql", to: "graphql#execute"

En este momento podemos decir que el servidor GraphQL ya cuenta con todo lo necesario para funcionar, sin embargo no resulta muy útil si no contamos con queries y mutations para poder interactuar con los datos de la aplicación.

Un entorno de prueba para nuestro servidor GraphQL

Antes de escribir nuestras primeras queries y mutaciones sería muy útil prepara un entorno para poder utilizarlas sin necesidad de generar una aplicación cliente.

Afortunadamente contamos con GraphiQL para tal propósito, y de hecho, ya hemos instalado la gema previamente, así que solo habrá que habilitarla.

Para ello deberemos agregar una nueva ruta al archivo /config/routes.rb.

mount GraphiQL::Rails::Engine, at: '/graphiql', graphql_path: "/graphql#execute"

Ahora, si intentamos acceder a la ruta /graphiql lo que veremos será el texto “Loading…” que permanece de modo infinito en pantalla.

Esto se debe principalmente a que los assets requeridos por GraphiQL no están disponibles para Rails.

Afortunadamente corregir este error es muy sencillo.

Abre el archivo /config/application.rb y busca la línea comentada:

# require "sprockets/railtie"

Cambiala a

require "sprockets/railtie"

Abora, dentro del directorio /app crea una carpeta llamada assets e inmediatamente, dentro de esta carpeta recién creada, crea una más llamada config.

Dentro de config crea un archivo llamado manifest.js y dentro escribe las siguientes líneas:

//= link graphiql/rails/application.css
//= link graphiql/rails/application.js

Si intentas acceder nuevamente a la ruta /graphiql deberías ver lo siguiente:

¡Perfecto! Ahora tenemos nuestro servidor GraphQL montado y una herramienta para probar las queries y mutaciones que generamos.

En la segunda parte veremos como crear nuestra primeras queries y mutaciones para hacer de nuestro servidor GraphQL un servidor totalmente funcional.

Acerca del autor

Eduardo Cortés

Developer y Project Manager con 20 años de experiencia en desarrollo web, frontend y backend.

Por Eduardo Cortés

Categorías

Instagram

Twitter

Alerta Amber Yucatán continúa solicitando su apoyo y #RT para la búsqueda y localización de la adolescente SELMY MELISSA NAH PÉREZ de 13 años en el Estado de Yucatán. ¡Ayúdanos a localizarla! @fgeyucatan

John Ackerman es integrante del Instituto de formación política de Morena, por eso NO reúne requisitos para ser parte del Comité evaluador para consejeros del @INEMexico. No es imparcial.

Es muy importante su rt. Evitemos consumar el color contra el INE.

Para que se alegren el día, les dejo la cara más tierna del beisbol ⚾🙈