Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
October 6, 2022 09:17 pm GMT

REST API con ASP.NET 6 y MySQL

Hola! En este artculo tutorial aprenderemos a construir una web API desde ASP.NET 6 para manejar operaciones CRUD con una base de datos en MySQL.

Nota: el cdigo fuente empleado en este tutorial est disponible en GitHub en el siguiente repositorio: ASP.NET 6 Web API.

Recursos necesarios:

Para seguir paso a paso este articulo o ejecutar el demo incluido, es necesario tener en funcionamiento las siguientes herramientas:

  • MySQL.
  • .NET 6 SDK.
  • Visual Studio 2019/2022.
  • La carga de trabajo desarrollo web y ASP.NET para Visual Studio 2019/2022.

Proceso a seguir:

En el tutorial tendremos tres partes importantes:

  1. Revisar la base de datos que vamos a utilizar.
  2. Establecer el acceso a la base de datos desde ASP.NET a travs de Entity Framework.
  3. Establecer los controladores y sus mtodos para el servicio web.

Como caso de estudio para este tutorial se manejarn los datos de usuarios a travs de operaciones CRUD (Crear, Leer, Actualizar, y Eliminar) en registros.

1. La base de datos para el domino de la aplicacin.

La base de datos que utilizaremos en este ejemplo est conformada por una nica tabla llamada: User, con los atributos: Id, FirstName, LastName, Username, Password, y EnrrollmentDate; en MySQL.

User Entity

La sentencia SQL para la creacin de la tabla User es la siguiente:

CREATE TABLE `user` (  `Id` INT NOT NULL PRIMARY KEY,  `FirstName` VARCHAR(45) NOT NULL,  `LastName` VARCHAR(45) NOT NULL,  `Username` VARCHAR(45) NOT NULL,  `Password` VARCHAR(45) NOT NULL,  `EnrollmentDate` datetime NOT NULL );

Muy bien, con la base de datos establecida, ya podemos comenzar con la implementacin de nuestro primer proyecto para el desarrollo de servicios API Rest.

2. Establecer el acceso a la base de datos desde ASP.NET a travs de Entity Framework.

Proyecto ASP.NET 6 del tipo Web API.

En Visual Studio lo primero que haremos es crear un nuevo proyecto de tipo ASP.NET Core Web API:

ASP.NET Core Web API project.

Despus, en los siguientes pasos podremos especificar el Framework.

Select .NET version in the new project.

Con este proyecto crearemos el acceso a la base de datos e implementaremos un controlador correspondiente para trabajar con esos datos y proporcionar la web API.

Acceso a la base de datos con Entity Framework.

Para establecer las entidades a travs de clases y la conexin de la base de datos se puede emplear el enfoque Database First de Entity Framework, el cual permite hacer _scaffolding _desde la base de datos hacia el proyecto, es decir, generar clases automticamente de acuerdo con las entidades establecidas en la base de datos y la conexin en el proyecto.

Para este propsito, es necesario instalar tres paquetes NuGet:

  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.Tools
  • MySql.EntityFrameworkCore

En caso de que se este trabajando con SQL Server, el paquete NuGet a instalar ser: Microsoft.EntityFrameworkCore.SQLServer.

Nota: para encontrar el centro de administracin de los paquetes NuGet podemos dirigirnos al men de opciones -> proyecto -> manejar paquetes NuGet.

Go To Manage NuGet Packages option

Con la instalacin de estos paquetes NuGet, ahora abriremos la consola de administracin de paquetes para introducir un comando que permitir realizar _scaffolding _desde la base de datos:

Option to open Package Manager Console

Comando:

Scaffold-DbContext "server=servername;port=portnumber;user=username;password=pass;database=databasename" MySql.EntityFrameworkCore -OutputDir Entities -f

El resultado es el siguiente:

C# Entities

Aqu, la clase User est definida de la siguiente manera:

public partial class User{    public int Id { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }    public string Username { get; set; }    public string Password { get; set; }    public DateTime EnrollmentDate { get; set; }}

Y el DBContext, el cual tiene la configuracin con la base de datos, cuyo mtodo principal OnConfiguring se ver algo como esto:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){  if (!optionsBuilder.IsConfigured)  { optionsBuilder.UseMySQL("server=localhost;port=3306;user=root;password=;database=database");  }}

Ahora, no es lo ms adecuado que la cadena de conexin a la base de datos se encuentre especificada en este mtodo OnConfiguring. Para esto, dentro de nuestro proyecto podemos encontrar el archivo appsettings.json, en el cual podremos definir esta configuracin:

"AllowedHosts": "*","ConnectionStrings": {  "DefaultConnection": "server=servername;port=portnumber;user=username;password=pass;database=databasename;"}

Luego, en la clase Program agregaremos como servicio al DBContext, y luego debemos hacer referencia a la propiedad DefaultConnection especificada en el archivo appsettings.json:

builder.Services.AddEntityFrameworkMySQL()    .AddDbContext<DBContext>(options =>    {        options.UseMySQL(builder.Configuration.GetConnectionString("DefaultConnection"));    });                });

En este caso, regresando a la clase del DBContext, borramos la cadena de conexin especificada en el mtodo OnConfiguring. A la final tendramos el mtodo vaco:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){}

Con estos pasos ya tenemos lista la conexin y las configuraciones necesarias para trabajar con la base de datos en ASP.NET con la ayuda de Entity Framework.

3. Establecer los controladores y sus mtodos para el servicio web.

Con el objetivo de transportar los datos entre los procesos para el manejo de la base de datos y los procesos para trabajar con los servicios web, es recomendable establecer clases DTO por cada entidad del proyecto, en este caso, un DTO para la entidad User.

Para ello crearemos una nueva carpeta dentro del proyecto llamada DTO y crearemos una clase llamada UserDTO, cuyos atributos sern los mismos que la clase User definida en la seccin Entities anteriormente:

public class UserDTO{    public int Id { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }    public string Username { get; set; }    public string Password { get; set; }    public DateTime EnrollmentDate { get; set; }}

Controladores para el Web API.

Ahora lo que haremos es agregar los controladores, en este caso el controlador para el usuario, el cual permitir establecer mtodos para realizar operaciones CRUD sobre las tablas de la base de datos y exponerlos a travs del Web API. Sobre la carpeta Controllers, agregaremos un controlador llamado UserController:

Create new Controller option
La definicin de la clase y su constructor se ver as:

[ApiController][Route("api/[controller]")]public class UserController : ControllerBase{    private readonly DBContext DBContext;    public UserController( DBContext DBContext)    {        this.DBContext = DBContext;    }    ...}

Ahora el objetivo es realizar las operaciones CRUD. En este sentido, utilizaremos mtodos para acceder a la informacin (Get), para insertar datos (Post), para modificar (Put) y para eliminar un registro (Delete).

A continuacin, se muestra el cdigo final de cada uno de los mtodos:

A. Obtener el listado de todos los usuarios registrados.

[HttpGet("GetUsers")]public async Task<ActionResult<List<UserDTO>>> Get(){    var List = await DBContext.User.Select(        s => new UserDTO        {            Id = s.Id,            FirstName = s.FirstName,            LastName = s.LastName,            Username = s.Username,            Password = s.Password,            EnrollmentDate = s.EnrollmentDate        }    ).ToListAsync();    if (List.Count < 0)    {        return NotFound();    }    else    {        return List;    }}

B. Obtener los datos de un usuario especifico segn su Id.

[HttpGet("GetUserById")]public async Task<ActionResult<UserDTO>> GetUserById(int Id){    UserDTO User = await DBContext.User.Select(            s => new UserDTO            {                Id = s.Id,                FirstName = s.FirstName,                LastName = s.LastName,                Username = s.Username,                Password = s.Password,                EnrollmentDate = s.EnrollmentDate            })        .FirstOrDefaultAsync(s => s.Id == Id);    if (User == null)    {        return NotFound();    }    else    {        return User;    }}

C. Insertar un nuevo usuario.

[HttpPost("InsertUser")]public async Task<HttpStatusCode> InsertUser(UserDTO User){    var entity = new User()    {        FirstName = User.FirstName,        LastName = User.LastName,        Username = User.Username,        Password = User.Password,        EnrollmentDate = User.EnrollmentDate    };    DBContext.User.Add(entity);    await DBContext.SaveChangesAsync();    return HttpStatusCode.Created;}

D. Actualizar los datos de un usuario especifico.

[HttpPut ("UpdateUser")]public async Task<HttpStatusCode> UpdateUser(UserDTO User){    var entity = await DBContext.User.FirstOrDefaultAsync(s => s.Id == User.Id);    entity.FirstName = User.FirstName;    entity.LastName = User.LastName;    entity.Username = User.Username;    entity.Password = User.Password;    entity.EnrollmentDate = User.EnrollmentDate;    await DBContext.SaveChangesAsync();    return HttpStatusCode.OK;}

E. Eliminar a un usuario segn su Id.

[HttpDelete("DeleteUser/{Id}")]public async Task<HttpStatusCode> DeleteUser(int Id){    var entity = new User()    {        Id = Id    };    DBContext.User.Attach(entity);    DBContext.User.Remove(entity);    await DBContext.SaveChangesAsync();    return HttpStatusCode.OK;}

Con estos mtodos y con los pasos seguidos hasta este punto, el servicio web est listo para ponerse en ejecucin.

Probar la web API implementada

Para probar la API implementada podemos utilizar Swagger UI, una herramienta visual que nos permite interactuar con los mtodos de nuestro servicio, y que a su vez ya se encuentra integrada en nuestro proyecto de ASP.NET 6.

Para las pruebas, necesitamos compilar y ejecutar la aplicacin:

Run app

A continuacin, podemos ver la interfaz de Swagger para que podamos realizar las pruebas correspondientes de acuerdo con los mtodos definidos en nuestro controlador y de una manera interactiva:

Swagger UI

Al ser este un servicio RestFul, nosotros podemos utilizar cualquier otro programa o aplicacin para consumir estos servicios. Por ejemplo, aqu podemos ver una llamada al mtodo GetUsers desde la herramienta Postman:

HTTP Get example

What next?

Con este tutorial hemos aprendido paso a paso como implementar servicios HTTP que manejen datos de usuarios desde ASP.NET 6, y como realizar pruebas con estas funcionalidades.

El cdigo fuente de este ejemplo puede visualizarse desde el siguiente repositorio en GitHub: ASP.NET 6 Web API.

Gracias por leer:

Espero que te haya gustado el artculo. Si tienes alguna pregunta o alguna idea en mente, ser un gusto poder estar en comunicacin contigo y juntos intercambiar conocimientos entre s.

Nos vemos en Twitter / esDanielGomez.com!

Saludos!


Original Link: https://dev.to/esdanielgomez/rest-api-con-aspnet-6-y-mysql-21j0

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To