Construyendo una API de Coronavirus

A mediados de marzo llegué a Suiza por poco menos de dos semanas, y fue durante este tiempo que Italia pasó de "no tener reuniones públicas" a "todo está cerrado, nadie entra ni sale". A medida que el Coronavirus se acercaba al territorio pandémico, comencé a interesarme realmente en los datos detrás del virus. Vivo en el Reino Unido y estaba (y todavía estoy) asombrado por la falta de respuesta del gobierno allí, y al mismo tiempo me preocupaba que en cinco días la situación pudiera cambiar tan significativamente que no se me permitiría regresar al país. .

Pensé que sería genial construir un gráfico que muestre los datos a lo largo del tiempo, tal vez en otros territorios, para tratar de establecer cuándo los países comenzarían a tomar ciertas medidas. Mientras buscaba, descubrí que no había una buena API para usar de inmediato para lo que quería. Pensé que sería un mini hackathon genial, así que decidí crear una API rápida para exponer estos datos.

La API está disponible en covid19api.com.

Fuente de datos

Después de buscar en Google, la mejor fuente de datos que pude encontrar fue el repositorio de Github de la Universidad John Hopkins. Actualizan el repositorio todos los días con los últimos datos recopilados de varias fuentes. Decidí comenzar con los datos de la serie temporal, ya que cumplían los requisitos que quería llenar.

Solicitud

Soy un gran admirador de Go, así que naturalmente lo elegí como el idioma para la aplicación del servidor. La aplicación terminó siendo apenas 500 líneas de código y en general funciona de la siguiente manera:

  • Cada seis horas, los archivos se obtienen del repositorio de Github anterior
  • Todos los archivos actuales se respaldan para mantener datos históricos
  • Los nuevos archivos se analizan y guardan en la base de datos.
  • Se expone una API para dar acceso a los datos.
  • Las estadísticas se recopilan para mostrar el uso general de la API

Todas las consultas de la API se ejecutan de manera bastante eficiente y las respuestas generalmente se devuelven en 150 ms. La ruta más grande es para todos los datos que tardan 4 segundos en devolver 8 MB, que es un rendimiento bastante bueno. No hay nada realmente especial aquí, los índices agregados a MySQL y el código Go normal son más que suficientes (aún no hay almacenamiento en caché).

En el lado de la entrada de datos, estoy haciendo un uso justo de las rutinas Go, pero de nuevo, nada loco. Cada archivo (tres en total) se ejecuta en paralelo cuando se carga cada seis horas y esto toma alrededor de 10 segundos en total.

Hay mucho margen de mejora que planeo hacer, pero en este momento me concentré en el tiempo de comercialización debido a la rápida propagación del Coronavirus y los rendimientos potencialmente decrecientes de esta API.

Por qué construir esta API

Quiero proporcionar a terceros datos limpios a través de una API JSON rápida y agradable para que las aplicaciones web, móviles y de otro tipo puedan construirse con ella. Si los datos son más fáciles de integrar, con suerte debería haber más innovación: actualmente solo hay dos aplicaciones en la App Store, lo que me parece interesante teniendo en cuenta el gran enfoque en esto.

Avanzando

Planeo trabajar en el código lo suficiente como para que sea de código abierto pronto, así como para agregar una mejor verificación de errores, pruebas y registro. También agregaré algunas mejoras de rendimiento, así como rutas adicionales detalladas. Finalmente, trabajaré en alguna documentación, probablemente a través de Postman, para ayudar a la gente a funcionar.

La respuesta hasta ahora ha sido excelente y muy rápida, parece que ha llenado una necesidad de la que estoy feliz. La página de inicio del proyecto es covid19api.com si está interesado en obtener más información. No dude en comunicarse conmigo sobre características, errores o cualquier otra cosa.

Publicado originalmente en https://ksred.me el 13 de marzo de 2020.