Y esto es realmente interesante, ¿verdad? Esto es, si piensas en cómo funciona en el fondo, si piensas en la ergonomía, es como, oh, este fragmento es como una consulta, así que puedo ejecutar esta consulta de nuevo. Ese es un proceso de pensamiento conveniente, ¿verdad? Pero en realidad, no es fácil hacer que funcione porque un fragmento no puede ejecutarse de forma aislada, ¿verdad? Un fragmento necesita ejecutarse como parte de una consulta más grande. Entonces, ¿cómo puede ejecutarse un fragmento por sí mismo? Y el secreto aquí es que una API de Relay normalmente implementa una interfaz de nodo y una resolución raíz de cualquier nodo. Entonces, una API compatible con Relay, bueno, ya no es obligatorio, es opcional, es que cada elemento que estás obteniendo tiene una interfaz o implementa una interfaz llamada nodo y tiene un ID globalmente único, ¿verdad? Y tu API de Relay GraphQL tiene un resolvedor raíz para obtener cualquier nodo solo por su tipo de GUID, su ID globalmente único. Entonces, lo que Relay puede hacer es que cuando marco o solicito al cliente que vuelva a obtener un fragmento en particular, el cliente no tiene que ejecutar toda la consulta de nuevo. El cliente solo vuelve a ejecutar la consulta para esa columna o ese elemento en particular que quiero volver a ejecutar. Y el cliente puede hacer eso porque cada elemento es una instancia de nodo y cada elemento tiene un ID único. Entonces, la consulta que se está ejecutando en segundo plano es en realidad consulta, elemento, ID único y los campos exactos que quiero. Entonces, en nuestro ejemplo particular, hay una consulta en segundo plano que se ejecuta cada vez que hacemos un re-fetch. La consulta que se está ejecutando, la consulta subyacente de GraphQL que se está ejecutando es una consulta en la columna donde el ID es igual al ID actual para esta columna que estoy renderizando, que es un ID geo que tengo. Y está obteniendo los campos nombre, descripción, tipo, anulable, único, predeterminado, lo que sea. Como está obteniendo los diferentes atributos que quiero. Y esto es realmente bueno. Obtengo la conveniencia de usar fragmentos, ¿verdad? Pero al mismo tiempo, obtengo la capacidad de tratar cada fragmento como una consulta. Y esto es realmente conveniente. Entonces, para resumir, si comienzas a mirar Relay, puede ser un poco abrumador. Si miras la documentación de Relay, si escuchas a las personas hablar de Relay, hay mucho sucediendo. No te preocupes demasiado por eso. Piensa en la modularidad que deseas en tu aplicación como la modularidad que puedes lograr con un buen enfoque basado en fragmentos. A medida que comienzas a pensar en esa modularidad y comienzas a pensar en usar fragmentos en la práctica, notarás que tendrás que reconstruir muchas de las mismas decisiones de diseño que Relay te impone desde el principio, ¿verdad? Por ejemplo, nombres únicos de fragmentos que nos permiten importar fragmentos automáticamente, ¿verdad? Tener directivas del lado del cliente que nos permitan declarar variables para fragmentos, tener la interfaz de nodo y un ID global único que nos permita volver a obtener y volver a ejecutar fragmentos según la demanda, eso facilita la paginación, facilita cosas como expandir un elemento, ¿verdad? Hace que todas esas interacciones sean más fáciles. Así que hoy estoy lanzando, hoy hemos estado trabajando muy duro en esto durante las últimas semanas, es que puedes probar Relay con Hasura. Así que ve a hasura.io/GraphQL/Relay. Todo lo que necesitas hacer es implementarlo en Heroku si solo quieres probar las cosas, configurar tu base de datos, hacer un poco de modelado de datos, establecer algunas relaciones entre estos modelos de datos que tienes, configurar las reglas de permisos, y obtendrás una API de Relay instantáneamente que puedes comenzar a usar e integrar. Y luego, por supuesto, más allá de las API de tipo CRUD que obtienes, una vez que quieras comenzar a agregar lógica de negocio personalizada, puedes agregarla en tu lenguaje favorito también, Node.js o Python o Ruby o lo que quieras, y desplegarlas en funciones sin servidor o donde sea, y eso se agregará a tu API de GraphQL con Hasura también. Y podrás probar Relay. Así que pruébalo. Danos tu opinión. Está en beta y deberíamos poder lanzarlo de manera estable muy, muy pronto. Para esta charla en particular, necesité mucha persuasión y comprensión, y obviamente la documentación de Relay ayuda, pero dos personas que me ayudaron especialmente fueron Gabriel y Sean, definitivamente deberías seguirlos en Twitter en ZTH y sgrove. Y también tienen dos publicaciones de blog muy buenas que han escrito juntos sobre Relay, que hablan sobre el cliente de GraphQL que hace el trabajo listo para ti y hablan sobre la paginación. Así que también deberías echarle un vistazo. Eso es todo de mi parte. Soy Tamay. Puedes encontrarme en Twitter. No dudes en contactarme si tienes alguna pregunta sobre GraphQL, Hasura, Relay y haré todo lo posible para responderlas o conectarte con personas que puedan responderlas. Gracias. Eso es todo de mi parte.
Comments