Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




desu
#54030Kaledros:

llegue un PO y diga "tenemos un 15% de errores en las llamadas al servicio"

a ver, si los usuarios estan buscando cosas que no encuentran, pues hay un 15% de usuarios que quieren cosas que no tenemos... no soy yo quien decirle como hacer su trabajo... pero vamos, a the ugly organization no entraba.

si ahi es donde entraria el tema application/network, entonces devolvemos un 200 con una lista vacia? porque no es un error, si no hay nada... pues 200 o 204.

el ejemplo tipico y mitico, HACER UN DELETE, QUE PASA SI EL RECURSO NO EXISTE? Vas a hacer DELETE de /foo, y resulta que foo no existe... devuevles 404 o 200? porque lo has "borrado", si no existia pues borrado no? jaja

1 respuesta
Kaledros

#54031 Obviamente ese 15% tiene relevancia y hay que prestarle atención, pero no puede ser nunca un fallo de la aplicación si por diseño tu contenido es perecedero.

1 respuesta
desu

#54032 mi conclusion, es si el DELETE quiere borrar algo, y ese algo no existe, debe ser un 404.

porque si haces un 200 nunca detectaras los casos en que no exista.

la solucion, es NUNCA perder informacion ni taparla con malas decisiones.

tu pierdes informacion, no sabe que esta haciendo ni pasando en tu sistema, yo no pierdo informacion nunca. por eso mi metodo es mejor. punto y final.

con este ejemplo del DELETE creo que se entiende muy bien mi punto de vista, que es el correcto desde el punto de vista de ingenieria, que cada uno despues saque su conclusion en otros casos de uso que comentabais.

2
Lifecasi0

mi conclusion, es si el DELETE quiere borrar algo, y ese algo no existe, debe ser un 404.

Buena forma de follarte la idempotencia.

1 respuesta
Wei-Yu

#54034 la idempotencia la tienes que querer por algún motivo, no porque sí. Dependiendo de la situación puede tener sentido hacer cosas así, pero también diré que yo he hecho eso mismo (200 para un delete cuando el recurso no existe) y es bastante mala idea.

Sobre todo porque cuando borras lo haces através de un identificador único (ya sea la clustering key o un guid) y si tienes ese identificador es porque crees que hay algo ahí. Si vas a borrarlo y ya no existe, lo que estabas haciendo en el cliente no tiene sentido... directamente no deberías tener ese ID.

1 respuesta
Lifecasi0

#54035 estás asumiendo que te aporta algo saber que ese recurso ya no existe, cuando estás intentando borrarlo...

1 respuesta
Wei-Yu

#54036 que importe o no no es decisión tuya al implementar si no del consumidor, y cambiar ese comportamiento (de 200 continuo a 200 cuando sí y 404 cuando no existe) es un breaking change implícito (o sea que no sabes las ramificaciones que tendrá a menos que todo el mundo se ponga a revisar sus respectivos códigos).

1 respuesta
Lifecasi0

#54037 pues ahí es donde creo que te equivocas ya que una decisión técnica, es una decisión del que lo programa, y no del stakeholder. Al stakeholder se la suda que devuelvas un 200, un 400, un 500, o un 1300.

Kaledros

Es todo lógica de negocio.

Si tu sistema está diseñado de manera que puedas darle a borrar a cosas que ya no existen, como temas de cacheado y tal, entonces devolver un 404 no tiene sentido porque debería ser idempotente. Si en tu sistema no deberías poder borrar cosas que ya no existen, como un inventario de un videojuego, entonces sí que tienes un problema y más vale que lo hagas saltar.

B

Si me das un 404 cuando no existe un registro... ¿como diferencio de cuando está mal la ruta? Si me das un 200 con un mensaje de error pues entiendo que la ruta es correcta pero algo pasa.

Luego entramos en temas de cachear respuestas... ¿cacheas 404? lulz!

Separar la lógica de aplicación de la lógica de negocio... Mi aplicación funciona bien, lo que no va bien es lo que me mandan hacer.

2 1 respuesta
Wei-Yu

precisamente si te comes el 404 "por temas de caché" puede que estés ocultando problemas de consistencia que no vas a detectar porque estás ofuscando el error

como diferencio de cuando está mal la ruta

aquí ya estás abriendo la veda para quejarse de http y restful y eso es un bucle infinito xd de hecho siempre se pone como algo muy loco el 200 http con un payload errors: {} pero no me parece tan descabellado tampoco por cosas así

1 respuesta
hda

#54029 le echaré un vistazo. La cosa es que yo tengo un corpus de textos (A) y un texto (b), quiero saber cuán similar es el texto b para cada uno de los textos en A. De hecho, tengo unos textos (B) y quiero comparar cada uno de ellos con los textos de A, descomponiéndome la similitud de cada texto b en los de A.

1 respuesta
desu

os recomiendo leer como funciona el kernel y en que casos las cosas se hacen de una manera u otra.

por mi parte dejo el tema.

B

#54041 Pero si yo soy una máquina... y opero contra tu web... me dices que tengo que saber el tipo de 404 que me mandas? tener el libro gordo de petete con los posibles payloads de Juanito, Mengana y Manolete?

1 respuesta
Kaledros
#54040carracho:

Luego entramos en temas de cachear respuestas... ¿cacheas 404? lulz!

Me refiero a que tu aplicación puede cachear resultados y que por diseño exista un intervalo entre que un registro se borra y la caché se refresca en el que puede entrarte un DELETE. Si está hecha así, entonces devolver un 404 no tiene sentido.

Dr_Manhattan

#54042 en ese caso no sé si te servirá, en cualquier caso, me mola ver también este tipo de aplicaciones de la IA

1
Wei-Yu

#54044 yo estoy asumiendo que hablamos de APIs restful y en ese contexto el 404 tiene sentido, precisamente porque la ruta de acceso que vas a tener para borrar un recurso va a ser del palo

DEL /user/53

Si la ruta /user existe pero el usuario 53 no, retornar un 404 tiene todo el sentido del mundo. Además que el 404 puede tener un payload indicando el problema concreto.

1 respuesta
Lifecasi0

#54047 Precisamente en ese contexto tiene cero sentido un 404.

1
Dr_Manhattan

dejad de seguir la linde, que hace rato que se ha acabado

Wei-Yu

tú es que acabas muy rápido vicentíiiiiiiiiin que nos conoceeeeeeeeeeeeeeeemooOOOOOOs

Lifecasi0

Lo que me queda claro una vez más, es que si hubiéramos hecho BDD, TDD, y DDD, junto a arquitectura hexagonal, con vertical slicing y screaming architecture, esto estaría solucionado desde el inicio.

4 1 respuesta
pantocreitor

#54051 Y alguien que pregunte constantemente "¿Todo bien?"

1
desu

codigo sucio, en the ugly organization no tenemos estos problemas de fpero.

1
GaN2

Estoy con @desu en que no habría que devolver un 200 si el registro no existe durante un borrado porque el 200 lo único que indica es que la petición se ha realizado correctamente (y en este caso no lo ha hecho como tal). La respuesta correcta es un 404 que es lo que se suele usar como estándar en la industria dado que para ello está, el 404 implica que el recurso no existe.

Que es una mierda porque se usa el mismo código para todo? Si, pero es el que hay.

1 1 respuesta
desu

#54054 por eso tu estas en una faang ganando +200k, porque me haces caso, y los muertos de hambre del hilo viven de mencionarme... porque se creen mas listos. tipico de pueblerinos.

2 1 respuesta
GaN2

#54055 perdona que se me ha pasado llevarte flores al altar con tu retrato que tenemos aquí, luego me paso y te rezo un par de credos

JuAn4k4

Sería un 404 si nunca existió o hard delete o un 410 si fue un soft delete.

Entender los 4XX como errores de la app no ha entendido que los 4XX son client errors en la mayoría de casos

1 respuesta
B

Ya lo pongo yo... https://github.com/joho/7XX-rfc

1 1 respuesta
GaN2

#54057 te puedes marcar un error 500 y dejar con el culo torcido al cliente. Cierta aplicación de un fabricante alemán suelta errores 500 cuando ocurre una casuística similar a la que hablamos y se quedan tan panchos

1 respuesta
JuAn4k4

#54059 Jajajaj fijo que es un null pointer, fperos