Conoce GraphQL

Fue creado por Facebook para utilizarlo dentro de la propia compañía. Fue desarrollado en 2012, pero su publicación no fue hasta 2015, bajo la licencia BSD-3, la cual permite el uso comercial, además de distribuirlo, modificarlo y también usarlo de forma privada. No fue hasta pasados unos meses cuando cambió su licencia a MIT.

 

La idea surgió de la necesidad de gestionar billones de peticiones diarias y de la necesidad de pasar Facebook como aplicación nativa. La mayor ventaja que obtendría al hacer esto, sería el hacerla muchísimo más veloz a la hora de abrir el timeline de los usuarios y visualizar fotografías, sin realizar cambios en el diseño. Con GraphQL, la petición que se realiza tiene un aspecto muy similar a un JSON y el conjunto de datos que devuelve tiene el mismo formato que la petición. Además si un campo no existe, este puede valer null. Si queremos que nos salte una excepción en valores nulos, lo que deberíamos especificar, es que ese campo no puede ser nulo.

 

Características principales

  • Lenguaje tipado y validable: Le damos una forma de lo que recibe y lo que devolvemos, Además de agregarle seguridad.
  • Sistema de tipos: GraphQL trabaja con un sistema propio de tipos que permite describir a una API con tipos de datos. Las estructuras de datos definidas de este modo son las que crean el marco para las consultas. Cada tipo consta de uno o varios campos que, a su vez, contienen sus propios tipos de datos:
  1. ID (GraphQLId)
  2. Integer (GraphQLInt).
  3. Float (GraphQLFloat).
  4. String (GraphQLString).
  5. Boolean (GraphQLBoolean).
  • Es un protocolo de intercambio de datos, nunca se debe tocar la persistencia de los datos.
  • No tiene un versionado propio. Se pueden utilizar etiquetas "deprecated" e incluso establecer comentarios, para identificar los elementos que han sido actualizados. Aunque no estemos actualizados, seguirá funcionando. Sólo debemos actualizarnos al ver estas etiquetas, para tener el código más nuevo.
  • Sólo existe un único End-Point. No es necesario realizar peticiones a diferentes servicios. Prácticamente en un solo request puedes mandar todo lo que necesitas.

Cómo funciona

 

Sabemos que las peticiones HTTP que utilizamos en las APIS son: GET, POST, PUT, DELETE y PATCH, pero con GraphQL sólo se utilizan dos verbos. Tenemos:

 

  • Mutation nos permite actualizar los datos, lo que podría a ser equiparable a POST, PUT, DELETE y PATH. Lo más destable es que la sintaxis es igual tanto para querys como para mutaciones. Sólo será necesario agregar una palabra u otra dependiendo de lo que queramos hacer.
mutation {
  addCategory(id: 6, name: "Green Fruits", products: [8, 2, 3]) {
    name
    products {
      name
    }
  }
}

mutation {
  updateCategory(id: 1, name: "Juicy Fruits", products: [7]) {
    name
    products {
      name
    }
  }
}
mutation {
  deleteCategory(id: 2) {
    name
}
  •   Query cuando nuestra intención es realizar una petición de datos (por ejemplo, que nos devuelvan los clientes de servicio).
{
  products {
    name 
  }
}
{
 products(id: "8") {
    price
    name
  }
}

 

Type es la representación de un objeto mediante la cual definimos los fields o campos/atributos que lo componen. GraphQL aporta una serie de tipos escalares o ‘primitivos’ como son Int, Float, String, Boolean, ID y Enum Las ventajas de GraphQL frente al API REST convencional son claras, más agilidad, más rapidez, muchisimo más fácil y sobre todo una sintaxis muy clara... Y lo más importante un único End-point.

Poco a poco se esta usando este lenguaje de programación, aunque he de decir que las implementaciones más avanzadas están con Js y Python....pero poco a poco otros lenguajes se suben al carro. Podéis encontrar más información por aquí y aquí