SlideShare a Scribd company logo

GraphQL y Groovy

Mario García
Mario García
Mario GarcíaSoftware Developer at Kaleidos Open Source

Talk (Spanish) about GraphQL and Groovy implementations.

GraphQL y Groovy

1 of 74
Download to read offline
#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
Ad

Recommended

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
 

More Related Content

Similar to 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 to 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
 

More from 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
 

More from 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
 

Recently uploaded

Tarea 4. Ensayo sobre "Plagio académico"
Tarea 4. Ensayo sobre "Plagio académico"Tarea 4. Ensayo sobre "Plagio académico"
Tarea 4. Ensayo sobre "Plagio académico"FernandoCalapaqui
 
Tarea 1. Ensayo sobre "La sociedad de la ignorancia"
Tarea 1. Ensayo sobre "La sociedad de la ignorancia"Tarea 1. Ensayo sobre "La sociedad de la ignorancia"
Tarea 1. Ensayo sobre "La sociedad de la ignorancia"ferpatfut1109
 
Ejercicios de búsqueda eficaz. Navegadores
Ejercicios de búsqueda eficaz. NavegadoresEjercicios de búsqueda eficaz. Navegadores
Ejercicios de búsqueda eficaz. NavegadoresDannyErazo5
 
Práctica 3. Búsqueda de información en bases de datos académicas
Práctica 3. Búsqueda de información en bases de datos académicasPráctica 3. Búsqueda de información en bases de datos académicas
Práctica 3. Búsqueda de información en bases de datos académicasFernandoCalapaqui
 
Práctica 1. Pasaporte de identificación.
Práctica 1. Pasaporte de identificación.Práctica 1. Pasaporte de identificación.
Práctica 1. Pasaporte de identificación.FernandoCalapaqui
 
Práctica 2. Uso de Marcadores Sociales
Práctica 2.   Uso de Marcadores SocialesPráctica 2.   Uso de Marcadores Sociales
Práctica 2. Uso de Marcadores SocialesFernandoCalapaqui
 
Taller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdf
Taller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdfTaller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdf
Taller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdfDavidGonzalez684841
 
Práctica 2. Aplicación de la herramienta Formularios de Google (4).pdf
Práctica 2. Aplicación de la herramienta Formularios de Google (4).pdfPráctica 2. Aplicación de la herramienta Formularios de Google (4).pdf
Práctica 2. Aplicación de la herramienta Formularios de Google (4).pdfFernandoCalapaqui
 
FUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALES
FUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALESFUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALES
FUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALESNoemiZavalzaValderrr
 
Búsqueda de información en bases de datos académicas
Búsqueda de información en bases de datos académicasBúsqueda de información en bases de datos académicas
Búsqueda de información en bases de datos académicasDannyErazo5
 
Cherubini Meta Z-Wave Smart Plug Manual A510068
Cherubini Meta Z-Wave Smart Plug Manual A510068Cherubini Meta Z-Wave Smart Plug Manual A510068
Cherubini Meta Z-Wave Smart Plug Manual A510068Domotica daVinci
 
Prueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdf
Prueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdfPrueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdf
Prueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdfFernandoCalapaqui
 
Tarea 1. Ensayo sobre "La sociedad de la ignorancia".
Tarea 1. Ensayo sobre "La sociedad de la ignorancia".Tarea 1. Ensayo sobre "La sociedad de la ignorancia".
Tarea 1. Ensayo sobre "La sociedad de la ignorancia".FernandoCalapaqui
 
Práctica 4. Ejercicios de búsqueda eficaz(2).pdf
Práctica 4. Ejercicios de búsqueda eficaz(2).pdfPráctica 4. Ejercicios de búsqueda eficaz(2).pdf
Práctica 4. Ejercicios de búsqueda eficaz(2).pdfFernandoCalapaqui
 
Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"DannyErazo5
 
Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"FernandoCalapaqui
 
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdfBIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdfexpertoleonelmartine
 
Tarea 2. Ensayo sobre "La internet y su evolución"
Tarea 2. Ensayo sobre "La internet y su evolución"Tarea 2. Ensayo sobre "La internet y su evolución"
Tarea 2. Ensayo sobre "La internet y su evolución"ferpatfut1109
 
Detalles Constructivos Puertas y anclaje.pptx
Detalles Constructivos Puertas y anclaje.pptxDetalles Constructivos Puertas y anclaje.pptx
Detalles Constructivos Puertas y anclaje.pptxLuisChili1
 
Detalles Constructivos pasamanos de acero inoxidable.pptx
Detalles Constructivos pasamanos de acero inoxidable.pptxDetalles Constructivos pasamanos de acero inoxidable.pptx
Detalles Constructivos pasamanos de acero inoxidable.pptxLuisChili1
 

Recently uploaded (20)

Tarea 4. Ensayo sobre "Plagio académico"
Tarea 4. Ensayo sobre "Plagio académico"Tarea 4. Ensayo sobre "Plagio académico"
Tarea 4. Ensayo sobre "Plagio académico"
 
Tarea 1. Ensayo sobre "La sociedad de la ignorancia"
Tarea 1. Ensayo sobre "La sociedad de la ignorancia"Tarea 1. Ensayo sobre "La sociedad de la ignorancia"
Tarea 1. Ensayo sobre "La sociedad de la ignorancia"
 
Ejercicios de búsqueda eficaz. Navegadores
Ejercicios de búsqueda eficaz. NavegadoresEjercicios de búsqueda eficaz. Navegadores
Ejercicios de búsqueda eficaz. Navegadores
 
Práctica 3. Búsqueda de información en bases de datos académicas
Práctica 3. Búsqueda de información en bases de datos académicasPráctica 3. Búsqueda de información en bases de datos académicas
Práctica 3. Búsqueda de información en bases de datos académicas
 
Práctica 1. Pasaporte de identificación.
Práctica 1. Pasaporte de identificación.Práctica 1. Pasaporte de identificación.
Práctica 1. Pasaporte de identificación.
 
Práctica 2. Uso de Marcadores Sociales
Práctica 2.   Uso de Marcadores SocialesPráctica 2.   Uso de Marcadores Sociales
Práctica 2. Uso de Marcadores Sociales
 
Taller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdf
Taller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdfTaller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdf
Taller de BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS-1.pdf
 
Práctica 2. Aplicación de la herramienta Formularios de Google (4).pdf
Práctica 2. Aplicación de la herramienta Formularios de Google (4).pdfPráctica 2. Aplicación de la herramienta Formularios de Google (4).pdf
Práctica 2. Aplicación de la herramienta Formularios de Google (4).pdf
 
FUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALES
FUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALESFUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALES
FUNCIONES DEFINIDAS POR EL USUARIO Y VARIABLES SUPERGLOBALES
 
Búsqueda de información en bases de datos académicas
Búsqueda de información en bases de datos académicasBúsqueda de información en bases de datos académicas
Búsqueda de información en bases de datos académicas
 
Cherubini Meta Z-Wave Smart Plug Manual A510068
Cherubini Meta Z-Wave Smart Plug Manual A510068Cherubini Meta Z-Wave Smart Plug Manual A510068
Cherubini Meta Z-Wave Smart Plug Manual A510068
 
Prueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdf
Prueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdfPrueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdf
Prueba Objetiva del Parcial 1_Grupo 1_ Revisión del intento _ UNACH.pdf
 
Tarea 1. Ensayo sobre "La sociedad de la ignorancia".
Tarea 1. Ensayo sobre "La sociedad de la ignorancia".Tarea 1. Ensayo sobre "La sociedad de la ignorancia".
Tarea 1. Ensayo sobre "La sociedad de la ignorancia".
 
Práctica 4. Ejercicios de búsqueda eficaz(2).pdf
Práctica 4. Ejercicios de búsqueda eficaz(2).pdfPráctica 4. Ejercicios de búsqueda eficaz(2).pdf
Práctica 4. Ejercicios de búsqueda eficaz(2).pdf
 
Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"
 
Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"Ensayo sobre "La internet y su evolución"
Ensayo sobre "La internet y su evolución"
 
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdfBIG DATA EJEMPLOS. desarrrollo de curso.pdf
BIG DATA EJEMPLOS. desarrrollo de curso.pdf
 
Tarea 2. Ensayo sobre "La internet y su evolución"
Tarea 2. Ensayo sobre "La internet y su evolución"Tarea 2. Ensayo sobre "La internet y su evolución"
Tarea 2. Ensayo sobre "La internet y su evolución"
 
Detalles Constructivos Puertas y anclaje.pptx
Detalles Constructivos Puertas y anclaje.pptxDetalles Constructivos Puertas y anclaje.pptx
Detalles Constructivos Puertas y anclaje.pptx
 
Detalles Constructivos pasamanos de acero inoxidable.pptx
Detalles Constructivos pasamanos de acero inoxidable.pptxDetalles Constructivos pasamanos de acero inoxidable.pptx
Detalles Constructivos pasamanos de acero inoxidable.pptx
 

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