ManaSistÄmas pirmÄ API versija parÄdÄ«jÄs pirms 10 gadiem. Visu Å”o laiku mÄs strÄdÄjam pie esoÅ”ajÄm API versijÄm un izstrÄdÄjam jaunas. Dažas API versijas jau ir Ätri nokavÄtas.
Å ajÄ rakstÄ bÅ«s daudz interesantu lietu: kÄ tika izveidota API, kÄpÄc tÄ ir nepiecieÅ”ama mÄkoÅu pakalpojumiem, ko tÄ sniedz lietotÄjiem, kÄdas grÅ«tÄ«bas esam piedzÄ«vojuÅ”i un ko plÄnojam darÄ«t tÄlÄk.
Mani sauc Oļegs Aleksejevs , es esmu tehniskais direktors un viena no ManaSistÄmas dibinÄtÄjiem.
KÄpÄc veidot API pakalpojumam
MÅ«su klienti, kas ir desmitiem tÅ«kstoÅ”u uzÅÄmÄju, aktÄ«vi izmanto mÄkoÅa risinÄjumus: bankoÅ”ana, interneta veikali, preÄu uzskaite, CRM. Pievienojoties vienam pakalpojumam, ir grÅ«ti apstÄties. Un jau piektais, astotais, desmitais pakalpojums padara uzÅÄmÄja darbu vieglÄku, tomÄr dati starp Å”iem mÄkoÅa pakalpojumiem tiek pÄrvietoti manuÄli. Darbs kļūst par Å”ausmÄm.
AcÄ«mredzams risinÄjums ir dot lietotÄjiem iespÄju pÄrsÅ«tÄ«t datus starp mÄkoÅu pakalpojumiem. PiemÄram, importÄt un eksportÄt datus kÄ failus, kurus tad var augÅ”upielÄdÄt vajadzÄ«gajÄ pakalpojuma veidÄ. Faili parasti tiek pielÄgoti katra pakalpojuma formÄtam. Tas ir vairÄk vai mazÄk vienkÄrÅ”s manuÄls darbs, bet ar Å”o pakalpojumu skaita pieaugumu to realizÄcija kļūst aizvien grÅ«tÄka.
TÄpÄc nÄkamais solis ir API. Ar to mÄkoÅa pakalpojums gÅ«st labumu, jo sasaista vairÄkus pakalpojumus vienÄ vietÄ. Å Ädas ekosistÄmas parÄdīŔanÄs piesaista jaunus klientus, pateicoties papildu iespÄjÄm. Produkts ar jauniem funkcionalitÄtes elementiem kļūst izdevÄ«gÄks un noderÄ«gÄks.
Ja izveidojam savus programmatÅ«ras saskarnes, tas piesaista treÅ”o puÅ”u pÄrdevÄjus kÄ programmÄtÄjus, kuri uzzina par jÅ«su produktu, pateicoties API. ViÅi sÄk veidot risinÄjumus, pamatojoties uz piedÄvÄto API un pelna naudu, automatizÄjot savu klientu uzdevumus.
ManaSistÄmas uzskaites sistÄma balstÄs uz vienkÄrÅ”Äm procesu struktÅ«rÄm. Galvenais ir darbs ar pamata dokumentiem, iespÄja veikt preÄu pieÅemÅ”anu un izsniegÅ”anu, saÅemt biznesa ziÅojumus, izmantojot pamata dokumentus. TÄpat ir datu nodoÅ”ana, piemÄram, uz mÄkoÅa grÄmatvedÄ«bu, un saÅemÅ”ana no banku sistÄmÄm vai mazumtirdzniecÄ«bas vietÄm. VÄl mÄs strÄdÄjam ar interneta veikaliem: saÅemam informÄciju par precÄm un nosÅ«tÄm datus par atlikumiem.

Mans pirmais API
PÄdÄjo 10 gadu laikÄ, strÄdÄjot ar API, mÄs esam iegÅ«ti dažÄdas integrÄcijas, kas ļauj apmainÄ«ties ar datiem, strÄdÄt ar bankÄm, veikt maksÄjumus un izmantot ÄrÄjo telefonsakaru pakalpojumus.
PirmajÄ gadÄ mÄs iespÄju eksportÄt jebkÄdus datus XML formÄtÄ. TajÄ laikÄ lietotÄjiem bija saprotamÄk un ierastÄk turÄt datus Ärpus tieÅ”saistes, tÄdÄļ mÄs viÅiem to nodroÅ”inÄjÄm. Eksportu varÄja uzsÄkt manuÄli no saskarnes. TÄdÄļ to vÄl nevarÄja saukt par API.
TajÄ paÅ”Ä laikÄ mÄs uzsÄkÄm sadarbÄ«bu ar uzÅÄmumu Rus agro ā viÅi jau izmantoja āpiebrieduÅ”oā ERP ražoÅ”anas plÄnoÅ”anai un pÄrdoÅ”anai, bet vagonu iekrauÅ”ana rÅ«pnÄ«cÄs tika automatizÄta mÅ«su platformÄ. TÄdÄjÄdi mums radÄs pirmie Ä«stÄ API sÄkumi: apmaiÅa starp mÅ«su pakalpojumu un ERP notika, nosÅ«tot lielu datu failu par visiem dokumentu veidiem.
Å is ir pieÅemams variants datu partiju apmaiÅai, taÄu kopÄ ar dokumentiem bija jÄnodod to atkarÄ«bas: informÄcija par precÄm, sadarbÄ«bas partneriem un noliktavÄm. Å Ädu kravu nebija grÅ«ti Ä£enerÄt eksportÄÅ”anas laikÄ, bet diezgan grÅ«ti analizÄt importÄÅ”anas laikÄ, jo vienÄ paketÄ ieradÄs visa informÄcija: gan par jauniem dokumentiem, gan par jau esoÅ”ajiem.
Pirmais XML API nedzÄ«voja ilgi ā pÄc diviem gadiem mÄs uzsÄkÄm tÄ pÄrbÅ«vi. Pat tÄ darba sÄkumÄ mÄs pieļÄvÄm vairÄkas kļūdas, veidojot programmatÅ«ras interfeisu.

KÄ tika veidots XML API: ilustrÄcija no viena no mÅ«su arhitektiem. Starp citu, gaidiet viÅa rakstus.
Å eit ir mÅ«su galvenÄs kļūdas:
- JAXB marÄ·Äjums tika izveidots tieÅ”i uz entity beans. MÄs sazinÄmies ar datu bÄzi, izmantojot Hibernate, un uz Å”iem paÅ”iem bim izveidota JAXB marÄ·Äjums. Å Ä« kļūda uzveicÄs gandrÄ«z uzreiz: jebkÄda datu struktÅ«ras atjauninÄÅ”ana radÄ«ja nepiecieÅ”amÄ«bu steidzami informÄt visus, kuri izmanto API, vai veidot pagaidu risinÄjumus, kas nodroÅ”inÄja saderÄ«bu ar iepriekÅ”Äjo datu struktÅ«ru.
- API tika izstrÄdÄts kÄ kaut kas papildus, un sÄkotnÄji mÄs nebijÄm noteikuÅ”i, kÄdu daļu produkta tas veido. MÄs arÄ« nedomÄjÄm, vai API ir kaut kas svarÄ«gs, vai ir nepiecieÅ”ams saglabÄt atpakaļsavienojamÄ«bu pirmajiem klientiem. Uz kÄdu laiku API lietotÄju skaits bija apmÄram 5% no kopÄjÄ nelielÄ skaita, un to neievÄroja. LaikÄ, kad tika izstrÄdÄta universÄla filtrÄÅ”ana, mÄs kļuvÄm par backend risinÄjumu. Å Ä« filtrÄÅ”ana nebija gluži GraphQL, bet kaut kas lÄ«dzÄ«gs ā tÄ strÄdÄja ar neskaitÄmiem pieprasÄ«juma parametriem. Ar tik jaudÄ«gu rÄ«ku lietotÄjiem bija grÅ«ti atturÄties, un viÅi pÄrsÅ«tÄ«ja pieprasÄ«jumus tieÅ”i no saviem interneta veikaliem. SituÄcija kļuva nepatÄ«kams pÄrsteigums, jo Å”Ädas pakalpojuma sniegÅ”ana prasa citu cenu nospiedumu un vispÄr citu izpratni par API kÄ produktu.
- TÄ kÄ API attÄ«stÄ«jÄs nevis kÄ galvenais produkts, dokumentÄcija par API tika izstrÄdÄta un publicÄta pÄc atlikumu principa ā caur reverso inženieriju. Å Äds ceļŔ Ŕķiet pietiekami vienkÄrÅ”s un Ärts, bet tas ir pretrunÄ lÄ«guma izpildei. Tas ir tad, kad ir kÄda sastÄvdaļa ar iepriekÅ” noteiktu darba shÄmu. IzstrÄdÄtÄjs to Ä«steno saskaÅÄ ar Å”o shÄmu un uzdevumu, sastÄvdaļa iziet testÄÅ”anu, klients saÅem produktu, kas atbilst analÄ«tiÄ·a iecerei. ReversÄ inženierija tomÄr tirgÅ« izmet produktu, kas vienkÄrÅ”i ir: ar risinÄjumiem uz balstiem, dÄ«vainiem risinÄjumiem un velosipÄdiem, nevis nepiecieÅ”amo funkcionalitÄti.
- Visu pieprasÄ«jumu plÅ«smu, kas nÄca caur API, varÄja analizÄt ne vairÄk kÄ kÄ Nginx vai lietojumprogrammas servera žurnÄlu. Tas neļÄva izcelt priekÅ”metu jomas, vienÄ«gi sadalÄ«t pÄc lietotÄjiem un abonentiem. Ja nav iespÄju regulÄt pieteikuma vai klientu reÄ£istrÄciju, situÄciju analizÄt kļūst neiespÄjami. Å Ä« problÄma mazÄk ietekmÄja API attÄ«stÄ«bu, tÄ vairÄk attiecÄs uz izpratni par tÄ pieprasÄ«jumu un funkcionalitÄti.
OtrÄ mÄÄ£inÄjuma: REST API
2010. gadÄ mÄs mÄÄ£inÄjÄm izveidot apmaiÅas sistÄmu ar tieÅ”saistes grÄmatvedÄ«bu ā BuxSoft. NeizdevÄs. TaÄu integrÄcijas procesÄ parÄdÄ«jÄs pilnvÄrtÄ«gs API: REST pakalpojums apmaiÅai, kurÄ nevÄlÄjÄmies izmantot brÄ«vÄ«bu, piemÄram, RPC izsaukumiem. Visa komunikÄcija ar API tika samazinÄta lÄ«dz standarta REST režīmam: pieprasÄ«juma rindÄ ir entitÄtes nosaukums, bet operÄcija, kas ar to tiek veikta, tiek noteikta, izmantojot http metodi. MÄs pievienojÄm filtrÄÅ”anu pÄc entitÄÅ”u atjaunoÅ”anas brīža, un lietotÄjiem radÄs iespÄja veidot replikÄciju ar savÄm sistÄmÄm.
TajÄ paÅ”Ä gadÄ tika izveidots API krÄjumu un preÄu atlikumu eksportam. LietotÄjiem caur API kļuva pieejamas visvÄrtÄ«gÄkÄs sistÄmas daļas ā sÄkotnÄjo dokumentu apmaiÅa un aprÄÄ·inu dati par atlikumiem un preÄu paÅ”izmaksu.
2015. gada decembrÄ« RetailCRM publicÄja pirmo treÅ”o puÅ”u bibliotÄku piekļuvei mÅ«su API. To sÄka diezgan aktÄ«vi izmantot, un tajÄ paÅ”Ä laikÄ auga pakalpojuma popularitÄte, slodze uz API pieauga ÄtrÄk nekÄ slodze uz tÄ«mekļa interfeisu. Reiz augums pÄrvÄrtÄs par slodzes pieaugumu.


Un Å”is pieaugums, uz kuru norÄda bultiÅa pa kreisi, izbrÄ«nÄ«ja serveri, kas apkalpo mÅ«su API. MÄs nedÄļu izpÄtÄ«jÄm, kÄdu slodzi tÄ Ä£enerÄ. IzrÄdÄ«jÄs, ka tie ir tie paÅ”i pieprasÄ«jumi, kas tiek nosÅ«tÄ«ti uz mÅ«su API no klientu frontiem. To visu radÄ«ja apmÄram 50 klienti. TieÅ”i tad mÄs sapratÄm vienu no savÄm kļūdÄm ā pilnÄ«gu limitu trÅ«kumu.
Galu galÄ mÄs ieviesÄm ierobežojumu uz vienlaicÄ«gu pieprasÄ«jumu skaitu. No viena konta tagad varÄja vienlaikus atvÄrt ne vairÄk kÄ divus pieprasÄ«jumus. Tas bija pietiekami, lai strÄdÄtu replikÄcijas režīmÄ datu apmaiÅai pakotÅu režīmÄ. Bet tie, kas vÄlÄjÄs izmantot mÅ«s kÄ aizmuguri, no Ŕī brīža bija spiesti labÄk atbilst tarifiem, jo āāieviesa savÄs programmÄs darbu ar vairÄkiem kontiem.
Uzlabojam
Jau kopÅ” 2014. gada pieprasÄ«jums pÄc esoÅ”Ä API ir kļuvis par svarÄ«gu biznesa daļu, un pats API Ä£enerÄja vislielÄko datu apjomu datu apmaiÅÄ ar klientiem. 2015. gadÄ mÄs uzsÄkÄm projektu API sakÄrtoÅ”anai. MÄs izvÄlÄjÄmies JSON formÄtu, nevis XML, un sÄkÄm to izstrÄdÄt, Åemot vÄrÄ iepriekÅ”ÄjÄs versijas realizÄcijas laikÄ atklÄtÄs Ä«patnÄ«bas:
- IespÄja pÄrvaldÄ«t versijas. Versiju pÄrvaldÄ«ba ļauj izstrÄdÄt jaunu versiju, nepÄrtraucot esoÅ”o lietojumprogrammu un netraucÄjot lietotÄju darbu.
- IespÄja lietotÄjam redzÄt metadatus tieÅ”i atbildÄ, ko viÅÅ” saÅem.
- IespÄja apmainÄ«ties ar lieliem dokumentiem. Ja mÄs apstrÄdÄjam dokumentu ar vairÄk nekÄ 4-5 tÅ«kstoÅ”iem pozÄ«ciju, tas kļūst par problÄmu serverim: gara transakcija, garÅ” http pieprasÄ«jums. Esam izveidojuÅ”i Ä«paÅ”u mehÄnismu, kas ļauj atjauninÄt dokumentu pa daļÄm un pÄrvaldÄ«t atseviŔķÄs Ŕī dokumenta pozÄ«cijas, nosÅ«tot tÄs uz serveri.
- ReplikÄcijas rÄ«ki ā tie bija arÄ« iepriekÅ”ÄjÄ versijÄ.
- NoslÄgtie slodzes ierobežojumi ā kÄ mantojums no grÄbekļiem, uz kuriem uzkÄpa iepriekÅ”ÄjÄ versijÄ. IeviesÄm ierobežojumus pieprasÄ«jumu skaitam laika posmÄ, paralÄlo pieprasÄ«jumu skaitam un pieprasÄ«jumiem no viena ip adrese.
No tÄ brīža esam izlaidusi divas mazÄs API versijas un palaiduÅ”i vairÄkas specializÄtas API, taÄu kopumÄ pieeja palikusi nemainÄ«ga. Atjaunotais apmaiÅas formÄts un jaunÄ arhitektÅ«ra ļÄva labot trÅ«kumus API daudz ÄtrÄk.
MansKrÄjums API Å”odien
Å odien MansKrÄjums API risina daudz uzdevumu:
- datu apmaiÅa ar interneta veikaliem, uzskaites sistÄmÄm, bankÄm;
- aprÄÄ·inu datu, ziÅojumu saÅemÅ”ana;
- izmantoÅ”ana kÄ aizmugures daļa klientu lietojumprogrammÄm ā mÅ«su mobilÄs lietojumprogrammas un darbvirsmas kases strÄdÄ caur API
- paziÅojumu sÅ«tīŔana par datu izmaiÅÄm MansKrÄjumÄ ā webhooks;
- telefoni;
- lojalitÄtes sistÄmas.
Balstoties uz API, mÅ«su Ä£enerÄldirektors Askars Rahimberdijevs Äetru stundu laikÄ uzrakstÄ«ja telegram botu, kas iegÅ«st atlikumus caur API:
Tagad sausie cipari.
Lūk, mūsu statistika par veco REST API:
- 400 uzÅÄmumu;
- 600 lietotÄju;
- 2 miljoni pieprasÄ«jumu dienÄ;
- 200 Gb/dienÄ izejoÅ”Ä trafika.
Un Å”eit ir tas, ko mÄs sasniedzÄm visos MansKrÄjums API:
- vairÄk nekÄ 70 integrÄciju (daļu no tÄm var skatÄ«t Å”eit );
- 8500 uzÅÄmumu;
- 12 000 lietotÄju;
- 46 miljoni pieprasÄ«jumu dienÄ;
- 2 Tb/dienÄ izejoÅ”Ä trafika.
Kas notiek tÄlÄk
API attÄ«stÄ«bas plÄni Å”obrÄ«d ir aktÄ«vÄ apspriedÄ. MÄs cenÅ”amies Åemt vÄrÄ lietotÄju sniegto ekspluatÄcijas pieredzi. Ne vienmÄr un ne visu var izdarÄ«t uzreiz, bet jauna API versija ar ÄrtÄkiem metadatiem un vienkÄrÅ”Äku struktÅ«ru, kÄ arÄ« OAuth autentifikÄcijai un API tiem, kas integrÄjas lietotÅu interfeisÄ, ir tuvu.
Sekot jaunumiem var speciÄlÄ mÄjaslapÄ, kas paredzÄta integrÄciju izstrÄdÄtÄjiem ar MoimSklad: .
Avots: habr.com
