Y lo que quieres evitar es esencialmente tener un único punto final REST que se llame en todas estas plataformas y la mitad de la información que va a los dispositivos portátiles se subutilice porque no necesitas toda la información. Ahí es donde GraphQL brilla, donde puedes tener una base común o un esquema como lo llamamos en GraphQL, del cual hablaremos en un momento.
Creas el esquema esencialmente con todos los diferentes campos que deseas exponer, todos los diferentes puntos de datos que deseas exponer. Y luego eso puede ser consumido específicamente según el tipo de plataforma que está realizando la solicitud. Por lo tanto, eso permite mucha flexibilidad, pero esa flexibilidad también trae consigo un pequeño desafío porque con esa flexibilidad, esencialmente, la responsabilidad recae en la aplicación consumidora para usarla de la manera que desees, lo que significa que la estructura de las consultas, la profundidad de esas consultas y el orden de esa consulta será ligeramente impredecible. Es mucho más impredecible en ese sentido.
Por supuesto, ahora es predecible en términos de la forma en que solicitarías información y recibirías información, pero tú, como desarrollador del recurso backend, es posible que no tengas un control total en términos de cómo la aplicación frontend está solicitando esa información, puede estar solicitando de muchas formas diferentes. Por lo tanto, debes tener cuidado específicamente en cuanto a la seguridad en este caso, donde necesitas tener el poder de exponer los diferentes campos que deseas exponer según el tipo de usuarios que utilizarán esa aplicación. Y para llevar el punto aún más lejos, también estás viendo cosas como múltiples profundidades o múltiples capas de profundidad cuando se trata de realizar esas consultas. Puedes profundizar, no hay un límite bien definido en cuanto a qué tan profundo puedes ir con estas consultas. Puedes tener consultas anidadas dentro de GraphQL y eso nuevamente puede causar problemas en la gestión de la carga del servidor y a veces esto puede ser necesario, pero a veces también puede ser malicioso. Hay un par de desafíos porque ya no solo estás trabajando a nivel del punto final de la API. No solo estás trabajando en ese nivel HTTP que es esencialmente lo que hace REST, donde obviamente necesitas tener una autenticación y autorización allí, sino que también debes pensar en lo que está sucediendo en la capa de datos también, donde provienen todas tus consultas y solicitudes. Entonces, hay un par de desafíos diferentes allí.
Nuevamente, no se adhiere a las reglas estándar de tus códigos de estado y errores. Típicamente, puedes tener errores incluso con un código de estado 200, lo cual nuevamente, es algo que puede ser un poco desafiante de resolver. Pero nuevamente, porque es flexible, puedes escribir tus propios objetos de error personalizados y puedes proporcionar mucha más información según sea necesario. Hay aspectos positivos y negativos. Entonces, creo que el mantra aquí es hacer la pregunta que realmente necesitas hacer, la pregunta que realmente necesitas hacer aquí es, ¿cuál es mi caso de uso? ¿Y cuáles son mis prioridades? Cada una de estas herramientas, cada uno de estos estilos de API, tiene sus propios aspectos positivos. Cada uno de estos estilos de API tiene sus propios desafíos. Entonces, ¿cuáles de estos desafíos son inaceptables para ti? ¿En qué caso de uso te estás enfocando realmente, realmente? Y dependiendo de eso, puedes tomar una decisión. Entonces, cualquiera de estos podría funcionar para ti según tu caso de uso. No se trata de que GraphQL venga a reemplazar a REST. Esencialmente, cada uno de ellos tiene diferentes problemas que pueden resolver muy bien. Y debes preguntarte qué problema o qué desafío es el que te importa y, por lo tanto, elegir una solución en consecuencia. Esa es un poco la esencia de GraphQL. Una breve introducción al mundo de GraphQL.
También quiero presentar un par de conceptos realmente, realmente simples de GraphQL, que esencialmente te ayudarán a comprender mejor a medida que comencemos a construir nuestra solución. Lo que he hecho aquí es tomar este esquema. Este es esencialmente el esquema que vamos a construir en función de la aplicación Express GraphQL que vamos a construir en la próxima hora. Entonces, comencemos definiendo qué es un esquema. Un esquema es esencialmente en GraphQL, un esquema es esencialmente el diseño de tu API. Define todos los diferentes tipos, todas las diferentes cosas que puedes hacer, las diferentes acciones que puedes realizar, los diferentes datos que puedes solicitar. Entonces, eso es esencialmente el diseño de toda tu API de GraphQL. Ahora, más allá de eso, si ves aquí en la parte superior, ves algo llamado tipo mutación, ves algo llamado tipo consulta. Ahora, si volvemos a los objetivos de las API, si miramos las aplicaciones CRUD, el C-R-U-D, que es esencialmente crear, leer, actualizar y eliminar. Estas son las tareas básicas que generalmente deseas realizar con tus API. Tal vez una de ellas, tal vez todas ellas, según lo que desees lograr. Entonces, en REST, tendrías algo como solicitudes GET para solicitar información, leer información, tu R dentro del CRUD, crear, probablemente hacer una solicitud POST, las actualizaciones podrían ser parches, tal vez incluso puts y delete, podría ser simplemente delete. Entonces, de manera similar, esencialmente tenemos nuestros dos tipos diferentes aquí, que es esencialmente consultar y mutaciones. Las consultas, por lo general, están destinadas a solicitar información, como sugiere el nombre. Ahora, con las consultas, esencialmente esta es la estructura que verás, defines el tipo de acciones que puedes realizar o el tipo de información que puedes solicitar, y las consultas te ayudarán a lograrlo. Ahora, este es, con mucho, el aspecto más utilizado de GraphQL. En su mayoría, esta es la solicitud que se realiza. Pero más allá de eso, tenemos lo que se llama mutaciones. Como sugiere el nombre, las mutaciones esencialmente son la manipulación o el cambio o la modificación de datos en tu fuente de datos. Eso incluiría agregar nueva información, agregar nuevos datos a tu fuente de datos, eso incluiría actualizar datos en tu fuente de datos, o podría tratarse de eliminar información de tu fuente de datos. En el ejemplo de hoy, en realidad veremos cómo puedes agregar un usuario. Pero tal vez como ejercicio, cuando regreses y lo intentes tú mismo, tal vez también puedas explorar cómo puedes actualizar y eliminar información también, como cuando intentes practicar estas cosas tú mismo. Pero, esos son los dos grandes. Si estás comenzando con un esquema, aquí es esencialmente donde comenzarías, este es el objetivo de construir tu esquema. Estás tratando de permitir que las personas consulten tu información, consulten tus fuentes de datos, o estás tratando de permitir que las personas realmente realicen cambios o modifiquen esas fuentes de datos. Consultas y mutaciones. Hay un tercer tipo aquí, que es la suscripción, que es esencialmente un oyente. Puedes escuchar cambios en tu fuente de datos, pero para el propósito de la conversación de hoy, voy a omitir la suscripción, pero siéntete libre de leer también sobre eso. Habrá una nueva actualización emocionante de la que hablaré quizás en un mes, así que mantente atento a eso. Pero las suscripciones, nuevamente, a diferencia de lo que tendrías con tus operaciones básicas de REST, la suscripción viene prácticamente construida, integrada en GraphQL, y es un mecanismo para escuchar eventos específicos o cambios, por ejemplo, en la información del usuario, tal vez cambios si se agrega una nueva lista de tareas pendientes, entonces tal vez quieras ser notificado en función de eso. Eso es lo que hacen las suscripciones. Pero nos centraremos en consultas y mutaciones para el propósito de la demostración de hoy.
Ahora, más allá de eso, si lo miras, los bloques de construcción esenciales, ¿cómo se dice? Los bloques de construcción esenciales de tu esquema de GraphQL son, o son, tus tipos, tus tipos y tus campos. Ahora, si ves un ejemplo aquí, tienes tu tipo tarea, tienes tu tipo usuario, y dentro de estos tipos, esencialmente son objetos. Estos son objetos que definen los diferentes tipos de datos, los diferentes campos que se unen para proporcionar la información que necesitas. Por lo general, tienen una correlación con tu fuente de datos detrás de escena, como verás en muy poco tiempo, pero también están definidos por, estos campos tienen tipos asociados. Entonces, esto es lo que llamarías escalares. Los escalares están esencialmente construidos en GraphQL, nuevamente. Entonces tienes algunos tipos básicos que ya son proporcionados por GraphQL. Tienes tu entero, tienes tus cadenas, también tienes un booleano. Y luego, más adelante, también puedes tener listas.
Comments