SlideShare una empresa de Scribd logo

GraphQL y Groovy

Talk (Spanish) about GraphQL and Groovy implementations.

1 de 74
Descargar para leer sin conexión
#madridGUG @marioggar © Mario Garcia 2018
GraphQL and
Groovy@marioggar
1
#madridGUG @marioggar © Mario Garcia 2018
Me presento
Nombre
Mario Garcia
Redes Sociales:
https://twitter.com/marioggar
https://github.com/mariogarcia
2 . 1
#madridGUG @marioggar © Mario Garcia 2018
Miembro del Mgug…
2 . 2
#madridGUG @marioggar © Mario Garcia 2018
Os interesa GraphQL porque…
He oido que GraphQL es lo que esta de moda
Estoy harto de hacer REST
Me aburria y he venido a pasar el rato
Sea lo que sea…
3 . 1
#madridGUG @marioggar © Mario Garcia 2018
3 . 2
#madridGUG @marioggar © Mario Garcia 2018
Que vamos a ver hoy ?
4 . 1

Recomendados

Groovy 2.5 and 3.0 (Spanish)
Groovy 2.5 and 3.0 (Spanish)Groovy 2.5 and 3.0 (Spanish)
Groovy 2.5 and 3.0 (Spanish)Mario García
 
Dart - el lenguaje estructurado de Google
Dart - el lenguaje estructurado de GoogleDart - el lenguaje estructurado de Google
Dart - el lenguaje estructurado de GoogleGDG Lima
 
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...
Quita, que tú no sabes; ya lo hago yo. Generación e inyección de código en ti...Alberto Sanz Herrero
 
Cómo mejorar-la-velocidad-de-tu-web (Cámara madrid)
Cómo mejorar-la-velocidad-de-tu-web (Cámara madrid)Cómo mejorar-la-velocidad-de-tu-web (Cámara madrid)
Cómo mejorar-la-velocidad-de-tu-web (Cámara madrid)SiteGround España
 
JIIDE 2012 - Clientes IDE 3D: SOSTRE y Glob3 Mobile
JIIDE 2012 - Clientes IDE 3D: SOSTRE y Glob3 MobileJIIDE 2012 - Clientes IDE 3D: SOSTRE y Glob3 Mobile
JIIDE 2012 - Clientes IDE 3D: SOSTRE y Glob3 MobileAlberto Apellidos
 

Más contenido relacionado

Similar a GraphQL y Groovy

Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Fátima Casaú Pérez
 
Penalizaciones SEO Fast Forward Barcelona 2018 by miguel lopez
Penalizaciones SEO Fast Forward Barcelona 2018 by miguel lopezPenalizaciones SEO Fast Forward Barcelona 2018 by miguel lopez
Penalizaciones SEO Fast Forward Barcelona 2018 by miguel lopezMiguel López
 
Codeando juego en Html5
Codeando juego en Html5Codeando juego en Html5
Codeando juego en Html5GDG Lima
 
Presentación de la fase final del concurso universitario de software libre gr...
Presentación de la fase final del concurso universitario de software libre gr...Presentación de la fase final del concurso universitario de software libre gr...
Presentación de la fase final del concurso universitario de software libre gr...Juan J. Merelo
 
Mobile apps - MeliDevConf BsAs.
Mobile apps - MeliDevConf BsAs.Mobile apps - MeliDevConf BsAs.
Mobile apps - MeliDevConf BsAs.melidevelopers
 
Pasos para crear juegos en Android
Pasos para crear juegos en AndroidPasos para crear juegos en Android
Pasos para crear juegos en AndroidGDG Lima
 
HAL 9000: Espiando a tu competencia
HAL 9000: Espiando a tu competenciaHAL 9000: Espiando a tu competencia
HAL 9000: Espiando a tu competenciaEstela Franco
 
Organiza tu front con dart y polymer
Organiza tu front con dart y polymerOrganiza tu front con dart y polymer
Organiza tu front con dart y polymerPablo González Doval
 

Similar a GraphQL y Groovy (11)

Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
 
Penalizaciones SEO Fast Forward Barcelona 2018 by miguel lopez
Penalizaciones SEO Fast Forward Barcelona 2018 by miguel lopezPenalizaciones SEO Fast Forward Barcelona 2018 by miguel lopez
Penalizaciones SEO Fast Forward Barcelona 2018 by miguel lopez
 
Introduccion sql geoespacial
Introduccion sql geoespacialIntroduccion sql geoespacial
Introduccion sql geoespacial
 
Codeando juego en Html5
Codeando juego en Html5Codeando juego en Html5
Codeando juego en Html5
 
Presentación de la fase final del concurso universitario de software libre gr...
Presentación de la fase final del concurso universitario de software libre gr...Presentación de la fase final del concurso universitario de software libre gr...
Presentación de la fase final del concurso universitario de software libre gr...
 
Mobile apps - MeliDevConf BsAs.
Mobile apps - MeliDevConf BsAs.Mobile apps - MeliDevConf BsAs.
Mobile apps - MeliDevConf BsAs.
 
Pasos para crear juegos en Android
Pasos para crear juegos en AndroidPasos para crear juegos en Android
Pasos para crear juegos en Android
 
HAL 9000: Espiando a tu competencia
HAL 9000: Espiando a tu competenciaHAL 9000: Espiando a tu competencia
HAL 9000: Espiando a tu competencia
 
Empezando con Angular 2
Empezando con Angular 2Empezando con Angular 2
Empezando con Angular 2
 
Camon visualizar-Redes
Camon visualizar-RedesCamon visualizar-Redes
Camon visualizar-Redes
 
Organiza tu front con dart y polymer
Organiza tu front con dart y polymerOrganiza tu front con dart y polymer
Organiza tu front con dart y polymer
 

Más de Mario García

Blockchain 101 (spanish)
Blockchain 101 (spanish)Blockchain 101 (spanish)
Blockchain 101 (spanish)Mario García
 
Jbake workshop (Greach 2019)
Jbake workshop (Greach 2019)Jbake workshop (Greach 2019)
Jbake workshop (Greach 2019)Mario García
 
Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)Mario García
 
Macro macro, burrito burrit
Macro macro, burrito burritMacro macro, burrito burrit
Macro macro, burrito burritMario García
 
Creating ASTTs The painful truth
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truthMario García
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with GroovyMario García
 
Test Motherfucker...Test
Test Motherfucker...TestTest Motherfucker...Test
Test Motherfucker...TestMario García
 
Programación concurrente con GPars
Programación concurrente con GParsProgramación concurrente con GPars
Programación concurrente con GParsMario García
 
Greach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonGreach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonMario García
 

Más de Mario García (15)

Blockchain 101 (spanish)
Blockchain 101 (spanish)Blockchain 101 (spanish)
Blockchain 101 (spanish)
 
Jbake workshop (Greach 2019)
Jbake workshop (Greach 2019)Jbake workshop (Greach 2019)
Jbake workshop (Greach 2019)
 
GraphQL & Ratpack
GraphQL & RatpackGraphQL & Ratpack
GraphQL & Ratpack
 
Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)
 
GraphQL and Groovy
GraphQL and GroovyGraphQL and Groovy
GraphQL and Groovy
 
Macro macro, burrito burrit
Macro macro, burrito burritMacro macro, burrito burrit
Macro macro, burrito burrit
 
Creating ASTTs The painful truth
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truth
 
Groovy android
Groovy androidGroovy android
Groovy android
 
Groovy on Android
Groovy on AndroidGroovy on Android
Groovy on Android
 
Gpars Workshop 2014
Gpars Workshop 2014Gpars Workshop 2014
Gpars Workshop 2014
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
Test Motherfucker...Test
Test Motherfucker...TestTest Motherfucker...Test
Test Motherfucker...Test
 
Programación concurrente con GPars
Programación concurrente con GParsProgramación concurrente con GPars
Programación concurrente con GPars
 
Gradle vs Maven
Gradle vs MavenGradle vs Maven
Gradle vs Maven
 
Greach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonGreach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con Griffon
 

Último

Silicon_Valley_RSA_2024_Latam_Immersion.pdf
Silicon_Valley_RSA_2024_Latam_Immersion.pdfSilicon_Valley_RSA_2024_Latam_Immersion.pdf
Silicon_Valley_RSA_2024_Latam_Immersion.pdfOBr.global
 
Abrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y CarreraAbrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y CarreraEdith Puclla
 
Carta Word y excel: Primer trabajo tecnología
Carta Word y excel: Primer trabajo tecnologíaCarta Word y excel: Primer trabajo tecnología
Carta Word y excel: Primer trabajo tecnologíaSofiaDiaz692624
 
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdfCaso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdfcasoacerosdeguatemal
 
Operadores de Kubernetes: El poder de la automatización
Operadores de Kubernetes: El poder de la automatizaciónOperadores de Kubernetes: El poder de la automatización
Operadores de Kubernetes: El poder de la automatizaciónEdith Puclla
 
VIDEOS DE APOYO PARA LA CREACION DE UN BLOG
VIDEOS DE APOYO PARA LA CREACION DE UN BLOGVIDEOS DE APOYO PARA LA CREACION DE UN BLOG
VIDEOS DE APOYO PARA LA CREACION DE UN BLOGSamuel709479
 
Tarea_sesion_2_Creación de una base de datos en el hosting.pptx
Tarea_sesion_2_Creación de una base de datos en el hosting.pptxTarea_sesion_2_Creación de una base de datos en el hosting.pptx
Tarea_sesion_2_Creación de una base de datos en el hosting.pptxVICTORMANUELBEASAGUI
 
presentacion de una computadora modelo uncs
presentacion de una computadora modelo uncspresentacion de una computadora modelo uncs
presentacion de una computadora modelo uncscarlocarrillocacc
 
Practica Web de la Sesión 2 , Creacion de base de datos
Practica Web de la Sesión 2 , Creacion de base de datosPractica Web de la Sesión 2 , Creacion de base de datos
Practica Web de la Sesión 2 , Creacion de base de datosChristianRivera122452
 
David_Gallegos - tarea de la sesión 2.pptx
David_Gallegos - tarea de la sesión 2.pptxDavid_Gallegos - tarea de la sesión 2.pptx
David_Gallegos - tarea de la sesión 2.pptxDAVIDROBERTOGALLEGOS
 
Situación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en ColombiaSituación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en ColombiaEnrique Posada
 
Ley de Delitos Informaticos y su aplicación en el sector privado.pptx
Ley de Delitos Informaticos y su aplicación en el sector privado.pptxLey de Delitos Informaticos y su aplicación en el sector privado.pptx
Ley de Delitos Informaticos y su aplicación en el sector privado.pptxBasile
 
marketing RPA 2024 es una coleccion de casos de uso
marketing RPA 2024 es una coleccion de casos de usomarketing RPA 2024 es una coleccion de casos de uso
marketing RPA 2024 es una coleccion de casos de usoncastagno
 
Manual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 SonoffManual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 SonoffDomotica daVinci
 
Taller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdfTaller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdfSEBASTIANMICOLTA
 
Combinación de correspondencia Sebastián Pérez
Combinación de correspondencia Sebastián PérezCombinación de correspondencia Sebastián Pérez
Combinación de correspondencia Sebastián PérezSebastinPrez67
 
Creación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptxCreación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptxALEJANDRAJOCELYNGUTI
 
IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...Educática
 

Último (20)

Silicon_Valley_RSA_2024_Latam_Immersion.pdf
Silicon_Valley_RSA_2024_Latam_Immersion.pdfSilicon_Valley_RSA_2024_Latam_Immersion.pdf
Silicon_Valley_RSA_2024_Latam_Immersion.pdf
 
Abrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y CarreraAbrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
 
Carta Word y excel: Primer trabajo tecnología
Carta Word y excel: Primer trabajo tecnologíaCarta Word y excel: Primer trabajo tecnología
Carta Word y excel: Primer trabajo tecnología
 
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdfCaso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
 
Operadores de Kubernetes: El poder de la automatización
Operadores de Kubernetes: El poder de la automatizaciónOperadores de Kubernetes: El poder de la automatización
Operadores de Kubernetes: El poder de la automatización
 
VIDEOS DE APOYO PARA LA CREACION DE UN BLOG
VIDEOS DE APOYO PARA LA CREACION DE UN BLOGVIDEOS DE APOYO PARA LA CREACION DE UN BLOG
VIDEOS DE APOYO PARA LA CREACION DE UN BLOG
 
Tarea_sesion_2_Creación de una base de datos en el hosting.pptx
Tarea_sesion_2_Creación de una base de datos en el hosting.pptxTarea_sesion_2_Creación de una base de datos en el hosting.pptx
Tarea_sesion_2_Creación de una base de datos en el hosting.pptx
 
presentacion de una computadora modelo uncs
presentacion de una computadora modelo uncspresentacion de una computadora modelo uncs
presentacion de una computadora modelo uncs
 
Practica Web de la Sesión 2 , Creacion de base de datos
Practica Web de la Sesión 2 , Creacion de base de datosPractica Web de la Sesión 2 , Creacion de base de datos
Practica Web de la Sesión 2 , Creacion de base de datos
 
La píldora de los jueves: Las claves del BREEAM - Leticia Galdos
La píldora de los jueves: Las claves del BREEAM - Leticia GaldosLa píldora de los jueves: Las claves del BREEAM - Leticia Galdos
La píldora de los jueves: Las claves del BREEAM - Leticia Galdos
 
David_Gallegos - tarea de la sesión 2.pptx
David_Gallegos - tarea de la sesión 2.pptxDavid_Gallegos - tarea de la sesión 2.pptx
David_Gallegos - tarea de la sesión 2.pptx
 
Herramientas tecnologicas para los abogados.pptx
Herramientas tecnologicas para los abogados.pptxHerramientas tecnologicas para los abogados.pptx
Herramientas tecnologicas para los abogados.pptx
 
Situación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en ColombiaSituación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en Colombia
 
Ley de Delitos Informaticos y su aplicación en el sector privado.pptx
Ley de Delitos Informaticos y su aplicación en el sector privado.pptxLey de Delitos Informaticos y su aplicación en el sector privado.pptx
Ley de Delitos Informaticos y su aplicación en el sector privado.pptx
 
marketing RPA 2024 es una coleccion de casos de uso
marketing RPA 2024 es una coleccion de casos de usomarketing RPA 2024 es una coleccion de casos de uso
marketing RPA 2024 es una coleccion de casos de uso
 
Manual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 SonoffManual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 Sonoff
 
Taller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdfTaller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdf
 
Combinación de correspondencia Sebastián Pérez
Combinación de correspondencia Sebastián PérezCombinación de correspondencia Sebastián Pérez
Combinación de correspondencia Sebastián Pérez
 
Creación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptxCreación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptx
 
IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...
 

GraphQL y Groovy

  • 1. #madridGUG @marioggar © Mario Garcia 2018 GraphQL and Groovy@marioggar 1
  • 2. #madridGUG @marioggar © Mario Garcia 2018 Me presento Nombre Mario Garcia Redes Sociales: https://twitter.com/marioggar https://github.com/mariogarcia 2 . 1
  • 3. #madridGUG @marioggar © Mario Garcia 2018 Miembro del Mgug… 2 . 2
  • 4. #madridGUG @marioggar © Mario Garcia 2018 Os interesa GraphQL porque… He oido que GraphQL es lo que esta de moda Estoy harto de hacer REST Me aburria y he venido a pasar el rato Sea lo que sea… 3 . 1
  • 5. #madridGUG @marioggar © Mario Garcia 2018 3 . 2
  • 6. #madridGUG @marioggar © Mario Garcia 2018 Que vamos a ver hoy ? 4 . 1
  • 7. #madridGUG @marioggar © Mario Garcia 2018 Indice GraphQL en general GraphQL como lenguaje de consultas GraphQL + Ratpack/Grails Conclusiones 4 . 2
  • 8. #madridGUG @marioggar © Mario Garcia 2018 GraphQL en general 5 . 1
  • 9. #madridGUG @marioggar © Mario Garcia 2018 Que es GraphQL ? Es un lenguaje de consultas Usa un sistema de tipos para de nir esas consultas 5 . 2
  • 10. #madridGUG @marioggar © Mario Garcia 2018 Que NO es GraphQL No es un web framework No tiene que ver necesariamente con HTTP Y desde luego… GraphQL no es REST 5 . 3
  • 11. #madridGUG @marioggar © Mario Garcia 2018 GraphQL vs Rest 5 . 4
  • 12. #madridGUG @marioggar © Mario Garcia 2018 Que los diferencia ? 5 . 5
  • 13. #madridGUG @marioggar © Mario Garcia 2018 Lo primero Mientras que REST es buenas practicas + HTTP GraphQL es SOLO un lenguaje de consulta 5 . 6
  • 14. #madridGUG @marioggar © Mario Garcia 2018 Diferencias 5 . 7
  • 15. #madridGUG @marioggar © Mario Garcia 2018 Recursos vs Consultas Rest: 1 URI ⇒ 1 recurso GraphQL: 1 URI ⇒ N consultas 5 . 8
  • 16. #madridGUG @marioggar © Mario Garcia 2018 Recursos vs Consultas 5 . 9
  • 17. #madridGUG @marioggar © Mario Garcia 2018 Recursos vs Consultas 5 . 10
  • 18. #madridGUG @marioggar © Mario Garcia 2018 Manejo de errores Rest ⇒ HTTP codes GraphQL error messages in responses 5 . 11
  • 19. #madridGUG @marioggar © Mario Garcia 2018 Tipo de Aplicaciones Rest == HTTP GraphQL puede usarse con: HTTP, JDBC, AMQP…etc 5 . 12
  • 20. #madridGUG @marioggar © Mario Garcia 2018 Documentacion Rest ⇒ varias implementaciones, no hay especi cacion (destaca Swagger) GraphQL ⇒ Todos los motores GraphQL exponen el esquema de la misma manera 5 . 13
  • 21. #madridGUG @marioggar © Mario Garcia 2018 Front-End friendly Rest ⇒ Back a veces no puede ir a la velocidad que demanda el front GraphQL ⇒ Mucha mas exibilidad del back para dar respuesta al front 5 . 14
  • 22. #madridGUG @marioggar © Mario Garcia 2018 Soy back quieres ser mi amigo ? 5 . 15
  • 23. #madridGUG @marioggar © Mario Garcia 2018 Resumiendo 1 solo endpoint Deja que nos concentremos solo en la consulta Granularidad en la carga de datos Documentacion out-of-the-box 5 . 16
  • 24. #madridGUG @marioggar © Mario Garcia 2018 El ejemplo Peliculas de James Bond Aunque ahora el client SOLO sera el navegador… Los conceptos nos serviran para cualquier tipo de cliente 5 . 17
  • 25. #madridGUG @marioggar © Mario Garcia 2018 Ejecutando consultas 6 . 1
  • 26. #madridGUG @marioggar © Mario Garcia 2018 Pasos para ejecutar una consulta De nir TIPOS De nir CONSULTAS Ejecutar consultas contra el esquema 6 . 2
  • 27. #madridGUG @marioggar © Mario Garcia 2018 Primer ejemplo 6 . 3
  • 28. #madridGUG @marioggar © Mario Garcia 2018 Primer ejemplo: SCHEMA type Film { title: !String year: Int } type Queries { lastFilm: Film filmByYear(year: Int): Film } schema { query: Queries } http://facebook.github.io/graphql/ 6 . 4
  • 29. #madridGUG @marioggar © Mario Garcia 2018 Primer ejemplo: TIPOS El cliente PUEDE agregar/omitir tantos campos opcionales como quiera El cliente DEBE agregar los campos obligatorios en la consulta type Film { title: String! year: Int } 6 . 5
  • 30. #madridGUG @marioggar © Mario Garcia 2018 Primer ejemplo : CONSULTAS Las consultas siempre usan tipos y escalares Las consultas puede requerir argumentos type Queries { lastFilm: Film filmByYear(year: Int): Film } 6 . 6
  • 31. #madridGUG @marioggar © Mario Garcia 2018 Primer ejemplo : EJECUCION query: "give me the last James Bond lm with its title result: "SPECTRE" { lastFilm { title } } { "data": { "lastFilm": { "title": "SPECTRE" } } } 6 . 7
  • 32. #madridGUG @marioggar © Mario Garcia 2018 Mirando un poco mas de cerca query 1. lastFilm: Es la consulta en la que estoy interesado 2. title: Es un campo especi co del tipo que se devuelve (Film) { lastFilm { (1) title (2) } } 6 . 8
  • 33. #madridGUG @marioggar © Mario Garcia 2018 Validacion title es obligatorio Consulta invalida type Film { title: String! year: Int } { lastFilm } 6 . 9
  • 34. #madridGUG @marioggar © Mario Garcia 2018 6 . 10
  • 35. #madridGUG @marioggar © Mario Garcia 2018 6 . 11
  • 36. #madridGUG @marioggar © Mario Garcia 2018 GraphQL DSL (GQL) DSL sobre GraphQL-Java Todavia alpha Se agradece Feeback :) https://github.com/grooviter/gql 6 . 12
  • 37. #madridGUG @marioggar © Mario Garcia 2018 Groovy time: TIPOS GraphQL Groovy type Film { title: String! year: Int } static GraphQLObjectType Film = DSL.type('Film') { field 'title', nonNull(GraphQLString) field 'year', GraphQLInt } 6 . 13
  • 38. #madridGUG @marioggar © Mario Garcia 2018 Groovy time: CONSULTAS type Queries { lastFilm: Film filmByYear(year: Int): Film } schema { query: Queries } return DSL.schema { queries('Queries') { field('lastFilm') { type Types.Film fetcher(Queries.&findLastFilm) // from db } field('filmByYear') { type Types.Film fetcher(Queries.&findByYear) // from db argument 'year', GraphQLString } } } 6 . 14
  • 39. #madridGUG @marioggar © Mario Garcia 2018 Groovy time: TEST query ejecucion queryString = ''' { lastFilm { year title } } ''' def result = DSL .execute(schema, queryString) .data as Map<String,Object> 6 . 15
  • 40. #madridGUG @marioggar © Mario Garcia 2018 Groovy time: EJECUCION (II) ejecucion when: 'executing the query' def result = DSL .execute(schema, queryString) .data as Map<String,Object> then: 'we should get the expected movie' result == [lastFilm: [year: 2015, title: 'SPECTRE']] where: 'the queryString literal is' queryString = ''' { lastFilm { year title } } ''' 6 . 16
  • 41. #madridGUG @marioggar © Mario Garcia 2018 Queries with arguments 6 . 17
  • 42. #madridGUG @marioggar © Mario Garcia 2018 Pelicula de 1962 ? consultas ejecucion de consultas queryString = ''' query FindBondFilmByYear($year: String){ filmByYear(year: $year) { year title } } ''' def result = DSL .execute(schema, queryString, [year: year]) 6 . 18
  • 43. #madridGUG @marioggar © Mario Garcia 2018 DR. NO 6 . 19
  • 44. #madridGUG @marioggar © Mario Garcia 2018 Sobre consultas & mutaciones Consultas suelen poder ejecutarse en batch Consultas suelen poder ejecutarse en paralelo Mutaciones se ejecutan de manera secuencial 6 . 20
  • 45. #madridGUG @marioggar © Mario Garcia 2018 Agregacion de consultas varias consultas a la vez queryString = ''' query Home($year: String){ filmByYear(year: $year) { year title } lastFilm { title year } } ''' 6 . 21
  • 46. #madridGUG @marioggar © Mario Garcia 2018 Ahora vamos a exponer esto a traves de HTTP 6 . 22
  • 47. #madridGUG @marioggar © Mario Garcia 2018 Http + GraphQL 7 . 1
  • 48. #madridGUG @marioggar © Mario Garcia 2018 Ratpack + GraphQL 7 . 2
  • 49. #madridGUG @marioggar © Mario Garcia 2018 Tecnologias Ratpack GQL GraphiQL 7 . 3
  • 50. #madridGUG @marioggar © Mario Garcia 2018 Tipo Film static GraphQLObjectType Film = DSL.type('Film') { field 'title', nonNull(GraphQLString) field 'year', GraphQLInt } 7 . 4
  • 51. #madridGUG @marioggar © Mario Garcia 2018 Consultas return DSL.schema { queries('Queries') { field('lastFilm') { type Types.Film fetcher(Queries.&findLastFilm) // from db } field('filmByYear') { type Types.Film fetcher(Queries.&findByYear) // from db argument 'year', GraphQLString } } } 7 . 5
  • 52. #madridGUG @marioggar © Mario Garcia 2018 Ratpack Handler @Override void handle(Context ctx) throws Exception { def payload = ctx.get(Map) def query = payload.query def params = payload.variables as Map<String,Object> Blocking.get { execute(schema, "$query", params) }.then { ExecutionResult result -> ctx.render(json(errors: result.errors, data: result.data)) } } 7 . 6
  • 53. #madridGUG @marioggar © Mario Garcia 2018 Uri mapping 1. GraphQL endpoint 2. GraphiQL prefix('graphql') { post(Handler) // GraphQL } files { dir('static').indexFiles('index.html') // GraphiQL } 7 . 7
  • 54. #madridGUG @marioggar © Mario Garcia 2018 Showtime! 7 . 8
  • 55. #madridGUG @marioggar © Mario Garcia 2018 Grails + GORM 7 . 9
  • 56. #madridGUG @marioggar © Mario Garcia 2018 GORM GraphQL https://grails.github.io/gorm-graphql/latest/guide/index.html 7 . 10
  • 57. #madridGUG @marioggar © Mario Garcia 2018 Tu aplicacion accede a bases de datos ? 7 . 11
  • 58. #madridGUG @marioggar © Mario Garcia 2018 Por que Grails/GORM ? GORM ❤ SQL/NoSQL Databases Entidades Gorm = Tipos/Queries/Mutations GraphQL GraphiQL out-of-the-box Plugin Grails 3 / Standalone 7 . 12
  • 59. #madridGUG @marioggar © Mario Garcia 2018 Mapear tipos class Film { static graphql = true // exposed via GraphQL String title Integer year static constraints = { year nullable: false // GraphQL validation } } 7 . 13
  • 60. #madridGUG @marioggar © Mario Garcia 2018 Operaciones por defecto 7 . 14
  • 61. #madridGUG @marioggar © Mario Garcia 2018 Type Operation Query lm(id: ..) Query lmList(max: .., sort: .., etc) Query lmCount Mutation lmCreate( lm: {}) Mutation lmUpdate(id: .., lm: {}) Mutation lmDelete(id: ..) 7 . 15
  • 62. #madridGUG @marioggar © Mario Garcia 2018 Custom Queries import org.grails.gorm.graphql.entity.dsl.GraphQLMapping class Film { static graphql = GraphQLMapping.build { query('lastFilm', Film) { dataFetcher { env -> Film.last(sort: "year") } } } String title Integer year static constraints = { year nullable: false } 7 . 16
  • 63. #madridGUG @marioggar © Mario Garcia 2018 Grail & Spring Puedes acceder a cualquier bean en un fetcher Por ejemplo springSecurityService fetcher { env -> env.context.springSecurityService } 7 . 17
  • 64. #madridGUG @marioggar © Mario Garcia 2018 Ademas Se puede optimizar la forma en la que se realizan las consultas Se pueden elegir como serializar los datos escalares (Fechas, monedas…) 7 . 18
  • 65. #madridGUG @marioggar © Mario Garcia 2018 Que me dejo… ? 8 . 1
  • 66. #madridGUG @marioggar © Mario Garcia 2018 Optimizaciones en las consultas Recuerda que cada propiedad del modelo puede tener su propio fetcher Eso deberia hacer que se pudieran optimizar las consultas 8 . 2
  • 67. #madridGUG @marioggar © Mario Garcia 2018 Instrumentacion/Interceptor Interceptan la ejecucion por diferentes motivos Autorizar Logear Lanzar cosas en background 8 . 3
  • 68. #madridGUG @marioggar © Mario Garcia 2018 Seguridad Depende de lo que estes utilizando HTTP ⇒ JWT esta de moda 8 . 4
  • 69. #madridGUG @marioggar © Mario Garcia 2018 Relay Buenas practicas con GraphQL Implementadas como especi cacion en una biblioteca JS https://facebook.github.io/relay/ 8 . 5
  • 70. #madridGUG @marioggar © Mario Garcia 2018 Relay Paginacion (restrictiva) Identi cadores (hashing) Uso de HTTP (cache por ejemplo) … http://graphql.org/learn/best-practices/ 8 . 6
  • 71. #madridGUG @marioggar © Mario Garcia 2018 Conclusiones 8 . 7
  • 72. #madridGUG @marioggar © Mario Garcia 2018 Conclusiones GraphQL no tiene que ser un sustituto 1 - 1 de REST pero… Es una mejora en la comunicacion con el front-end Front ❤ Back 8 . 8
  • 73. #madridGUG @marioggar © Mario Garcia 2018 Gracias! 8 . 9
  • 74. #madridGUG @marioggar © Mario Garcia 2018 Questions & Answers 9