Slide 1

Slide 1 text

Cómo fui de MySQL DB a GraphQL API en 7 días Alco Co-founder/CTO - Musicasa [email protected] · https://alco.rocks · https://musicasaa.com

Slide 2

Slide 2 text

- Original de Caguas, Puerto Rico 󰐦 - Creando soluciones de tecnología desde el 1996 - 4x Founder - 8 años como director de Developer Relations para - Appcelerator - Pioneros en la categoría de desarrollo de aplicaciones móviles cross-platform - Contentful - Líderes en la categoría de “Enterprise Headless CMS” - Author de 5 libros - Cofundador y CTO de Musicasa (https://musicasaa.com) Hola, soy Alco

Slide 3

Slide 3 text

Antes de comenzar - Estos slides los encuentras en https://speakerdeck.com/ricardoalcocer - El repositorio de código lo encuentras en https://github.com/ricardoalcocer/php_graphql/ - El repositorio está dividido en 6 branches - Utilizaré Altair como GraphQL Client - https://chrome.google.com/webstore/detail/altair- graphql-client/flnheeellpciglgpaodhkhmapeljopja ?hl=en

Slide 4

Slide 4 text

¿Por qué considerar GraphQL?

Slide 5

Slide 5 text

RESTful siempre es nuestra primera opción - Maduro - Es basado en las funcionalidades del protocolo HTTP - Stateless (tal como el protocolo mismo) - Utiliza los métodos que son parte de la especificación de HTTP - Diseñado para resolver el problema de proveer acceso a recursos (métodos/base de datos) a personas externas a organizaciones - Remplazó a S.O.A.P. y otras tecnologías que no estaban optimizadas para uso en Internet

Slide 6

Slide 6 text

Facebook siguió la tendencia... https://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5

Slide 7

Slide 7 text

Notaron que las herramientas existentes no resolverían su problema https://www.youtube.com/watch?v=783ccP__No8

Slide 8

Slide 8 text

La solución fue crear un Query Language para APIs - No es un producto, no es una tecnología: Es una Especificación - Cuenta con librerías para múltiples lenguajes - Mientras REST fue diseñado para resolver un problema del servidor de bases de datos, GraphQL se diseñó para resolver el problemas del Front-End Engineer - Un solo “HTTP request” puede regresar data a múltiples niveles - Estarás aprendiendo 2 “lenguajes” - El utilizado por el back-end engineer para exponer los métodos GraphQL - El utilizado por el front-end engineer para consultar la data

Slide 9

Slide 9 text

Facebook se detuvo en seco para repensar su estrategia Miremos el problema más de cerca

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Ahora vamos al código

Slide 18

Slide 18 text

Ahora vamos paso a paso a implementar un API GraphQL sobre esta data

Slide 19

Slide 19 text

Paso #1 Conectar el ORM a la base de datos

Slide 20

Slide 20 text

Instalar configurar Elloquent ORM - Utilizaremos PHP “vainilla” - Integraremos una versión “light” de IlluminateDB, la base de datos de Laravel - Más en https://github.com/illuminate/database - También crear “data models” para decirle al ORM como acceder las tablas de las BD

Slide 21

Slide 21 text

Configurar Elloquent ORM index.php ./models/Artist.php

Slide 22

Slide 22 text

Paso #2 Crear endpoint para obtener récord por Id

Slide 23

Slide 23 text

Configurando GraphQL ./graphql/main.php ./graphql/query.php ./graphql/objects.php

Slide 24

Slide 24 text

Configurando GraphQL ./graphql/main.php ./graphql/query.php ./graphql/objects.php

Slide 25

Slide 25 text

Configurando GraphQL ./graphql/main.php ./graphql/query.php ./graphql/objects.php

Slide 26

Slide 26 text

Paso #3 Crear endpoint para obtener todos los récords con LIMIT y OFFSET

Slide 27

Slide 27 text

Nuevo endpoint para obtener todos los récords

Slide 28

Slide 28 text

Paso #4 Crear mutaciones de datos

Slide 29

Slide 29 text

Add, Edit, Delete - Las mutaciones utilizan el mismo patrón que vimos anteriormente

Slide 30

Slide 30 text

Add, Edit, Delete - Las mutaciones utilizan el mismo patrón que vimos anteriormente

Slide 31

Slide 31 text

Paso #5 Implementar relaciones entre data

Slide 32

Slide 32 text

Puedes agregar relaciones - Puedes agregar ramas “custom” a tus objetos - Esto permite hacer “nesting” de múltiples llamadas, las cuales serán resueltas por GraphQL

Slide 33

Slide 33 text

Puedes agregar relaciones

Slide 34

Slide 34 text

Paso #6 Completar la implementación de todas la relaciones

Slide 35

Slide 35 text

Veamos el proyecto completado

Slide 36

Slide 36 text

Gracias por tu atención Si encontraste valor en este contenido, considera 1. Únete a mi lista VIP https://alco.rocks 2. Invítame a un café https://buymeacoffee.com/alco 3. Todos mis contactos en https://bio.link/alco