IIC2513-2020-1 / syllabus

Material del curso
35 stars 3 forks source link

API_REST: Tipo de dato al recibir info en nuestra app en POST (y PATCH) #162

Closed Gorgola22 closed 4 years ago

Gorgola22 commented 4 years ago

Hola, estoy implementando las rutas para crear, en el que me surgió la duda si el JSON que recibe la app tiene que:

  1. Ser controlado (verificado que sean datos correspondientes a lo que se pide, por ejemplo solo números) o se espera que vengan bien los datos? En caso de controlar, simplemente se mandaría una respuesta tipo error XXX: 'Datos inválidos' ?
  2. En el caso de las imágenes... esos son archivos que son manejados (hablando del html) en el router para luego subirlos al storage. En este caso, ¿el cliente envía el PATH o envía el link como que ya estuviera en el storage?

Mi duda principalmente es en el formato que se reciben los datos. Gracias!

gpvidal commented 4 years ago

Hola @Gorgola22 ,

Respondo tus dudas:

Ser controlado (verificado que sean datos correspondientes a lo que se pide, por ejemplo solo números) o se espera que vengan bien los datos? En caso de controlar, simplemente se mandaría una respuesta tipo error XXX: 'Datos inválidos' ?

La API es un interfaz, que debe estar clara (al igual que las interfaces en algunos lenguajes de programación). Por lo que si te dice que viene un número o un texto, debería venir de esa forma. Esto no implica que no puedan ocurrir otros errores como de conexión u otros.

En el caso de las imágenes... esos son archivos que son manejados (hablando del html) en el router para luego subirlos al storage. En este caso, ¿el cliente envía el PATH o envía el link como que ya estuviera en el storage?

Depende de lo que quieras hacer y de donde lo hagas. Si quieres mostrar una imagen, la API te responde la URL y estás escribiendo codigo en el cliente (React, pro ejemplo) basta con que tomes esa URL y la muestres en un tag img. Si estas haciendo el request desde el backend y quieres guardar la imagen (y cualquier archivo en general) claro que deberías verlo en un router. Otra cosa que puede pasar es que desde el cliente hagas el request a la API, obtengas la URL y se la mandes a tu backend para descargarla.

Hay multiples escenarios (hay más de los que te mencioné), tienes que ver cual encaja con el tuyo.

Saludos,

Gorgola22 commented 4 years ago

Gracias @gpvidal !! Para corroborar: entonces en el POST se recibiría un JSON con todos los "key" : "values" necesarios para crear la entidad y en el PATCH vendrían solo los que se desean modificar. Respecto a la segunda pregunta, efectivamente guardo la URL correspondiente a la imagen guardada en el storage. Mas en la parte html del router en que se recibe la imagen, como es con un ctx.request.files, lo que maneja la función del fileStorage es el photo.path, para luego subirlo a la nube. En este caso, cómo se presentará el dato photo? Como un temp file o como un link a una imagen que ya está en el storage?

Muchas gracias de antemano! Eduardo

gpvidal commented 4 years ago

Para corroborar: entonces en el POST se recibiría un JSON con todos los "key" : "values" necesarios para crear la entidad y en el PATCH vendrían solo los que se desean modificar.

En el ámbito RESTful así sería.

Respecto a la segunda pregunta, efectivamente guardo la URL correspondiente a la imagen guardada en el storage. Mas en la parte html del router en que se recibe la imagen, como es con un ctx.request.files, lo que maneja la función del fileStorage es el photo.path, para luego subirlo a la nube. En este caso, cómo se presentará el dato photo? Como un temp file o como un link a una imagen que ya está en el storage?

Trata de que sea liviano y seguro. Si puede ser un link al archivo (imagen en este caso) ideal.

Saludos,

Gorgola22 commented 4 years ago

En el ámbito RESTful así sería.

Ya! Bacán!

Trata de que sea liviano y seguro. Si puede ser un link al archivo (imagen en este caso) ideal.

Cómo es eso de liviano y seguro? jajaja El tema es que si NO es un link que apunta a una imagen que está en el storage, entonces debería agregar algo así en mi clase fileStorage:

O me estoy complicando demaciado? Jajaja

Saludos y gracias por la paciencia jaja

gpvidal commented 4 years ago

Yo creo que te estás complicando, si tienes el link deberías mandarlo y que el frontend vea como lo muestra.

Saludos,