A Coronavirus API felépítése

Március közepén alig két hétig jöttem Svájcba, és ebben az időszakban Olaszország ment át a „nincsenek nyilvános összejövetelek” helyett „minden zárt - senki sem be, sem ki”. Ahogy a koronavírus közeledt a járványterülethez, igazán érdeklõdni kezdtem a vírus mögött meghúzódó adatok iránt. Nagy-Britanniában élek, és csodálkoztam (és még mindig is) az ottani kormány válaszának hiánya, és ugyanakkor aggódik, hogy öt nap múlva a helyzet olyan jelentősen megváltozhat, hogy nem engednék vissza az országba .

Úgy gondoltam, hogy jó lenne összeállítani egy olyan grafikont, amely az adatokat mutatja az idő múlásával, talán más területekkel összehasonlítva, hogy megpróbáljam megállapítani, mikor kezdik az országok bizonyos lépéseket tenni. Ahogy körül kerestem, rájöttem, hogy nem volt jó API, amelyet a dobozból használhatnék arra, amit akartam. Úgy gondoltam, hogy ez remek mini-hackathon lenne, ezért úgy döntöttem, hogy felépítek egy gyors API-t ezen adatok feltárására.

Az API elérhető a covid19api.com webhelyen.

Adatforrás

Néhány googling után a legjobb adatforrás, amit találtam, a Github repo volt a John Hopkins Egyetemen. Minden nap frissítik a repót a legfrissebb, különböző forrásokból összegyűjtött adatokkal. Úgy döntöttem, hogy az idősor adataival kezdtem, mivel azok megfeleltek azoknak a követelményeknek, amelyeket kitölteni akartam.

Alkalmazás

Nagyon rajongok vagyok a Go-nak, így természetesen ezt választottam a szerver alkalmazás nyelvének. Az alkalmazás végül félénk volt az 500 sornyi kódból, és nagyjából a következőképpen működik:

  • Hat óránként lehívjuk a fájlokat a fenti Github repóból
  • Minden aktuális fájlról biztonsági másolat készül, hogy megőrizze a korábbi adatokat
  • Az új fájlokat ezután elemzi, és az adatbázisba menti
  • Az API ki van téve, hogy hozzáférjen az adatokhoz
  • A statisztikák összegyűjtése az általános API-felhasználás bemutatására szolgál

Az API-lekérdezések mindegyike elég hatékonyan fut, a válaszokat általában 150 ms-ban adják vissza. A legnagyobb útvonal minden olyan adat felé tart, amely 4 mp-ig elindítja a 8 MB visszaadását, ami elég jó teljesítmény. Nincs itt semmi különös, a MySQL-hez hozzáadott indexek és a normál Go-kód több mint elegendő (még nincs gyorsítótárazás).

Az adatbeviteli oldalon tisztességesen használom a Go rutinokat, de megint - semmi őrült. Minden fájl (összesen három) párhuzamosan fut, amikor hat óránként betöltik, és ez összesen körülbelül 10 másodpercet vesz igénybe.

Nagyon sok fejlesztési lehetőség van, amit meg szeretnék tenni, de most a koronavírus gyors elterjedése és ennek az API-nak a potenciálisan csökkenő hozama miatt a piacra jutás idejére koncentráltam.

Miért építsük ki ezt az API-t?

Szeretnék harmadik felek számára tiszta adatokat szolgáltatni egy szép, gyors JSON API-n keresztül, hogy webes, mobil és egyéb alkalmazások kiépíthetőek legyenek. Ha az adatok könnyebben integrálhatók, remélhetőleg több innovációra is szükség van - jelenleg csak két alkalmazás található az App Store-ban, ami érdekesnek tűnik, tekintettel arra, hogy erre nagy hangsúlyt fektetünk.

Haladni előre

Úgy tervezem, hogy eléggé dolgoznék a kóddal, hogy hamarosan nyílt forrásúvá tegyem, valamint jobb hibaellenőrzést, tesztelést és naplózást adok hozzá. Hozzáteszek néhány teljesítményjavítást, valamint további, részletesebb útvonalakat. Végül dolgozom néhány dokumentációt, valószínűleg a Postmanon keresztül, hogy segítsem az embereket felkészíteni és működtetni.

A válasza eddig nagyszerű és nagyon gyors volt - úgy tűnik, ez kitöltötte egy olyan igényt, amelyben örülök. A projekt kezdőlapja a covid19api.com, ha többet szeretne megtudni. Nyugodtan forduljon hozzám funkciókkal, hibákkal vagy bármivel.

Eredetileg a https://ksred.me címen, 2020. március 13-án tették közzé.