Acciones CRUD de ASP.NET Core

Completado

Nuestro servicio de pizza admite operaciones CRUD para obtener una lista de pizzas. Estas operaciones se realizan a través de verbos HTTP, que se asignan a través de atributos de ASP.NET Core. Como ha visto, el verbo HTTP GET se usa para recuperar uno o varios 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 Crear [HttpPost]
PUT Update [HttpPut]
DELETE Eliminar [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 permitir que los usuarios agreguen un nuevo elemento al punto de conexión, debe implementar la acción POST mediante el atributo [HttpPost]. Al pasar el elemento (en este ejemplo, una pizza) al método como un 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 mediante el método Create(). En lugar de devolver una lista de pizzas, como vimos con el método Get(), este método devuelve una respuesta IActionResult.

IActionResult permite al cliente saber si la solicitud se ha solicitado correctamente y proporciona el identificador de la pizza recién creada. IActionResult usa 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 estos métodos en el ejercicio siguiente.

PUT

La modificación o actualización de una pizza del inventario es similar al método POST que implementó, aunque usa el atributo [HttpPut] y toma el parámetro id 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 instancia ActionResult usada 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 parámetro id 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 instancia ActionResult usada 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 caché en memoria.

En el ejercicio de la siguiente unidad se muestra cómo admitir cada una de estas cuatro acciones en la API web.

Comprobar los 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?

Comprobar las respuestas