Si hay algo que sabemos cuando se trata de tecnología es que las cosas cambian rápido y todo el tiempo. Nuevas características de lenguaje llegan, bibliotecas, convenciones, las cosas que son geniales cambian, e incluso los requisitos comerciales surgen todo el tiempo.
Al crear Urql, uno de los objetivos era asegurarse de que fuera lo más flexible posible, para que pudiera adaptarse al cambiante panorama tecnológico. Así que para hacer que Urql sea lo más adaptable posible, está construido para ser lo más extensible posible.
La extensibilidad realmente está en el corazón de Urql, lo que nos lleva a los intercambios. Urql está construido sobre intercambios. Así que si piensas en lo que hace un cliente de GraphQL en su núcleo, toma una solicitud, una consulta o una mutación, y da la respuesta apropiada, ya sea un acierto de caché, una respuesta de la API, o un error. Como resultado, la mayoría de los clientes de GraphQL, incluido Urql, están construidos para ser basados en flujos. Así que un intercambio es solo un complemento que te permite inspeccionar y modificar tanto los flujos entrantes como salientes.
Déjame mostrarte esto, con un ejemplo, porque eso lo hará mucho más claro. Cuando instalas Urql y ejecutas una consulta, por defecto, Urql utiliza tres intercambios. Estos vienen empaquetados en UrqlCore. Así que tenemos los intercambios dedupe, cache y fetch. Todos estos son completamente reemplazables, por cierto, así que puedes intercambiar cualquiera de estos por una implementación personalizada o alternativa.
Así que primero, el intercambio dedupe, elimina solicitudes duplicadas cuando la solicitud exacta ya está en curso. Así que imagina un sitio web con un encabezado y una barra lateral. Y ambos quieren mostrar el nombre del usuario. Ambos usarán una consulta con exactamente la misma consulta. Lo que hace el intercambio fetch, el intercambio dedupe, es asegurarse de que solo una instancia de esa consulta se pase al siguiente intercambio, y por lo tanto, eliminando la necesidad de una solicitud API duplicada.
Luego, el intercambio cache devuelve los datos del caché si hay alguno. Y finalmente, el intercambio fetch, que siempre estará en el último intercambio en la matriz, realiza la solicitud de red real y coloca el resultado de nuevo en el flujo de salida. Luego, el resultado se pasa desde el intercambio de solicitud de red al intercambio cache, donde se almacena para la próxima vez, y finalmente, se pasa de nuevo al resultado de la consulta.
Ahora, dado que literalmente puedes agregar una cantidad ilimitada de complementos, la única forma de garantizar que todos se lleven bien entre sí es asegurarse de que cada complemento permanezca sin opiniones. Veamos un ejemplo real de esto en Intercambios. Primero, tenemos el intercambio fetch del que ya hablamos. Este es el intercambio fetch predeterminado incluido en Urql Core. Obtiene los datos de la API y los agrega al flujo de salida. Ahora, un paquete complementario separado, puedes instalar un paquete complementario separado para consultas persistentes automáticas en un intercambio fetch persistente. Así que, este intercambio utiliza la misma lógica de fetch que el intercambio fetch real. Pero con consultas persistentes automáticas, básicamente la forma en que funciona es que permite el almacenamiento en caché del lado del servidor de los datos de GraphQL.
Comments