Ambas soluciones avanzaron hacia el objetivo final de una buena experiencia de usuario, pero nunca llegaron completamente. Esto nos lleva a la directiva defer. Como podrás haber adivinado, defer es una posible solución al problema continuo de los campos con mayor latencia mientras se tiene una única respuesta. Defer es una directiva utilizada por los clientes para informar a los servidores de GraphQL que las solicitudes pueden entregarse incrementalmente al especificar las partes de una consulta que se devolverán más tarde. A día de hoy, esta directiva no forma parte de la especificación oficial de GraphQL. Sin embargo, ya ha sido utilizada por varias empresas en producción. Actualmente, se encuentra en el grupo de trabajo con un RFC de acceso público que cubre los detalles de la directiva y al final de la presentación proporcionaré un enlace al RFC. Al hacer que defer sea indicado por el cliente en lugar del servidor, ahora podemos permitir que los clientes informen al servidor qué campos pueden ser respondidos más tarde y cuáles no. Entonces, ¿cómo funciona realmente esta directiva? ¿Es magia? Bueno, no es magia, pero puede parecerlo después de trabajar con ella por primera vez. Hoy cubriremos esto a un nivel alto por cuestiones de tiempo, pero hay excelentes charlas y publicaciones que cubren los aspectos técnicos más detallados de la directiva, así como el RFC del Grupo de Trabajo. Considera el esquema básico de un sitio ficticio de redes sociales, que tiene una consulta para devolver una lista de usuarios, así como un tipo de usuario con una lista de amigos. En este ejemplo, la empresa que ejecuta este esquema de GraphQL nota que el campo de amigos no es tan eficiente como debería ser. Ahora, dada la consulta a la izquierda para obtener la lista de usuarios junto con sus amigos, enviamos las solicitudes y tarda un segundo en obtener la respuesta completa. Esto no es ideal, y como desarrollador de cliente, podríamos renderizar parcialmente los datos del usuario antes de renderizar la lista de amigos para cada usuario.
Ambas soluciones avanzaron hacia el objetivo final de una buena experiencia de usuario, pero nunca llegaron completamente. Esto nos lleva a la directiva defer. Como podrás haber adivinado, defer es una posible solución al problema continuo de los campos con mayor latencia mientras se tiene una única respuesta.
La primera pregunta que te podrías hacer es, ¿qué es esta cosa llamada directiva defer? Y es una gran pregunta. Defer es una directiva utilizada por los clientes para informar a los servidores de GraphQL que las solicitudes pueden entregarse incrementalmente al especificar las partes de una consulta que se devolverán más tarde. O en otras palabras, al retrasar la respuesta.
A día de hoy, esta directiva no forma parte de la especificación oficial de GraphQL. Sin embargo, ya ha sido utilizada por varias empresas en producción. Actualmente, se encuentra en el grupo de trabajo con un RFC de acceso público que cubre los detalles de la directiva y al final de la presentación proporcionaré un enlace al RFC.
Como un pequeño paréntesis, todos hemos visto directivas utilizadas en aplicaciones del lado del servidor. Desde información de formato, hasta notación de Apollo Federation y más. Sin embargo, la especificación de GraphQL también menciona la capacidad de usarlas en la propia consulta. En general, soy un gran defensor de las directivas ejecutables o directivas del lado del cliente. Permiten que los clientes proporcionen un contexto adicional para el uso y procesamiento de la directiva, y no simplemente una notación en el esquema sobre el comportamiento esperado como ocurre con las directivas del lado del servidor. Hemos visto directivas del lado del cliente en el pasado con cosas como skip e include, tal como se definen en la especificación, y defer es muy similar.
Entonces, ¿por qué menciono esto? Al hacer que defer sea indicado por el cliente en lugar del servidor, ahora podemos permitir que los clientes informen al servidor qué campos pueden ser respondidos más tarde y cuáles no. Ahora las solicitudes son las mismas. Pueden estar ubicadas para porciones de una consulta en un componente, pero esa misma consulta puede ser devuelta como una única respuesta en otro componente. Ese contexto es difícil de transmitir sin defer. Ahora volvamos a la programación regular.
Entonces, ¿cómo funciona realmente esta directiva? ¿Es magia? Bueno, no es magia, pero puede parecerlo después de trabajar con ella por primera vez. Hoy cubriremos esto a un nivel alto por cuestiones de tiempo, pero hay excelentes charlas y publicaciones que cubren los aspectos técnicos más detallados de la directiva, así como el RFC del Grupo de Trabajo.
Considera el esquema básico de un sitio ficticio de redes sociales, que tiene una consulta para devolver una lista de usuarios, así como un tipo de usuario con una lista de amigos. En este ejemplo, la empresa que ejecuta este esquema de GraphQL nota que el campo de amigos no es tan eficiente como debería ser. Quiero llamar explícitamente la atención sobre algo aquí. El campo de amigos, aunque devuelve una lista de usuarios no nulos, en sí mismo es anulable. Esto es importante y es algo de lo que hablaremos en un momento para explicar por qué es así.
Ahora, dada la consulta a la izquierda para obtener la lista de usuarios junto con sus amigos, enviamos las solicitudes y tarda un segundo en obtener la respuesta completa. Esto no es ideal, y como desarrollador de cliente, podríamos renderizar parcialmente los datos del usuario antes de renderizar la lista de amigos para cada usuario. En un perfil de usuario, probablemente rendericemos su nombre de usuario, información de contacto y más.
Comments