GraphQL fue creado por Facebook en el 2012 para uso interno en sus proyectos, que pasó a ser de código abierto en el 2015 y ahora es mantenido por una gran comunidad de empresas e individuos de todo el mundo.
Es importante decir que GraphQL no es ni un framework ni una librería, es una especificación(o también se podria decir que un estándar ʕ·ᴥ·ʔ) y que tenemos distintas librerías de código que lo implementan para distintos lenguajes de programación.
Ahora si vayamos con la definición ʕ ·ᴥʔ:
GraphQL es un lenguaje de consultas para API. GraphQL le da a los clientes de la API el poder de pedir exactamente lo que necesitan y nada más, facilita la evolución de las API a lo largo del tiempo y habilita poderosas herramientas para desarrolladores.
Así que hoy vamos a crear un servidor GraphQL usando solo ruby en solo 5 sencillos pasos.
Step 1: Inicialización del proyecto
Creamos una carpeta en donde vamos a trabajar:
mkdir graphql-server
cd graphql-server
Inicializamos un nuevo proyecto con ruby a través del gestor de paquetes de ruby bundler:
bundle init
Step 2: Instalación de dependencias
A continuación, instalamos las dependencias principales que son necesarias para responder a las solicitudes de GraphQL:
- rack: Gema que define una interfaz muy simple para construir servidores web en Ruby.
 - graphql: Gema para crear un esquema y ejecutar consultas en dicho esquema.
 - graphql_graphql_playground: Gema que nos proporciona un editor gráfico para escribir consultas en GraphQL.
 
Agregamos estas gemas a nuestro Gemfile:
source "https://rubygems.org"
gem "rack"
gem "graphql"
gem "graphql_playground"
Y las instalamos corriendo este comando:
bundle install
En el siguiente paso, usaremos estas dependencias para crear un servidor que procesa y responde a las solicitudes entrantes de GraphQL.
Step 3: Crear el servidor
Creamos un archivo server.rb y agregamos lo siguiente:
require 'rack'
class GraphQLServer
  def initialize(schema:, context: {})
    @schema = schema
    @context = context
  end
  def call(env)
    request = Rack::Request.new(env)
    payload = if request.get?
      request.params
    elsif request.post?
      body = request.body.read
      JSON.parse(body)
    end
    response = @schema.execute(
      payload['query'],
      variables: payload['variables'],
      operation_name: payload['operationName'],
      context: @context,
    ).to_json
    [200, {'Content-Type' => 'application/json', 'Content-Length' => response.bytesize.to_s}, [response]]
  rescue InvalidRequestType
    # Method Not Allowed
    [405, {"Content-Type" => "text/html"}, ["GraphQL Server supports only GET/POST requests"]]
  rescue PostBodyMissing
    # Bad Request
    [400, {"Content-Type" => "text/html"}, ["POST body missing"]]
  end
end
Ahora creamos el archivo config.ru
require 'graphql'
require "graphql_playground"
require_relative 'server'
# definimos los types
type_def = <<-GRAPHQL
  type Query {
    hello: String
    todos: [Todo!]!
  }
  type Todo {
    id: Int!
    name: String!
  }
GRAPHQL
class Todo
  attr_accessor :id, :name
  def initialize(id, name)
    @id = id
    @name = name
  end
end
# creamos un array con objectos de la clase `Todo` para consultarlos desde el cliente
todos = [
  Todo.new(1, "Clean the house"),
  Todo.new(2, "Go to the store")
]
# creamos nuestros resolvers
resolver = {
  "Query" => {
    "hello" => Proc.new { "world" },
    "todos" => Proc.new { todos }
  }
}
# definimos una ruta para acceder al playground(editor gráfico)
map '/playground' do
  use GraphQLPlayground, endpoint: '/'
end
# creamos un schema
schema = GraphQL::Schema.from_definition(
  type_def,
  default_resolve: resolver
)
# corremos el server con el schema ya creado
run GraphQLServer.new(schema: schema)
Step 4: Start the server
Corremos el server usando este comando:
rackup config.ru
Ahora que nuestro server se está ejecutando, abrimos el editor graphql en http://localhost:9292/playground.
Step 5: Corre tu primera query
En este punto, podrás comenzar a enviar consultas al servidor GraphQL utilizando GraphQL Playground, que se divide en algunas partes:
- La petición (en la izquierda)
 - La respuesta (a la derecha)
 - La documentación (disponible usando el botón "SCHEMA" en el extremo derecho)
 
Probamos nuestra primera query en nuestro editor playground:
{
  hello
}
Y obtenemos el clásico world

Ahora obtenemos los todos, ingresando la siguiente query en lado izquierdo de la ventana:
{
  todos {
    id
    name
  }
}
Y obtenemos una lista de todos que definimos en nuestro server.

Próximos pasos
Está aplicación es una implementacion super básica de un servidor graphql con ruby y un excelente punto de partida para sumergirte en este curioso mundo de graphQL, te dejo algunos enlaces que serán un gran paso para construir servidores graphql con rails: