Trabajando con entidades y validaciones en NancyFx (I)
En esta ocasión, vamos a trabajar con NancyFx creando una entidad, creando una petición POST y otra GET dentro de nuestra API REST, y jugando con entidades y validaciones.
Lo primero que haremos será crear un proyecto ASP.NET vacío.
Abriremos después NuGet desde nuestro proyecto, y agregaremos los siguientes paquetes:
- Nancy
- Nancy.Hosting.Aspnet
- Nancy.Validation.FluentValidation
- FluentValidation
En la imagen, aparecen también otros paquetes que ya incluye por defecto el proyecto vacío de ASP.NET.
Cabe mencionar como algo importante, que Nancy.Validation.FluentValidation requiere de FluentValidation.
Sin embargo, tengo un problema con la versión de Nancy.Validation.FluentValidation ya que no es compatible con la última versión de FluentValidation, al menos de momento, por lo que en el caso de la v1.4.1 de Nancy.Validation.FluentValidation, no me queda otra que instalar la v6.4.1 de FluentValidation, cuando la última versión de este paquete es la v7.1.1.
Mientras tanto, también hay un paquete de otro usuario, que sacó Junio de 2017. Se trata de Nancy.Validation.FluentValidation.Net45 en su v0.1.0 y que sí es compatible con Fluent Validation v7.x.
Después de explicar estos aspectos a tener en cuenta, seguiremos.
Una vez instalados los paquetes de NuGet, vamos a ponernos manos a la obra.
Crearemos tres carpetas dentro de nuestro proyecto:
- Entities
- Modules
- Validators
En la primera de ellas meteremos nuestras entidades, que en nuestro ejemplo/demo sólo será una.
En la segunda carpeta meteremos los módulos con los patrones correspondientes para la petición GET y POST que crearemos.
En la tercera y última carpeta, crearemos una clase de validación para nuestro modelo.
La idea es que si en la petición POST todo es correcto, nos devuelva un Created.
Mientras que en caso de que el modelo no satisfaga las validaciones que le propongamos, nos devuelva un error con la descripción de lo que no fue validado correctamente.
Bien, nos situaremos dentro de la carpeta Entities y crearemos una nueva entidad de nombre PersonEntity cuyo contenido será el siguiente:
namespace Blog_DotNet_NancyFx_Entities_and_Validations.Entities { public class PersonEntity { public string Name { get; set; } public int Age { get; set; } public string Country { get; set; } } }
Una vez que tenemos nuestra entidad preparada, vamos a pasar a la clase encargada de validar la entidad de acuerdo a nuestras necesidades de negocio.
Nuestra clase de validación debe heredar de AbstractValidator (FluentValidation).
A esta clase la he llamado PersonValidator.
namespace Blog_DotNet_NancyFx_Entities_and_Validations.Validators { using FluentValidation; using Blog_DotNet_NancyFx_Entities_and_Validations.Entities; public class PersonValidator : AbstractValidator<PersonEntity> { public PersonValidator() { RuleFor(m => m.Name).NotEmpty().WithMessage("Name is required"); RuleFor(m => m.Age).GreaterThanOrEqualTo(1).WithMessage("Age should be greater than 0").LessThanOrEqualTo(130).WithMessage("Age should be less than 130"); } } }
Llegados a este punto, estamos listos de preparar nuestro módulo de NancyFx para poder realizar las peticiones POST y GET que queremos realizar de acuerdo a nuestra entidad y de acuerdo a las validaciones de la misma.
Esto lo veremos en otra entrada en este blog.
¡Happy Coding!