Echemos un vistazo a la consulta de introspección. Esta es la consulta de introspección en una forma muy abreviada porque la real tiene más de 100 líneas y no sería muy bueno mostrarla aquí en una diapositiva. Esta es una forma breve de ella y puedes importarla desde la implementación de referencia de GraphQL.js y te dará básicamente todo lo que el sistema de tipos sabe. Así que puedes verlo como una consulta de introspección completa.
Lo que hace es que te da todos los tipos, el tipo de tipo, por ejemplo, si es un objeto, un enum, una directiva, el nombre, la descripción y si está disponible, los campos están ahí. Así que realmente se basan en la característica de nulabilidad de GraphQL. Cada tipo tendrá la misma estructura y no necesitas hacer fragmentos o algo así para obtener los campos. Podrían ser simplemente nulos, entonces los campos serán nulos en la respuesta. Sin embargo, en el caso de objetos, realmente obtendrás los campos devueltos.
También podemos escribir nuestras propias consultas de introspección. Como dije anteriormente en la introducción, en Contentful estamos generando diferentes esquemas basados en la entrada del cliente. Así que pensamos que sería bastante útil probar que nuestras suposiciones de generación realmente sean correctas. Para una entrada dada, queremos comprobar que se generen un conjunto específico de tipos. Lo que hicimos fue escribir nuestra propia consulta de introspección, que llamamos aquí introspectar todos los nombres de tipo , que nos devuelve en el esquema todos los tipos y sus nombres. Luego, en una afirmación de prueba, podemos verificar que, por ejemplo, la consulta o el tipo de prueba CT estén disponibles en nuestra API. Con eso, básicamente puedes probar todas esas suposiciones con tus propias consultas de introspección sin tener que escribir las 100 líneas completas de código.
En este punto, es posible que te preguntes, bueno, ya tenemos el lenguaje de definición de esquema, ¿por qué no podemos usar eso? Sí, esto sería posible. Podrías tomar la cadena SDL, podrías analizarla en los tipos de objeto y luego podrías trabajar con ellos. Esto no es realmente la mejor experiencia. Además, hay otro problema. GraphQL es independiente del transporte. Si bien generalmente se sirve a través de HTTP, y es tan común que incluso hay una especificación de GraphQL sobre HTTP , técnicamente también podrías usar llamadas RPC, por ejemplo, o podrías tener algunas interacciones de web sockets. En esos casos, también quieres poder obtener tus resultados de introspección. Lo que no podemos hacer es simplemente crear otro punto final HTTP, porque esos no están disponibles, como RPC o web socket. Luego podrías pensar, bueno, podríamos ponerlos en un campo en algún lugar. Sí, puedes, y luego simplemente devolver una cadena muy larga que contenga tu SDL completa. En realidad, eso es lo que Apollo está haciendo cuando usas la Federación. En la Federación, luego tienes, creo que se llama tipo de servicio, y en ese servicio, tienes un campo SDL que te devuelve la cadena completa del SDL nuevamente. Para mí, eso se siente un poco hacky, pero entiendo el razonamiento, y también aprenderás sobre eso hoy. Los esquemas a menudo también se pueden filtrar o unir y todo, y solo quieres servir el final real, y tendrías que asegurarte de siempre devolver el correcto.
Comments