enzonotario / esjs-dolar-api

API desarrollada en EsJS para las diferentes cotizaciones de Dólar en Argentina, Chile, Venezuela, Uruguay, México y Bolivia
https://dolarapi.com
MIT License
222 stars 18 forks source link

URL con querystring devuelve 404 #12

Closed elivinsky closed 8 months ago

elivinsky commented 8 months ago

Uso query params para invalidar caché pero en la API al incluir cualquier cosa a la URL hace que devuelva 404. Creo que debería devolver el recurso ignorando los params

Ejemplo: https://dolarapi.com/v1/dolares/blue?t=2023-01-16

enzonotario commented 8 months ago

Ahh, asi que sos vos!! jaja :smile:

Modifiqué esto recientemente ya que, como bien indicas, esto hace "saltarse" la caché, con el gasto de recursos (innecesario) que eso conlleva, ya que los valores se actualizan periódicamente, por lo que una consulta a las 08:00 generará el mismo resultado hasta las 08:59 (por poner un ejemplo).

Por lo tanto, lo mejor es hacer uso normal de los endpoints documentados, y la API se encargará de proporcionar la info más recientemente actualizada.

Cabe destacar que es un proyecto gratuito, sin fines de lucros ni fondos, por lo que no puedo permitirme consultar miles de veces la BD durante una hora, siendo que los resultados serán iguales.

Sin embargo, estoy trabajando en otro proyecto que si permitirá esto (aunque también implementará un sistema de Ratelimit, por lo que cada uno decidirá en qué endpoints gastar su cuota mensual). Además, proporcionará cotizaciones históricas y otros datos: https://argentinadatos.com/ . Puedes seguir el avance de los issues #11 y #3 para enterarte de este nuevo proyecto.

Saludos!

elivinsky commented 8 months ago

Perdón si te llené los logs! :P

Me refería a saltear mi caché, no la tuya. Es que uso la API en Google Sheets no se actualiza tan rápido como me gustaría.

Igual lo entiendo si estás cacheando por URL.

Gracias!

enzonotario commented 8 months ago

Actualmente las respuestas de /v1/dolares/* se cachean por 15min, y las de /v1/cotizaciones/* por 60min. No me parece que sea "lento", considerando también que la fuente de datos de la API (DolarHoy.com) también maneja una caché interna (y no se actualiza segundo a segundo).

De hecho, estoy evaluando incrementar los tiempos de cacheo debido al incremento del uso y consumo de recursos que está teniendo la API últimamente.

La otra alternativa, sería que cada persona despliegue su propia API (y haga uso de sus recursos), con el código de este repositorio. Si se despliega en Vercel es fácil. En todo caso, podríamos trabajar en una Guía para esto.

Saludos!

elivinsky commented 8 months ago

Quizás me expresé mal. La caché que quiero pisar es la de Google Sheets, no la de la API.

enzonotario commented 8 months ago

Bien, en realidad la API anteriormente, en estos casos, redireccionaba hacia el endpoint "normal" (sin Query Params), y de esa manera la API finalmente terminaba respondiendo. Pero dado al incremento de consumo que noté últimamente, estoy probando si esto puede bajar el consumo (ya que claramente no eras el único, y es algo que ya vengo notando hace tiempo). En todo caso, me parece que esto es un "inconveniente" de Vercel, ya que, si fuera por mi, no tengo problema en que la API simplemente responda la Request (pero parece ser que esto me está generando más gastos).

En tu caso, quizás puedas implementarte una API pequeña que reciba tu Request (con Query Params), y consulte a DolarApi.com (sin Query Params). Incluso quizás puedas hacerlo sólo con la configuración de Rewrites de Vercel (https://github.com/gaboolic/vercel-reverse-proxy).

Saludos!

elivinsky commented 8 months ago

No es mala idea hacer mi propio proxy. Gracias!

enzonotario commented 8 months ago

Hola @elivinsky , acabo de pasar la API a un modelo "estático", por lo que ya pueden volver a utilizar QueryParams en las URLs (y la API internamente se encargará de refrescar los endpoints estáticos).

Saludos!

elivinsky commented 8 months ago

Gracias @enzonotario. Se agradece mucho tu trabajo!