GraphQL: ¿que es?
Si alguna vez han desarrollado una aplicación que consuma datos de un servicio web lo mas probable es que hayan utilizado REST, en donde cada recurso tiene una URL diferente.
Si la estructura de datos con la que estamos trabajando es simple y no tiene referencias a otros modelos no hay problema. Pero si tenemos mas de un modelo que hace referencia a otros debemos hacer llamadas por cada referencia.
Para ilustrar el caso imaginemos que tenemos un servicio REST que nos permite obtner una serie de Blogs, cada blog tiene un publicaciones y cada publicación tiene un autor y comentarios. La lista de endpoints seria algo como:
- GET /blogs lista de blogs
- GET /blogs/{blogID} informacion de un blog
- GET /blogs/{blogID}/publicaciones publicaciones de un blog
- GET /blogs/{blogID}/publicaciones/{publicacionID} informacion de una publicacion
- GET /blogs/{blogID}/publicaciones/{publicacionID}/comentarios comentarios de una publicacion
Ahora supongamos que queremos obtener todos los comentarios de todos los blogs, la cantidad de llamadas al servicio seria igual a la cantidad de blogs por la cantidad de publicaciones. Esas son demasiadas llamadas.
Mientras que si modelamos el mismo servicio web con GraphQL, podríamos obtener toda la información con una sola llamada. Ahora veremos como.
Primero debemos definir el esquema y los tipos de nuestra API
type Query { blogs: [Blog] } type Blog { id: ID nombre: String publicaciones: [Publicacion] } type Publicacion { id: ID titulo: String contenido: String autor: String fecha: String comentarios: [Comentario] } type Comentario { id: ID contenido: String fecha: String }
Este esquema describe la estructura que mencionaba al principio, tenemos los Blogs que tienen publicaciones y a su vez las publicaciones tienen comentarios. Por simplicidad la unica consulta que he definido es para obtener todos los blogs.
El servidor GraphQL expone una URL donde recibira todas las peticiones.
Ahora para obtener todos los comentarios solo debemos enviar la siguiente consulta
query { blogs: { publicaciones: { comentarios: { id contenido fecha } } } }
Con una esta consulta podemos obtener toda la información en una sola llamada.
Este es solo uno de los problemas que resuelve GraphQL, ya no hay que crear versiones diferente de API ya que cada cliente obtiene solo los datos que necesita y manejo de suscripciones para actualizaciones en tiempo real.
0 Comments