Jump to section

¿Qué es GraphQL?

Copiar URL

Red Hat User Group en Latinoamérica

Llegó Red Hat User Group Community a Latinoamérica. Nos reunimos para tener conversaciones técnicas, compartir experiencias y casos de uso en un ambiente cercano y distendido.

GraphQL es un lenguaje de consulta y un tiempo de ejecución del servidor para las interfaces de programación de aplicaciones (API); su función es brindar a los clientes exactamente los datos que solicitan y nada más.

Gracias a GraphQL, las API son rápidas, flexibles y sencillas para los desarrolladores. Incluso se puede implementar en un entorno de desarrollo integrado (IDE) conocido como GraphiQL. Como alternativa a REST, GraphQL permite que los desarrolladores creen consultas para extraer datos de varias fuentes en una sola llamada a la API.

Además, GraphQL otorga a los encargados del mantenimiento de las API la flexibilidad para agregar campos o modificarlos, sin que esto afecte las consultas actuales. Los desarrolladores pueden diseñar estas interfaces con los métodos que prefieran, y la especificación de GraphQL garantizará que funcionen de forma predecible para los clientes.

Los desarrolladores de API utilizan esta herramienta para crear un esquema que describa todos los datos posibles que los clientes pueden consultar a través del servicio.

Los esquemas de GraphQL están compuestos por tipos de objetos, que definen los que puede solicitar y sus campos.

A medida que ingresan las consultas, GraphQL las aprueba o rechaza en función del esquema, y luego ejecuta las validadas.

El desarrollador de API adjunta cada campo de un esquema a una función llamada resolución. Durante la ejecución, se llama a la resolución para que genere el valor.

Si bien GraphQL define y valida la sintaxis de las consultas a la API (descritas en el repositorio graphql-spec), deja la mayoría de las demás decisiones en manos del diseñador que la crea. GraphQL no indica cómo almacenar los datos ni qué lenguaje de programación utilizar. Los desarrolladores pueden optar por PHP (graphql-php), Scala (Sangria), Python (Graphene Python), Ruby (graphql-ruby) y JavaScript (graphql.js), entre otros. Tampoco presenta requisitos de red, autorización ni paginación.

Desde el punto de vista del cliente, las operaciones más comunes de GraphQL probablemente sean las consultas y las mutaciones. Si las consideramos desde el punto de vista del modelo CRUD (crear, leer, actualizar y eliminar), una consulta equivaldría a la operación leer. Las mutaciones se encargan de todas las demás (es decir, crear, actualizar y eliminar).

Open Technology Sessions en español

Explora esta serie de webinars on-demand y descubre cómo impulsar la innovación tecnológica en tu organización. ¡Aprende más sobre automatización, infraestructura, plataforma de aplicaciones, cloud services y mucho más!

Si planea implementar GraphQL en un entorno empresarial o comercial, debe considerar tanto las ventajas como las desventajas que presenta.

Ventajas

  • Un esquema de GraphQL establece una fuente única de información en una aplicación de GraphQL. Ofrece a la empresa una forma de unificar toda su API.
  • Las llamadas a GraphQL se gestionan en un solo recorrido de ida y vuelta. Los clientes obtienen lo que solicitan sin que se genere una sobrecarga.
  • Los tipos de datos bien definidos reducen los problemas de comunicación entre el cliente y el servidor.
  • GraphQL es una herramienta introspectiva. Un cliente puede solicitar una lista de los tipos de datos disponibles. Esto es ideal para la generación automática de documentación.
  • GraphQL permite que las API de las aplicaciones evolucionen sin afectar las consultas actuales.
  • Muchas extensiones open source de GraphQL ofrecen funciones que no están disponibles con las API de REST.
  • GraphQL no exige una arquitectura de aplicación específica. Puede incorporarse a una API de REST actual y funcionar con la herramienta de gestión de API que ya posee.

Desventajas

  • GraphQL presenta una curva de aprendizaje para desarrolladores que tienen experiencia con las API de REST.
  • Además, delega gran parte del trabajo de las consultas de datos al servidor, lo cual representa una mayor complejidad para los desarrolladores de servidores.
  • Según su implementación, GraphQL podría requerir estrategias de gestión de API diferentes a las API de REST, sobre todo si se tienen en cuenta los precios y los límites de frecuencia.
  • El almacenamiento en caché es más complejo que con REST.
  • Los encargados del mantenimiento de las API tienen la tarea adicional de escribir un esquema de GraphQL fácil de mantener.

Ejemplos de consultas de GraphQL

La mejor manera de comprender GraphQL es analizando algunos ejemplos de consultas y respuestas. Veamos tres casos adaptados del sitio web graphql.org.

En el primer ejemplo, se muestra cómo el cliente puede crear una consulta de GraphQL y solicitar a la API que devuelva ciertos campos específicos en el formato que usted indique.

{
  me {
    name
  }
}

La API de GraphQL arrojará un resultado similar a este en formato JSON:

{
  "me": {
    "name": "Dorothy"
  }
}

El cliente también puede agregar argumentos como parte de la consulta de GraphQL, como se muestra en el siguiente ejemplo:

{
  human(id: "1000") {
    name
    location
  }
}

El resultado:

{
  "data": {
    "human": {
      "name": "Dorothy,
      "location": "Kansas"
    }
  }
}

A partir de aquí, el asunto se torna más interesante. GraphQL ofrece a los usuarios la posibilidad de definir fragmentos reutilizables y asignar variables.

Imagínese que necesita solicitar una lista de ID y, luego, una serie de registros para cada ID. Con GraphQL, puede crear una consulta que extraiga todos los elementos que necesita con una sola llamada a la API.

De esta manera, la siguiente consulta:

query HeroComparison($first: Int = 3) {
  leftComparison: hero(location: KANSAS) {
    ...comparisonFields
  }
  rightComparison: hero(location: OZ) {
    ...comparisonFields
  }
}
fragment comparisonFields on Character {
  name
  friendsConnection(first: $first) {
    totalCount
    edges {
      node {
        name
      }
    }
  }

Podría generar este resultado:

{
  "data": {
    "leftComparison": {
      "name": "Dorothy",
      "friendsConnection": {
        "totalCount": 4,
        "edges": [
          {
            "node": {
              "name": "Aunt Em"
            }
          },
          {
            "node": {
              "name": "Uncle Henry"
            }
          },
          {
            "node": {
              "name": "Toto"
            }
          }
        ]
      }
    },
    "rightComparison": {
      "name": "Wizard",
      "friendsConnection": {
        "totalCount": 3,
        "edges": [
          {
            "node": {
              "name": "Scarecrow"
            }
          },
          {
            "node": {
              "name": "Tin Man"
            }
          },
          {
            "node": {
              "name": "Lion"
            }
          }
        ]
      }
    }
  }
}

Si es usuario de GitHub, puede obtener experiencia práctica con GraphQL rápidamente con el Explorador de GraphQL de GitHub.

Descubra Red Hat OpenShift API Management

Aumente la productividad de los desarrolladores y distribuya nuevas aplicaciones más rápidamente con un enfoque centrado en las API.

Facebook desarrollo GraphQL y comenzó a utilizarlo en aplicaciones móviles en 2012. En 2015, se habilitó la especificación de GraphQL como open source. En la actualidad, GraphQL Foundation se encarga de supervisarla.

Hay muchos proyectos open source que implican el uso de GraphQL. Si bien la lista que aparece a continuación no es exhaustiva, incluye proyectos diseñados para facilitar la adopción de GraphQL.

  • Apollo: plataforma de GraphQL que incluye una biblioteca de clientes de frontend (Apollo Client) y un marco de servidor de backend (Apollo Server).
  • Offix: cliente sin conexión que permite la ejecución de las mutaciones y las consultas de GraphQL, incluso cuando no se puede acceder a la aplicación.
  • Graphback: cliente de línea de comandos que genera servidores Node.js compatibles con GraphQL.
  • OpenAPI-to-GraphQL: biblioteca e interfaz de línea de comandos para convertir en GraphQL las API con el formato de descripción OpenAPI Specification o Swagger.

Artículos relacionados

Artículo

¿Qué es una API?

Una API o interfaz de programación de aplicaciones es un conjunto de definiciones y protocolos que se usa para diseñar e integrar el software de las aplicaciones.

Artículo

¿Cuál es la función de una puerta de enlace de API?

Una puerta de enlace de API es una herramienta de gestión de las interfaces de programación de aplicaciones que se encuentra entre el cliente y un conjunto de servicios de backend.

Artículo

¿Por qué elegir a Red Hat para las API?

Nuestras soluciones de API se centran en la reutilización, la agilidad de la TI y una interfaz de gestión que lo ayuda a medir, supervisar y adaptar los sistemas.