Jak API zrychluje vývoj — náš a brzy i externích uživatelů

API to v Livesportu dříve nemělo — nikoliv vlastní vinou — jednoduché. Víme ale, že se jeho vylepšování vyplatí, protože nám může zjednodušit život a zároveň hodně urychlovat vývoj aplikací.

Livesport
Livesport
Sep 17 · 5 min read

V Livesportu jsme před pár měsíci vydali aplikaci FlashScore pro mobilní operační systém KaiOS. Jde o systém vycházející ze zaniklého Firefox OS určený pro „hloupé telefony“. Aplikaci se nám podařilo na trh dostat zhruba za čtyři měsíce, tedy za výrazně kratší dobu než několik let předtím aplikace pro iOS a Android.

Něco takového bylo možné díky postupnému vylepšování aplikačního rozhraní (API). V našem případě je to v podstatě taková brána ke sportovním datům, se kterými v rámci našich aplikací a služeb pracujeme a díky kterým můžeme poskytovat výsledky, statistiky a další rychlý servis.

API nám pomáhá mimo jiné v rychlém prototypování aplikací. Je to i díky tomu, že se vývojáři nemusí učit složitou strukturu databáze, řešit její změny a zbytečně ji zatěžovat dotazy. Stačí jim „konzumovat“ samotné API.

Jednoduché rozhraní nám do budoucna umožní rychle vyvíjet naše aplikace pro další platformy. Představit si můžeme třeba integraci do různých hlasových asistentů typu Siri či Alexa, kteří by dokázali předčítat výsledky a aktuální dění v zápasech. API se pro nás stává takzvanou business critical záležitostí.

API pro všechny

Rádi bychom například zrušili tým, který pro externí partnery dělá přípravu a exportování dat. Prostřednictvím API získají partneři k datům přímý přístup a nám se uvolní kapacity, které jsou na práci s daty alokovány. Ve své podstatě tak zavádíme mnohem větší automatizaci.

K tomuto cíli se postupně propracováváme a změny v oblasti API řešíme zhruba poslední rok. Dříve jsme měli architekturu API velmi složitou. Různé části cache se synchronizovaly skrze více strojů. Probíhala zde komunikace mezi procesy, aby k synchronizaci dat mohlo docházet. V tomto modelu se dost často stávalo, že data z API přicházela nekonzistentní a prostředí nebylo stabilní. API tak u nás historicky nemělo příliš dobrou pověst a namísto rozvoje jsme v podstatě hasili požáry.

API jsme dlouho dělali jako interní záležitost, která nebyla určená pro naše externí partnery a vývojáře. Vytvořili jsme si nástroj nazvaný Explorer (front-end běží v Reactu), v němž se dají „naklikat“ veškeré akce, které jdou z API vytáhnout. Explorer zároveň vývojářům zvládne přímo vygenerovat kód určený pro vložení do aplikace.

Podobný proprietární software ale postupem času vytváří překážky. Je to velká vstupní bariéra pro nové vývojáře, kteří nejsou schopní na specifický interní nástroj rychle naskočit. Nově se tedy snažíme jít cestou standardů a API prochází reinkarnací.

Jedna “úschovna”

Tato sestava odbavuje asi 11 tisíc klientských operací za sekundu. Samotný Redis jich ale zvládá ještě více, během sekundy kolem 600 tisíc. Když se uživatel zeptá na data, jsou definovány různé parametry, takže se na každý dotaz v Redisu udělá třeba 50 operací. Operace na Redisu dokáží vrátit odpověď do 50 milisekund. Celková odpověď API je v současné době do 250 milisekund, ale na zlepšení samozřejmě dále pracujeme.

Během posledního roku jsme hodně zapracovali na zjednodušení celé architektury API. Velký důraz jsme kladli na zlepšení kvality dat, která z API vycházejí. Kvalita je obecně věc, na níž nám hodně záleží, což je i důvod toho, proč jsme se pustili do obrovských výzev, jako je právě změna architektury.

Provedli jsme rovněž refaktoring z CoffeeScriptu na TypeScript,takže teď máme lepší možnosti testování a lepší čitelnost a přehlednost kódu. Tento přechod ukazuje, že se nebojíme dělat rozsáhlé změny v případech, které budou pro celý projekt znamenat velký přínos.

Nadšený junior? Bereme!

API si dále může sahat do databáze a generovat do ní dotazy. Primárně jde o dotazy do MySQL, ale využíváme také Elasticsearch a v menší míře rovněž Sphinx. Pro externí firmy je k dispozici GraphQL endpoint, kterým se dotazují přímo na data. Celé API pak monitorujeme pomocí nástroje Prometheus, grafy a další vizuální výstupy zvládá Grafana.

Přemýšlíme i nad tím, jak do budoucna API provozovat v Kubernetes, což nám dá široké možnosti škálování. Teď API běží na bare metalu, ale obecně už náš dev stack Kubernetes a Docker využívá. Každý vývojář si může založit vlastní branch a otestovat funkčnost. CI/CD řešíme přes GitLab.

Čeká nás rovněž vytvoření autorizační proxy vrstvy pro externí uživatele našeho API. Tato vrstva bude zajišťovat autentizaci pomocí OAuth 2.0. Klient se zeptá autorizačního serveru, který následně vystaví token s určitým časem platnosti. Řešit budeme i rozložení zátěže. Počty dotazů, které do API chodí od našich externích partnerů, bude potřeba omezit, aby nebyli ostatní uživatelé ovlivněni tím, že si někdo vezme více výkonu.

Tohle všechno znamená hodně práce, na kterou v současném týmu tří lidí nestačíme. Během roku bychom se chtěli dostat na hranici kolem deseti vývojářů. Nehledáme nutně plně připravené seniory a budeme rádi i za nadšené juniory, kteří o tuto oblast mají zájem a chtějí se jí učit. Hodí se každopádně zkušenosti s technologiemi Node.js a TypeScript a případně i s architekturou a výkonem API.

Spolu s tím se snažíme spolupracovat s externími firmami, jež jsou na API zaměřené. Už jsme například v kontaktu s Good API. Ta nám pomáhá redukovat množství cest, které bychom jinak museli slepě prošlapat.


Zaujalo tě, co v Livesportu děláme? Přidej se k nám!

Livesport Dev

Od vývojářů pro vývojáře.

Livesport

Written by

Livesport

Livesport Dev

Od vývojářů pro vývojáře.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade