Hey coders!!!!!!
Sí, es exactamente como lo leen tu ojos....he vuelto 😉...y esta vez con las pilas cargadas, luego de estar un tiempo sin casi postear ningun artículo, pues hoy les traigo una entrega más...sí, es correcto...será acerca de .NET 😁 ese estupendo framework de Microsoft que cada vez hace que nos sintamos mas atraidos a aprenderlo, en esta ocación estaremos implementando un proyecto sencillo para apredner como interactúa .NET con Graphql y como podemos hacer para crear nuestra propia API GraphQL usando .NET.
A lo largo de este artículo estaremos viendo como podemos interactuar con GraphQL, que es en sí, para que se usa y que beneficios tiene, y por supuesto veremos también un pequeño ejemplo de todo esto que estaremos hablando. Bien si estas listo y tienes a la mano tu "Binary Coffe" entonces te invito a que me acompañes a codear junto a mí esta solución.
GraphQL es un lenguaje de consulta utilizado cuando estamos creando APIs, su función es brindar a los clientes exactamente los datos que solicitan y nada más. Gracias a GraphQL, las API son rápidas, flexibles y sencillas para los desarrolladores. Incluso se puede implementar en un entorno de desarrollo integrado (IDE) conocido como GraphiQL. Como alternativa a REST, GraphQL permite que los desarrolladores creen consultas para extraer datos de varias fuentes en una sola llamada a la API.
Una vez que ya tenemos claro y hemos entendido que es GraphQL y lo que podemos hacer pasemos entonces a preparar nuestro proyecto.
El primer paso que llevaremos a cabo será verificar que tenemos instalado el framework de .NET que es obviamente con el que estaremos trabajando, esto podemos hacerlo mediante el siguiente comando:
al momento de escribir este proyecto la version que tengo instalada en mi pc es la "7.0.100" la más reciente lanzada por Microsoft hasta este momento, pero igual si usted cuenta con la versión "6.0.100" podra ejecutar el código sin problema ninguno.
Una vez que hemos chequeado que tenemos instalado el framework en cuestión pasaremos a ejecutar el comando para crear nuestro proyecto básico con el cual estaremos trabajando en este proyecto.
Antes de continuar me gustaria aclarar que si no conocemos o no estamos seguro de cual es el nombre o alias que utiliza "dotnet" para crear el proyecto base que necesitaremos siempre podemos auxiliarnos del comando "dotnet new" el cual nos mostrará la lista de las distintas plantillas de proyectos que podremos crear.
Por defecto al ejecutar este comando en nustra terminal "dotnet" nos mostrará las plantillas más comunes definidas por defecto según Microsoft para crear nuestros proyectos, ahora, si queremos una lista más detallada podemos obtenerla mediante el comando "dotnet new list" como viene reflejado en las sugerencias que nos ofrece propio framework al momento de ejecutar el comando
Continuando con la preparación de nuestro proyecto base usaremos la plantilla "ASP.NET Core Empty" la cual nos ofrece una configuración básica de un proyecto asp.net core para web porque recuerden que por el momento no queremos cosas extras, recordemos que solo será un pequeño proyecto, pero puedes tener presente que los pasos seran los mismos para proyectos más profesionales y mucho más grandes.
Si nos fijamos en la imagen anterior podremos observar que para la plantilla "ASP.NET Core Empty" podemos usar el alias "web" y de esta forma no tener que estar tecleando el nombre completo de esta, ya que puede conducirnos a comenter errores durante la escritura....esto es genial verdad...también aunque no es obligatorio podremos definir un nombre para nuestro proyecto, a modo personal te comparto que a mi me gusta más definir un nombre siempre, pero recuerda que no es obligatorio.
Listo...entonces ya tenemos nuestro primer objetivo vencido, pues podemos avanzar al siguiente paso.
Como parte de nuestro siguiente paso, necesitaremos instalar las dependencias o paquetes con los que estaremos trabjando en lo adelante. Por lo general el proceso de instalación de dependencias o paquetes es llevado a cabo por lo que solemos llamar en el mundillo de la programación como un "package management" o lo que es lo mismo llamarle manejador de paquetes que basicamente es un programa especializado para hacer este tipo de funciones, en nustro caso estaremos utilizando "nuget" que es el que Microsoft pone a nuestra disposición cuando trabajamos con .NET.
Para nustro proyecto estaremos utilizando el paquete llamado "HotChocolate.AspNetCore" en su versión "12.15.2", para instalarlo lo primero que hacemos es posicionarnos en la carpeta de nuestro proyecto en mi caso yo le puse de nombre "FirstGraphQLProject" y una vez aqui adentro necesitamos ejecutar el siguiente comando "dotnet add package HotChocolate.AspNetCore --version 12.15.2"
...genial....con esto hemos agregado el paquete a nuestro proyecto y estaremos listos para usarlo, un detalle importante a destacar aquí es que siempre que agreguemos cualquier paquete o dependencia a nuestro proyecto podremos encontrarla si visitamos el archivo ".csproj"
con la instalción de nuestra dependencia hemos terminado con este paso, entonces podemos seguir avanzando.
A que seguro te asombrastes cuando abristes tu proyecto en algún IDE(en mi caso estoy usando "vscode" o lo que es lo mismo llamarle "visual studio code") y viste muchas cosas nuevas y diferentes que quizas las habias visto en otros frameworks o lenguajes anteriores y te llamo la atención porque no era el clásico .NET al que estamos acostumbrados, es normal y a la misma vez es algo de lo que sentirse orgulloso la facilidad con la que un lenguaje y una plataforma pueden adaptarse a las formas más modernas y adoptar nuevos estandares. Bien te comento que eso que vez se llama "top-level statements" y es uno de los features agregados con la aparición y el reajuste que hizo Microsoft tras el lanzamiento de .NET 6 la más reciente versión LTS(Long Term Support) de su framework.
Bueno ahora si, dejemonos un poco de palabreo y vamos al código que esta es la mejor parte de todo.
En versiones anteriores(dotnet core 3.1 y .NET5) ya fuese creando un proyecto empty o mvc se nos creaba un archivo llamado "Startup.cs" y era aqui donde se definían todos nustros servicios que iniciarian una vez que la aplicación fuese ejecutada, con estas nuevas versiones este archivo desaparecio dejando solamente "Program.cs" donde de cierta forma pondremos todos los servicios, configuracion y demas cosas extras que necesitemos cuando nustra aplicacion inicie y durante todo su ciclo de vida.
Ahora bien en estas versiones mas modernas de .NET registramos un servicio o aplicamos una configuración usando las funcionalidades que ya vienen definidas en la clase "WebApplicationBuilder" como se muestra mas arriba en la imagen.
Entonces entrando en contexto agreguemos un servidor local de GraphQL, que nos permitira testear nuestra api una ves que ya el proyecto este iniciado, lo haremos agregando la siguiente linea de código.
Ahora continuamos con la definición de nuestros modelos que seran los objetos de los cuales en la query pediremos los campos que nos interese. En C# lo hacenmos utilizando el tipo "record" ahora en este preciso momento seria divagar si me pusiera explicar que son y para que se usan los "records" en C# solo dejemoslo en que seran objetos "read-only" o lo que será lo mismo decir "objetos de solo lectura", continuando entonces quedaría definido de la siguiente manera:
expliquemos que tenemos aca de forma rápida. Empezamos por ver que tenemos dos records llamados "Book" y otro "Author" estos seran nustros modelos, y dentro de los parentésis se definenen las propiedades que van a tener cada uno, por las cuales poreguntaremos en nustras queries cuando lo necesitemos. Luego si vemos con más detenimiento una de las propiedades que tiene definido el record "Book" será "Author" que a su vez tendrá sus propias propiedades, como fue mencionado anteriomente, entonces siguiendo esta lógica podriamos decir que "un libro esta compuesto por un título y un autor y que un autor tendrá un nombre" de esta forma queda establecida una relación entre ambos records.
Luego de esto como no tendremos una base de datos producto a que el proyecto en sencillo, necesitaremos algún tipo de colección en la cual podramos tener datos de muestra para poder probar cuando inciemos nuestro proyecto, para esto nos auxiliaremos de una Lista ya que es una estrucutura de datos con la que podremos tener facilmente lo que queremos. Además de eso necesitares una clase que le llamaremos "LibraryQuery" que es a la que estaremos encuestando en neustras consultas, y también tendremos dos operaciones "GetBooks" que obtiene la lista de todos los libros, y la otra "GetBook" que devuelve solamente la información del libro especificado en el parámetro, quedando algo así:
de esta forma hemos terminado nuestra parte de código solo nos resta probar nustra API, lo primero es chequear que nuestro codigo este sin errores y que compile, para esto puedes hacerlo ejecutando el comando:
Si la salida del commando ejecuto de forma satisfactoria entonces todo habra sido un existo y podras pasar a ejecutar tu aplicacion con el comando:
Espero que te haya sido bien útil y de mucha ayuda.....nos vemos en una próxima entrega...recuerda
Happy Coding!!!!!