Getting started: Building RESTful Web API using ASP.NET Core 3.0 | by  Sumant Mishra | Medium

¿Te gustaría aprender ASP.NET Core Empresarial?
Tenemos lo que necesitas .¡Haz clic aquí!

Una API es una Interfaz de Programación de Aplicaciones (por sus siglas en inglés: Application Programming Interface). Esta interfaz justamente sirve para permitir que dos aplicaciones diferentes puedan comunicarse con un nivel de acoplamiento mínimo.

Un Web API, es una especificación de interfaz de aplicación que está preparada para funcionar a través de internet. Por ejemplo, un servicio de consulta de cotización de divisas, clima, etc.

A continuación veremos algunas características de Web API:

Clase ControllerBase

Una API web consta de una o más clases de controlador que se derivan de ControllerBase . La plantilla de proyecto de API web proporciona un controlador de inicio:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

No cree un controlador de API web derivando de la clase Controller . Controllerderiva de ControllerBasey agrega soporte para vistas, por lo que es para manejar páginas web, no solicitudes de API web. Hay una excepción a esta regla: si planea usar el mismo controlador para las vistas y las API web, derívelo de Controller.

La ControllerBaseclase proporciona muchas propiedades y métodos que son útiles para manejar solicitudes HTTP. Por ejemplo, ControllerBase.CreatedAtActiondevuelve un código de estado 201:

[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult Create(Pet pet)
{
pet.Id = _petsInMemoryStore.Any() ?
_petsInMemoryStore.Max(p => p.Id) + 1 : 1;
_petsInMemoryStore.Add(pet);

return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet);

}

A continuación se muestran algunos ejemplos más de métodos que ControllerBaseproporciona.

MétodoNotas
Solicitud incorrectaDevuelve el código de estado 400.
ExtraviadoDevuelve el código de estado 404.
Archivo FísicoDevuelve un archivo.
TryUpdateModelAsyncInvoca la vinculación del modelo .
TryValidateModelInvoca la validación del modelo .

Para obtener una lista de todos los métodos y propiedades disponibles, consulte ControllerBase .

API Controllers in ASP .NET Core | Wake Up And Code!

Atributos

El espacio de nombres Microsoft.AspNetCore.Mvc proporciona atributos que se pueden usar para configurar el comportamiento de los controladores de API web y los métodos de acción. El siguiente ejemplo utiliza atributos para especificar el verbo de acción HTTP admitido y cualquier código de estado HTTP conocido que podría devolverse:

[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult Create(Pet pet)
{
pet.Id = _petsInMemoryStore.Any() ?
_petsInMemoryStore.Max(p => p.Id) + 1 : 1;
_petsInMemoryStore.Add(pet);

return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet);

}

A continuación, se muestran algunos ejemplos más de atributos que están disponibles.

AtributoNotas
[Route]Especifica el patrón de URL para un controlador o una acción.
[Bind]Especifica el prefijo y las propiedades que se incluirán para la vinculación del modelo.
[HttpGet]Identifica una acción que admite el verbo de acción HTTP GET.
[Consumes]Especifica los tipos de datos que acepta una acción.
[Produces]Especifica los tipos de datos que devuelve una acción.

Para obtener una lista que incluye los atributos disponibles, consulte el espacio de nombres Microsoft.AspNetCore.Mvc .

Atributo ApiController

El [ApiController]atributo se puede aplicar a una clase de controlador para habilitar los siguientes comportamientos obstinados y específicos de la API:

La función Detalles del problema para códigos de estado de error requiere una versión de compatibilidad de 2.2 o posterior. Las otras funciones requieren una versión de compatibilidad 2.1 o posterior.

Estas funciones requieren una versión de compatibilidad de 2.1 o posterior.

Atributo en controladores específicos

El [ApiController]atributo se puede aplicar a controladores específicos, como en el siguiente ejemplo de la plantilla de proyecto:

[ApiController]
[Route(“[controller]”)]
public class WeatherForecastController : ControllerBase

NET Core is Sexy — Building a Web API | by Jeremy Buisson | ITNEXT

Atributo en varios controladores

Un enfoque para usar el atributo en más de un controlador es crear una clase de controlador base personalizada anotada con el [ApiController]atributo. El siguiente ejemplo muestra una clase base personalizada y un controlador que se deriva de ella:

[ApiController]
public class MyControllerBase : ControllerBase
{
}

[Produces(MediaTypeNames.Application.Json)]
[Route(“[controller]”)]
public class PetsController : MyControllerBase

Atributo en un ensamblado

Si la versión de compatibilidad se establece en 2.2 o posterior, el [ApiController]atributo se puede aplicar a un ensamblado. La anotación de esta manera aplica el comportamiento de la API web a todos los controladores del ensamblado. No hay forma de optar por no recibir controladores individuales. Aplique el atributo de nivel de ensamblado a la declaración de espacio de nombres que rodea a la Startupclase:

Requisito de enrutamiento de atributos

El [ApiController]atributo hace que el enrutamiento de atributos sea un requisito. Por ejemplo:

[ApiController]
[Route(“[controller]”)]
public class WeatherForecastController : ControllerBase

Las acciones son inaccesibles a través de rutas convencionales definidos por UseEndpointsUseMvc o UseMvcWithDefaultRoute en Startup.Configure.

Respuestas HTTP 400 automáticas

El [ApiController]atributo hace que los errores de validación del modelo activen automáticamente una respuesta HTTP 400. En consecuencia, el siguiente código es innecesario en un método de acción:

if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}

ASP.NET Core MVC usa el filtro de acción ModelStateInvalidFilter para realizar la comprobación anterior.

ZG España Zentica - Tutorial: creación de una API web ASP.NET con ASP.NET  Core

Respuesta de BadRequest predeterminada

Con una versión de compatibilidad de 2.1, el tipo de respuesta predeterminado para una respuesta HTTP 400 es SerializableError . El siguiente cuerpo de solicitud es un ejemplo del tipo serializado:

{
“”: [
“A non-empty request body is required.”
]
}

Con una versión de compatibilidad de 2.2 o posterior, el tipo de respuesta predeterminado para una respuesta HTTP 400 es ValidationProblemDetails . El siguiente cuerpo de solicitud es un ejemplo del tipo serializado:

{
“type”: “https://tools.ietf.org/html/rfc7231#section-6.5.1”,
“title”: “One or more validation errors occurred.”,
“status”: 400,
“traceId”: “|7fb5e16a-4c8f23bbfc974667.”,
“errors”: {
“”: [
“A non-empty request body is required.”
]
}
}

El ValidationProblemDetailstipo:

  • Proporciona un formato legible por máquina para especificar errores en las respuestas de la API web.
  • Cumple con la especificación RFC 7807 .

Para que las respuestas automáticas y personalizadas sean coherentes, llame al método ValidationProblem en lugar de BadRequest . ValidationProblemdevuelve un objeto ValidationProblemDetails así como la respuesta automática.

Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.

¿Te gustaría aprender ASP.NET Core Empresarial?
Tenemos lo que necesitas .¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax
()
x
Abrir chat
¿Quieres aprender a programar?
Hola 👋,
¿Te interesa información de nuestros cursos?