Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL

 GraphQL

Intro to GraphQL before workshop done with the Guatemala's Facebook Developer Circle (spanish).

Luis Del Aguila

March 21, 2018
Tweet

More Decks by Luis Del Aguila

Other Decks in Technology

Transcript

  1. Preámbulo • Crecimiento (desde el 2015) • Empezó a trabajarse

    en 2012 en Facebook • Existe un borrador de la especificación
  2. Preámbulo • Crecimiento (desde el 2015) • Empezó a trabajarse

    en 2012 en Facebook • Existe un borrador de la especificación • Se ha implementado en clientes en más de 10 lenguajes distintos
  3. Pero… REST! Actualmente RESTful, con formato de intercambio JSON, es

    la opción predeterminada al considerar implementar una web API.
  4. El nuevo chavo de la cuadra GraphQL es una manera

    completamente nueva de implementar y consumir Web APIs. Y, si se hace bien, se puede construir integraciones maravillosamente acopladas que no son posibles con REST.
  5. El nuevo chavo de la cuadra GraphQL es una manera

    completamente nueva de implementar y consumir Web APIs. Y, si se hace bien, se puede construir integraciones maravillosamente acopladas que no son posibles con REST. http://graphql.org/
  6. GraphQL: Origins • 2012: Facebook quiere re-construir sus apps móviles

    nativas • Existen diferencias entre cómo se guarda el contenido y cómo se desea mostrar (news feed?)
  7. GraphQL: Origins • 2012: Facebook quiere re-construir sus apps móviles

    nativas • Existen diferencias entre cómo se guarda el contenido y cómo se desea mostrar (news feed?) • ¿Grafos? Así no se almacena ¯\_(ツ)_/¯
  8. GraphQL: Origins • 2012: Facebook quiere re-construir sus apps móviles

    nativas • Existen diferencias entre cómo se guarda el contenido y cómo se desea mostrar (news feed?) • ¿Grafos? Así no se almacena ¯\_(ツ)_/¯ • ¿Grafos con REST?
  9. GraphQL: Origins • 2012: Facebook quiere re-construir sus apps móviles

    nativas • Existen diferencias entre cómo se guarda el contenido y cómo se desea mostrar (news feed?) • ¿Grafos? Así no se almacena ¯\_(ツ)_/¯ • ¿Grafos con REST? • ¿En móviles?
  10. GraphQL: Origins • 2012: Facebook quiere re-construir sus apps móviles

    nativas • Existen diferencias entre cómo se guarda el contenido y cómo se desea mostrar (news feed?) • ¿Grafos? Así no se almacena ¯\_(ツ)_/¯ • ¿Grafos con REST? • ¿En móviles? Solución: obtener la data desde la perspectiva de los diseñadores de producto y desarrolladores
  11. Grafo Película How to Lose a Guy in 10 Days

    Name Director Director Name Donald Petrie
  12. Grafo + RootQuery Película How to Lose a Guy in

    10 Days Name Director Director Name Donald Petrie Root Query movieById(id: 12345)
  13. Principios del diseño • Es de naturaleza jerárquico, eso quiere

    decir que podemos seguir las relaciones entre objetos de manera natural. Y esto se acerca a como comúnmente pensamos en nuestras interfaces.
  14. Principios del diseño • Es de naturaleza jerárquico, eso quiere

    decir que podemos seguir las relaciones entre objetos de manera natural. Y esto se acerca a como comúnmente pensamos en nuestras interfaces. • Es fuertemente tipado, cada nivel en un query corresponde a un tipo, y cada tipo define un set de campos (propiedades). Esto permite dar errores más descriptivos antes de ejecutar un query.
  15. Principios del diseño • Es de naturaleza jerárquico, eso quiere

    decir que podemos seguir las relaciones entre objetos de manera natural. Y esto se acerca a como comúnmente pensamos en nuestras interfaces. • Es fuertemente tipado, cada nivel en un query corresponde a un tipo, y cada tipo define un set de campos (propiedades). Esto permite dar errores más descriptivos antes de ejecutar un query. • Es libre de versionamiento dado que los clientes hacen en el query exactamente la data que necesitan, se pueden añadir campos sin preocupación de romper algo o hacer las respuestas más pesadas.
  16. Conceptos • Los tipos, y los campos (propiedades) en dichos

    tipos • Los tipos escalares que incluye son: ◦ Int ◦ Float ◦ String ◦ Boolean ◦ ID • Se pueden definir escalares personalizados
  17. Pros • Menos “overhead” de red • Esquema fuertemente tipado

    • Encaja muy bien con data “tipo grafo”
  18. Pros • Menos “overhead” de red • Esquema fuertemente tipado

    • Encaja muy bien con data “tipo grafo” • No obliga a tener un motor de almacenamiento en específico
  19. Pros • Menos “overhead” de red • Esquema fuertemente tipado

    • Encaja muy bien con data “tipo grafo” • No obliga a tener un motor de almacenamiento en específico • Se obtiene lo que se pide
  20. Pros • Menos “overhead” de red • Esquema fuertemente tipado

    • Encaja muy bien con data “tipo grafo” • No obliga a tener un motor de almacenamiento en específico • Se obtiene lo que se pide • Introspección
  21. Pros • Menos “overhead” de red • Esquema fuertemente tipado

    • Encaja muy bien con data “tipo grafo” • No obliga a tener un motor de almacenamiento en específico • Se obtiene lo que se pide • Introspección • No hay versionamiento
  22. Cons • Más complejo (que una solución REST) • Caching

    • Versioning • Todavía muy “temprano”
  23. Cons • Más complejo (que una solución REST) • Caching

    • Versioning • Todavía muy “temprano” • Expuesto para queries arbitrarios
  24. Cons • Más complejo (que una solución REST) • Caching

    • Versioning • Todavía muy “temprano” • Expuesto para queries arbitrarios • Modelar side-effects (o “controllers”)
  25. Cons • Más complejo (que una solución REST) • Caching

    • Versioning • Todavía muy “temprano” • Expuesto para queries arbitrarios • Modelar side-effects (o “controllers”) • Monitoreo con herramientas existentes