Acciones CRUD de ASP.NET Core

Completado

El servicio de pizzas admite operaciones C reate, R ead, U pdate, D elete (CRUD; Crear, Leer, Actualizar y Eliminar) en una lista de pizzas. Estas operaciones se realizan mediante verbos de acción HTTP, que se asignan por medio de atributos de ASP.NET Core. Como ha visto, el verbo de acción HTTP GET se usa para recuperar uno o más elementos de un servicio. Esta acción se anota con el atributo [HttpGet].

En la tabla siguiente se muestra la asignación de las cuatro operaciones que se están implementando para el servicio de pizzas:

Verbo de acción HTTP Operación CRUD Atributo de ASP.NET Core
GET Lectura [HttpGet]
POST Creación [HttpPost]
PUT Actualización [HttpPut]
DELETE Eliminación [HttpDelete]

Ya ha visto cómo funcionan las acciones GET. Vamos a obtener más información sobre las acciones POST, PUT y DELETE.

POST

Para dejar que el punto de conexión permita a los usuarios agregar un nuevo elemento, se debe implementar la acción POST mediante [HttpPost]. Al pasar el elemento (en este ejemplo, una pizza) al método como parámetro, ASP.NET Core convierte automáticamente cualquier aplicación o json enviado al punto de conexión en un objeto Pizza de .NET rellenado.

Esta es la firma del método Create que va a implementar en la sección siguiente:

[HttpPost]
public IActionResult Create(Pizza pizza)
{            
    // This code will save the pizza and return a result
}

El atributo [HttpPost] asigna a las solicitudes HTTP POST enviadas a http://localhost:5000/pizza el método Create(). En lugar de devolver una lista de pizzas, como se ha visto con el método Get(), este método devuelve una respuesta IActionResult, lo que permite al cliente saber si la solicitud se ha ejecutado correctamente y el identificador de la pizza recién creada. Esto se hace con códigos de estado HTTP estándar, por lo que se integra fácilmente con los clientes, independientemente del lenguaje o la plataforma en la que se ejecuten.

Resultado de la acción
de ASP.NET Core
Código de estado HTTP Descripción
CreatedAtAction 201 La pizza se ha agregado a la caché en memoria.
La pizza se incluye en el cuerpo de la respuesta del tipo de medio según la definición del encabezado de solicitud HTTP accept (JSON de manera predeterminada).
BadRequest está implícito. 400 El objeto pizza del cuerpo de la solicitud no es válido.

Afortunadamente, ControllerBase tiene métodos de utilidad que crean los mensajes y códigos de respuesta HTTP adecuados automáticamente. Va a ver cómo funcionan en el ejercicio siguiente.

PUT

La modificación o actualización de una pizza del inventario es similar al método POST que se ha implementado, aunque se va a usar el atributo [HttpPut] y a tomar el identificador además del objeto Pizza que se debe actualizar.

[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
    // This code will update the pizza and return a result
}

Cada valor ActionResult usado en la acción anterior se asigna al código de estado HTTP correspondiente en la tabla siguiente.

Resultado de la acción
de ASP.NET Core
Código de estado HTTP Descripción
NoContent 204 La pizza se ha actualizado en la caché en memoria.
BadRequest 400 El valor Id del cuerpo de la solicitud no coincide con el valor id de la ruta.
BadRequest está implícito. 400 El objeto Pizza del cuerpo de la solicitud no es válido.

DELETE

Una de las acciones más fáciles de implementar es la acción DELETE, que toma solo el identificador de la pizza que se va a quitar de la caché en memoria.

[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
    // This code will delete the pizza and return a result
}

Cada valor ActionResult usado en la acción anterior se asigna al código de estado HTTP correspondiente en la tabla siguiente.

Resultado de la acción
de ASP.NET Core
Código de estado HTTP Descripción
NoContent 204 La pizza se ha eliminado de la caché en memoria.
NotFound 404 No hay ninguna pizza que coincida con el parámetro id proporcionado en la memoria.

En las siguientes secciones se muestra cómo admitir cada una de estas cuatro acciones en la API web.

Comprobación de conocimientos

1.

Supongamos que necesita actualizar el nombre de un producto. ¿Qué verbo de acción HTTP es la mejor opción para esta solicitud?

2.

¿En qué escenario es más adecuado devolver un código de estado HTTP 404 y cómo se consigue en ASP.NET Core?