IIC2513-2021-1 / projects

Repositorio oficial para los proyectos de ambas secciones del periodo 2021-1 del curso PUC IIC2513
14 stars 6 forks source link

Error Tests: Enviar body en delete request #125

Open NicoMeyer opened 3 years ago

NicoMeyer commented 3 years ago

Hola!

Al momento de correr los tests para los endpoints secundarios nos dimos cuenta que una de nuestras requests, de tipo delete, no recibía el body que le entregamos. Si colocamos un console.log del request.body al inicio del endopoint, lo que imprime es un undefined, sin embargo, si cambiamos el método por un post en vez de un delete, la request si envía el body y esto lo pudimos comprobar mediante el mismo console.log. Estuvimos buscando en internet y pudimos confirmar que es posible enviar un body en una delete de tipo request, por lo que no sabemos cuál puede ser nuestro problema. Sabemos que no es un error de código, ya que con tan solo cambiar el método de la ruta y de la request a post, si funciona.

Muchas gracias!

B-Dominguez commented 3 years ago

Hola,

Si bien el método soporta la inclusión de un body (ver enlace), la identificación del recurso a través de éste no es una práctica esperada y puede llevar a comportamientos inesperados (como el que comentas).

El estándar al usar el método http DELETE es identificar el recurso a eliminar a través de la URL (o URI) (ver enlace). Les aconsejo que se atengan a ese estándar.

De todas formas quedo atento a si tienen algún comentario al respecto.

Saludos!

NicoMeyer commented 3 years ago

Hola! Gracias por la respuesta. Podríamos manejarlo únicamente con la URL y de esa forma trabajar con el ID, por ejemplo, pero el problema es que tendríamos que cambiar la modelación de nuestras entidades. Una opción que se me ocurre es modificar la URL específica para ese endpoint, de esa forma podríamos resolver nuestro problema (agregando únicamente un parámetro a este, aparte del ID). Pero esto haría que la URL no sea idéntica a la explicitada en el enunciado ¿podemos de igual forma hacer eso? PD: nuestra temática es ReservOk y el endpoint en cuestión es el delete de usuario por parte del admin.

B-Dominguez commented 3 years ago

No estoy seguro de si entiendo tu respuesta, pero esta es la especificación del endpoint que mencionas:

image

En ella, el :user_id se refiere al id del usuario a eliminar. Entonces, ahí tienes identificado en la URL el recurso a eliminar, y al realizar la request con el método DELETE, tu API ya tiene la información de que tiene que eliminar un usuario, y qué usuario (sin necesidad de un body).

Cuéntame si esto te aclara el problema, o si hay algo que no te estoy entendiendo

NicoMeyer commented 3 years ago

Gracias! Al final hablamos con nuestra ayudante y pudimos solucionar el problema. Ocuparemos únicamente la URL para identificar que usuario eliminar.