Crea una Web API con ASP.NET Core, Entity Framework Core 5 y SQL Database

Crea una Web API con ASP.NET Core, Entity Framework Core 5 y SQL Database

Con la última actualización de .NET, ahora es más fácil construir un API utilizando Entity Framework Core 5 y mostrar su funcionalidad mediante Swagger. En esta articulo crearemos un proyecto de Web Api ASP .NET Core que se conecta a una base de datos de SQL Server para que las aplicaciones cliente puedan realizar operaciones CRUD.

Requerimientos previos: Tener instado Visual Studio y SQL Server Management Studio. Aun no los tienes 😔. No te preocupes aquí ⤵️⤵️ abajito te dejo 2 tutoriales para que lo puedes instalar:

¿Qué es una API REST?

Cuando desarrollamos software que solicita información de una base de datos, por cuestiones de seguridad es deseable no hacerlo directo, dado que exponer nuestras cadenas de conexión en la aplicación que estamos creando genera un riesgo, pues cualquier atacante que pueda descompilar la aplicación tendrá acceso a la base de datos. Existe una arquitectura, conocida como API REST, que permite ser utilizada como intermediario para comunicar a la aplicación cliente con la base de datos en ambos sentidos. La ventaja principal es que ahora la cadena de conexión  a nuestra fuente de datos permanece en el servicio API, típicamente del lado del servidor, por lo que los atacantes tendrían complicado obtener el acceso directo a la base. Además, utilizar una API REST nos da el beneficio de la escalabilidad, pues podríamos crear distintos tipos de aplicaciones como de escritorio, móvil, web con distintas tecnologías, todas ellas apuntando a un solo API y establecer la comunicación con la base de datos.

Entonces, API REST puede definirse como una arquitectura que nos permite crear aplicaciones distribuidas. Dado que está modelado alrededor de la especificación o protocolo HTTP, los desarrolladores típicamente no tienen que instalar librerías adicionales para crear código que permita implementar esta capa de servicios. En los métodos que se exponen en el web api se puede implementar cualquier funcionalidad, por ejemplo acceder a otros servicios REST, comunicarse con una base de datos, leer información del servidor, etc.

La comunicación que mencionábamos que se puede dar con distintos tipos de clientes se da gracias a que en REST los métodos devuelven la información en formatos estándar que son agnósticos de tecnología, como XML, YAML o JSON, siendo este último el preferido por su flexibilidad, ligereza e interoperabilidad.

HTTP verbs

Los verbos HTTP que se utilizan con API REST por lo general 4:

  1. GET
  2. POST
  3. PUT
  4. DELETE

Cada uno de ellos va asociado a una operación CRUD (Create, Read, Update y Delete). Por ejemplo, si desde la aplicación cliente hacemos una petición de tipo GET al API REST, significa que queremos hacer una consulta de información. Una operación POST significa que deseamos agregar un nuevo elemento en nuestra base de datos, mientras que una operación PUT se utiliza para actualizar un elemento existente, si bien también es posible registrar nuevos elementos. Finalmente, la operación DELETE implica eliminar información.

SQL Server Management Studio (SSMS)

Paso 1. Conéctate a SQL Server Management Studio y ejecuta el siguiente script para crear la base de datos.

-- Creamos la base de datos con el comando 'create database' seguido del nombre DB
create database WebApiDB
-- Ponemos en memoria con el comando 'use' seguido de nombre DB
Use WebApiDB

ASP .NET Core

Paso 2. Abrimos Visual Studio 2019 y crea un nuevo proyecto

Paso 3.Eligimos el tipo Aplicación web ASP .NET Core Web API (dentro de la categoría .NET Core en el Visual C#).
Clic en siguiente y agregamos un nombre a nuestro proyecto seguidamente nos nuestra la ubicación donde se va a alojar el mismo.

Paso 4. Con ASP .NET Core podemos crear aplicaciones web que funcionan con tecnología .NET, pero también se pueden integrar otras tecnologías como Angular y JavaScript, de alta seguridad con el manejo e integración de proveedores de Identidad con Azure Active Directory o incluso Google, Facebook y otros. Y soporta el uso de arquitecturas como MVC; y uno de estos proyectos es el desarrollo de API’s.

Paso 5. Una vez creado el proyecto, da botón derecho sobre el nombre del proyecto y selecciona appsettings.json Posteriormente agrega la siguiente cadena de configuración dentro el archivo json «ConnectionStrings»: {

Ahora es muy importante poner el método de la conexión. «GAConnection»: «Cadena de Conexion»

Server=NombreDelServidor;Database=NombreDB;User Id=Username;Password=myPassword;

Paso 6. Ahora vamos a agregar paquetes requeridos para manejar Entity Framework Core con SQL Server en nuestro backend. Clic derecho sobre el nombre del proyecto > Administrar paquetes NuGet. Nos dirigimos a examinar.

Ahora un paso muy importante. Si nuestro proyecto lo creamos en .NET 3 tenemos que agregar nuestros paquetes en versiones 3.x pero nuestro caso estamos trabajando con la versión 5.x 

Paso 7. El primer paquete que agregaremos es Microsoft.Entity.FrameworkCore en versión 5.0.x > Clic en instalar > Aceptamos las licencias.

Paso 8. Siguiente paquete: Microsoft.EntityFrameworkCore.Design versión 5.0.7

Paso 9. El siguiente paquete es Microsoft.Entity.FrameworkCore.SqlServer. (también versión 5.0.7).

Paso 10. El siguiente paquete es Microsoft.EntityFrameworkCore.Tools (también versión 5.0.7)

Paso 11. Y por ultimo instalamos el paquete Microsoft.Visual.Web.CodeGeneration.Design en la versión 5.0.2

Nota: Podemos en el buscador microsoft.visualstudio.web

¿Qué es Code-First?

En el enfoque de Code-First se introdujo con Entity Framework 4.1. y centra en el dominio de la aplicación además comienza a crear clases para la entidad de dominio en lugar de diseñar primero la base de datos y, a continuación, crear las clases que coinciden con el diseño de la base de datos. En la ilustración siguiente se muestra el enfoque de code-first.

Paso 12. Ahora vamos a aplicar Code-First. Primero agregamos > Nueva carpeta > Llamada ‘Models’ dentro de la misma vamos a agregar nuestras clases (Nuestras tablas).

Paso 13. Ahora vamos a importar 3 espacio de nombre a todas nuestras clases (Tablas) como ser:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;

Paso 14. Podemos agregamos el nombre de tabla o añadir un prefijo, por lo contrario si no añadimos nada tomara por defecto el nombre del modelo. Después añadimos las propiedad (campos) de la clase. Con sus respectivas llaves (Primary Key, Foreign Key).

Paso 15. Ahora vamos a agregar la cardinalidad [N:1]. Para eso agregamos una lista en nuestra clase Cargo y esta la vamos a llamar Empleados.

Paso 16. Posteriormente vamos a hacer la inversa. Para nuestra clase Empleados. Aquí vamos a añadir 2 campos:

  1. La llave foránea
  2. Propiedad de Navegación

Paso 17. En seguida vamos a crear una nueva carpeta > Context. Y dentro de ella vamos a agregar > Una nueva clase > Llamada GAEmpresaDbContext. Posteriormente vamos añadir 2 espacios de nombre

using Microsoft.EntityFrameworkCore;
//El nombre del proyecto.Models;
using API_Supermercado.Models;

Paso 18. Esta clase GAEmpresaDbContext va a heredar DbContext la cual es una instancia que representa una sesión con la base de datos y esta pueda guardar instancias de las entidades. Además que va tener un constructor en el mismo va a estar inyectado nuestra cadena de conexión, entre otras cosas. Posteriormente lo vamos a pasar a nuestro constructor base.

Paso 19. Vamos a definir nuestras entidades con DbSet como propiedades.

Paso 20. Posteriormente nos vamos al archivo Starup.cs > Añadimos 4 espacio de nombre como ser:

using Microsoft.EntityFrameworkCore;
// using Nombre del proyecto.Context
using API_Supermercado.Context;
using Newtonsoft.Json;
//usig Nombre del proveedor del servicio
using Microsoft.EntityFrameworkCore.SqlServer;

Paso 21. En el método ConfigureServices, añadimos la referencia de la cadena de conexión y el contexto.

Paso 22. Ahora nos vamos a la consola de paquetes NuGet. > Barra de herramientas > Administrador de Paquetes NuGet > Consola de administrador de paquetes. Para empezar la migración de versiones. Esperamos la compilación y posteriormente se crea una carpeta con el nombre de ‘Migration’.

Add-Migration "API INICIAL VERSION"

Paso 23. Ahora volvemos a subir la Base de datos con la cadena de conexión con el comando:

Update-Database

Paso 24. Nos dirigimos a SQL Server Management Studio (SSMS) y pasamos a verificar si están creadas las Tablas (Entidades). Nota: Primero debemos refrescar nuestro Database.

Paso 25. Si deseamos verificar, podemos ver las migración que hicimos y esta la versión en la que trabajamos.

Paso 26. Ya casi por acabar, añadimos en la carpeta de controllers> Agregamos un nuevo controlador >Seleccionamos API > Controlador de API con controles que usan Entity Framewok > Añadir. Posteriormente nos muestra una eventa emergente y añadiremos los siguientes campos:

  1. Clase del modelo: La tabla (entidad)
  2. Clase del contexto de datos: DbContext
  3. Nombre de controlador: El nombre de la clase agregada + Controller
  4. Nota: Si Visual Studio esta en Español se agregara un ‘es’, caso contrario por defecto se agrega una ‘s’.
    Este proceso se tiene que repetir para cada clase (Tabla) que tenemos en nuestra base de datos.

¿Qué es OpenAPI?

OpenAPI Specification (anteriormente Swagger Specification) es un formato de descripción de API para las API de REST. Un archivo OpenAPI le permite describir toda su API, incluyendo:

  • Extremos disponibles () y operaciones en cada extremo (, /usersGET /usersPOST /users)
  • Parámetros de operación Entrada y salida para cada operación
  • Métodos de autenticación
  • Información de contacto, licencia, términos de uso y otra información.

Las especificaciones de la API se pueden escribir en YAML o JSON. Además que se puede encontrar en GitHub: Especificación de OpenAPI 3.0

¿Qué es Swagger?

Swagger es un conjunto de herramientas de código abierto basadas en la especificación OpenAPI que pueden ayudarle a diseñar, crear, documentar y consumir API rest. Las principales herramientas de Swagger incluyen:

  • Swagger Editor : editor basado en navegador donde puede escribir especificaciones de OpenAPI.
  • Swagger UI: representa las especificaciones de OpenAPI como documentación de API interactiva.
  • Swagger Codegen : genera códigos auxiliares de servidor y bibliotecas de cliente a partir de una especificación de OpenAPI.

Paso 27. Después de crear los controllers, A continuación pasamos a ejecutar el swagger. > Ejecutando el proyecto.

Paso 28.Una vez ejecutado el proyecto. Se abrirá el navegador web con los siguientes aspectos:

  1. El localhost utilizando el puerto 44392.
  2. Nos mostrara el nombre del proyecto y en la versión que estamos trabajando.
  3. Nos mostrara los context’s que agregamos en la paso 26.
  4. Finalmente los esquemas de la base de datos.

Paso 29. Vamos a probar el primer método. El cual es ‘POST’ el mismo su función es agregar un nuevo elemento a nuestra base de datos > Clic en ‘POST‘ > Clic en ‘Try it out’.

Paso 30. Agregamos nuestros datos a la tabla ‘Cargos’ según nuestro esquema. El estatus 201 corresponde al estado creado con éxito.

Paso 31. Posteriormente usamos el método ‘GET’ el cual su función es hacer consultas de nuestra función. De la misma forma. Clic en ‘GET‘ > Clic en ‘Try it out’. También si queremos verificar de una campo especifico, seleccionamos el GET
​/api​/Nombre_Context​/{id} al cual queremos hacer la consulta.

Paso 32. Por ultimo hacemos el mismo proceso <Paso 29 y Paso 30> para el Conext (Tabla) Empleados. También verificamos nuestra integridad referencial.

Paso 33. Finalmente por ultimo podemos verificar en nuestro gestor de base de datos.

BY: CARLA VANESA MAMANI CHAVEZ

Microsoft learn student ambassador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *