¿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 . Controller
deriva de ControllerBase
y 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 ControllerBase
clase proporciona muchas propiedades y métodos que son útiles para manejar solicitudes HTTP. Por ejemplo, ControllerBase.CreatedAtAction
devuelve 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 ControllerBase
proporciona.
Método | Notas |
---|---|
Solicitud incorrecta | Devuelve el código de estado 400. |
Extraviado | Devuelve el código de estado 404. |
Archivo Físico | Devuelve un archivo. |
TryUpdateModelAsync | Invoca la vinculación del modelo . |
TryValidateModel | Invoca la validación del modelo . |
Para obtener una lista de todos los métodos y propiedades disponibles, consulte ControllerBase .
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.
Atributo | Notas |
---|---|
[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:
- Requisito de enrutamiento de atributos
- Respuestas HTTP 400 automáticas
- Inferencia de parámetros de origen de enlace
- Inferencia de solicitud de datos de formulario / varias partes
- Detalles del problema para los códigos de estado de error
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.
- Requisito de enrutamiento de atributos
- Respuestas HTTP 400 automáticas
- Inferencia de parámetros de origen de enlace
- Inferencia de solicitud de datos de formulario / varias partes
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
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 Startup
clase:
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 UseEndpoints
, UseMvc 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.
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 ValidationProblemDetails
tipo:
- 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 . ValidationProblem
devuelve 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í!