MinuSkaapi Esimene API ilmus 10 aastat tagasi. Kogu selle aja oleme töötanud olemasolevate API versioonide kallal ja arendanud uusi. Ja mitmed API versioonid on juba suutnud maetud.
Selles artiklis on palju erinevaid teemasid: kuidas API loodi, miks see on vajalik pilveteenusele, mida see kasutajatele annab, milliseid takistusi oleme kohanud ja mida soovime tulevikus teha.
Minu nimi on Oleg Aleksejev , olen tehniline direktor ja MeieSkaapi kaasasutaja.
Miks luua API teenusele
Meie kliendid, kelleks on kĂŒmned tuhanded ettevĂ”tjad, kasutavad aktiivselt pilvelahendusi: pangandust, internetipoode, kaubanduse arvestust, CRM. Kui oled ĂŒhendanud ĂŒhe â on juba raske peatuda. Ja nĂŒĂŒd teeb juba viies, kaheksas, kĂŒmnes teenus ettevĂ”tja töö lihtsamaks, kuid andmeid nende pilveteenuste vahel peavad kasutajad kĂ€sitsi edastama. Töö muutub Ă”udusunenĂ€oks.
Ilmselge lahendus on anda kasutajatele vĂ”imalus edastada andmeid pilveteenuste vahel. NĂ€iteks importida ja eksportida andmeid failidena, mille saab seejĂ€rel vajalikku teenusesse ĂŒles laadida. Failide tavaliselt muudetakse iga teenuse formaadi jĂ€rgi. See on enam-vĂ€hem lihtne kĂ€sitsitöö, kuid teenuste arvu kasvades muutub selle tegemine jĂ€rjest keerulisemaks.
SeetĂ”ttu on jĂ€rgmine samm â API. Sellega vĂ”idab pilveteenus sellest, et ĂŒhendab mitmeid teenuseid ĂŒhes punktis. Sellise ökosĂŒsteemi tekkimine tĂ”mbab uusi kliente tĂ€nu tĂ€iendavatele vĂ”imalustele. Toode koos uue funktsionaalsusega muutub kasulikuks ja atraktiivsemaks.
Kui luua omaenda programmiliideseid, siis meelitab see mĂ”ningaid mĂŒĂŒgiinimesi, nagu programmeerijad, kes tunnevad teie toodet API kaudu. Nad hakkavad ehitama lahendusi pakkuda saadud API pĂ”hjal ja teenivad raha oma klientide ĂŒlesannete automatiseerimisel.
MeieSkaapi arvestussĂŒsteem pĂ”hineb lihtsatel protsessidel. Peamine on töötada esmase dokumentatsiooniga, vĂ”imalus kaupade vastuvĂ”tmine ja vĂ€ljastamine, saada Ă€ri jaoks aruandeid algdokumentide pĂ”hjal. Samuti on olemas andmete edastamine, nĂ€iteks pilve raamatupidamisse, ja nende saamine pankade sĂŒsteemidest vĂ”i jaepoodidest. Samuti tegeleme internetipoodidega: saame teavet kaupade kohta ja edastame andmeid jÀÀkide kohta.

MinuSLA API
10 aasta jooksul, mil MinuSLA on API-d kasutanud, oleme arendanud mitmeid integreerimisi, mis vÔimaldavad andmeid vahetada, töötada pankadega, teostada makseid ja kasutada vÀliseid telefoniteenuseid.
Esimese aasta jooksul lisasime vÔimaluse eksportida andmeid mis tahes formaadis XML. Toona oli kasutajatel palju lihtsam ja tuttavam hoida andmeid offline, mitte kuskil pilves, ja meie andsime neile selle vÔimaluse. Ekspordiprotsess kÀivitus kÀsitsi eksportimise kaudu kasutajaliidest. Seega ei saanud me seda veel API-ks nimetada.
Sel ajal alustasime koostööd Rusagro-ga â nad kasutasid juba tĂ€isfunktsionaalset ERP-d tootmise ja mĂŒĂŒgi planeerimiseks, kuid vagunite koormamine tehastes automatiseeriti MinuSLA-s. Nii tekkisid meil esimesed tĂ”elise API alged: andmevahetus meie teenuse ja ERP vahel toimus suurte andmefailide saatmise kaudu, mis sisaldas kĂ”igi dokumenditĂŒĂŒpide andmeid.
See oli hea lahendus andmete pakkide vahetamiseks, kuid koos dokumentidega tuli edastada ka nende sĂ”ltuvused: teave kaupade, klientide ja ladude kohta. Sellist kooslust on eksportimisel lihtne genereerida, kuid impordil on seda ĂŒsna keeruline lĂ”hkuda, kuna ĂŒhes paketis saabub kogu teave: nii uute dokumentide kui ka juba olemasolevate kohta.
Esimene XML API ei elanud kaua â kahe aasta pĂ€rast hakkasime seda ĂŒmber ehitama. Juba API kĂ€ivitamise alguses tegime mitmeid vigu programmeerimisliidese loomisel.

Nii loodi XML API: ĂŒks meie arhitektide illustratsioon. Muide, oodake tema artikleid.
Siin on meie peamised vead:
- JAXB mĂ€rgistus tehti otse entity beans'idele. Andmebaasiga suhtlemiseks kasutame Hibernate'i ja sama mĂ€rgistus tehti ka nendele bıinidele. See viga ilmnes peaaegu kohe: iga andmestruktuuri vĂ€rskendus tĂ”i kaasa vajaduse kiiresti teavitada kĂ”iki, kes API-d kasutavad, vĂ”i ehitada ajutisi lahendusi, mis tagaksid ĂŒhilduvuse eelmise andmestruktuuriga.
- API kasvas vĂ€lja kui mingi lisand, ja algselt me ei mÀÀratlenud, millise osa toote sellest moodustab. Me ei mĂ”elnud ka sellele, kas API on midagi olulist, kas esimeste klientide jaoks tuleb tagada tagurpidi ĂŒhilduvus. Mingil hetkel oli API kasutajate arv umbes 5% kogu vĂ€ikesest koguarvust, ja neile ei pöördutud tĂ€helepanu. Koostatud ĂŒldine filtreerimine viis selleni, et meid hakati kasutama tagaplaanina. See filtreerimine ei olnud tĂ€pselt GraphQL, vaid midagi sarnast â töötas lĂ€bi tohutu hulga pĂ€ringuparameterite. Sellise vĂ”imsa tööriistaga oli kasutajatel raske vastu pidada, ja meie juurde suunati pĂ€ringud otse nende e-poodide UI-st. Situatsioon osutus ebameeldivaks ĂŒllatuseks, kuna sellise teenuse pakkumine peaks nĂ”udma teistsugust hinnakujundust ja hoopis teistsugust arusaama API-st kui tootest.
- Kuna API arenes mitte kui peamine toode, siis API dokumentatsiooni koostamine ja avaldamine toimus allesjÀÀvate ressursside kaudu â pöördprojekteerimise teel. See lĂ€henemine nĂ€ib olevat piisavalt lihtne ja mugav, kuid on vastuolus lepingu alusel töötamisega. See on siis, kui on mingi komponent eelpandud tööschemas. Arendaja rakendab selle vastavalt sellele schema'le ja ĂŒlesandele, komponent lĂ€bib testimise, klient saab toote, mis vastab analĂŒĂŒtiku kavandile. Pöördprojekteerimine aga paiskab turule toote, mis lihtsalt eksisteerib: lahendustega, kummaliste otsustega ja jalgratastega vajaliku funktsionaalsuse asemel.
- Kogu pĂ€ringute voogu, mis tuli lĂ€bi API, sai analĂŒĂŒsida mitte rohkem kui Nginx'i vĂ”i rakendusserveri logina. See ei vĂ”imaldanud teemaalasid vĂ€lja selgitada, vĂ€lja arvatud kasutajate ja tellijate kaupa jagada. Kui pole vĂ”imalik reguleerida rakenduse vĂ”i klientide registreerimist, muutub olukorra analĂŒĂŒsimine vĂ”imatuks. See probleem mĂ”jutas API arendamist kĂ”ige vĂ€hem, see puudutab rohkem arusaamist selle nĂ”udlusest ja funktsionaalsete vĂ”imaluste tĂ€itmisest.
Katse number kaks: REST API
2010. aastal pĂŒĂŒdsime luua online-raamatupidamise sĂŒsteemi, mille nimeks oli BuhSoft. See ei Ă”nnestunud. KĂŒll aga tekis integreerimise kĂ€igus tĂ€isvÀÀrtuslik API: REST-teenus, kus ei olnud selliseid kĂ”rvalekaldeid nagu RPC-kĂ”nede tegemine. Kogu suhtlemine API-ga viidi standardsele REST-reĆŸiimile: pĂ€ringute viisis on toodud entiteedi nimi ja toiming, mida sellega tehakse, mÀÀratakse http-meetodi abil. Lisatud said olemasolu uuendamise filtreerimine ning kasutajatele tekkis vĂ”imalus replikatsiooni ehitada oma sĂŒsteemidega.
Samas aastal ilmus API, mis vĂ”imaldas laoseisu ja toodete jÀÀke eksportida. Kasutajatele said API kaudu kergesti kĂ€tte sĂŒsteemi kĂ”ige vÀÀrtuslikumad osad â esialgsete dokumentide vahetus ja arvutustooted jÀÀkide ja kaupade enda hindade kohta.
Detsembris 2015 avaldas RetailCRM esimese kolmanda osapoole teegi meie API-le ligipÀÀsuks. Seda hakati ĂŒsna aktiivselt kasutama, samal ajal kasvas ka teenuse populaarsus; koormus API-le suurenes kiiremini kui veebiliidese koormus. Ăks kord muutus kasv tĂ”usuks.


Ja see tĂ”us, millega vasak pool nĂ€itab noolt, pĂ”hjustas tĂ€ielikku ĂŒllatust serveris, mis teenindab meie API-d. NĂ€dala jooksul uurisime, mis tegelikult seda koormust genereeris. Selgus, et need olid just need pĂ€ringud, mis saadeti meie API-le klientide frontidest. KĂ”ike neelas umbes 50 klienti. Siin saime aru ĂŒhest meie veast - tĂ€ielik piirangute puudumine.
KokkuvĂ”ttes kehtestasime piiri samaaegsete pĂ€ringute arvule. Ăhest kontost vĂ”is korraga avada mitte rohkem kui kaks pĂ€ringut. See piisab replikatsiooni reĆŸiimis töötamiseks andmete vahetamisel paketi reĆŸiimis. Need, kes soovisid meid kasutada tagaplaanina, pidid alates sellest hetkest rohkem vastama hindadele, kuna nad lĂŒlitasid oma tarkvaradesse töö mitme konto kaudu.
Viime korda korda
Juba 2014. aastast alates on olemasoleva API nÔudlus muutunud osa meie Àritegevusest, samas genereerib API suurima andmemahtu klientidega andmete vahetamisel. 2015. aastal alustasime projekti API korrastamiseks. Valisime formaadiks JSON, mitte XML ning hakkasime seda ehitama eelnevalt avastatud omaduste pÔhjal:
- Versioonide haldamise vÔimalus. Versioonimine vÔimaldab vÀlja töötada uue versiooni, mÔjutamata olemasolevat rakendust ja rikkumata kasutajate tööd.
- Kasutaja vÔimalus nÀha vastuses metainfot, mida ta saab.
- Suure dokumentide vahetuse vÔimalus. Kui töötleme dokumenti, kus on rohkem kui 4-5 tuhat positsiooni, saab see serverile probleemiks: pikk tehing, pikk http-pÀring. Oleme loonud spetsiaalse mehhanismi, mis vÔimaldab dokumenti uuendada osade kaupa ja hallata selle dokumendi eraldiseisvaid positsioone, saates need serverisse.
- Replikatsioonivahendid â olid ka eelmisest versioonist.
- Koormuse piirangud â kui jÀÀnus eelmisest versioonist. Sisse viidud piirangud pĂ€ringute arvu osas ajavahemiku jooksul, samaaegsete pĂ€ringute arvu ja pĂ€ringute arvu ĂŒhe ip-aadressi pealt.
Sellest ajast oleme vĂ€lja lasknud kaks vĂ€ikest versiooni API-st ja kĂ€ivitanud mitu spetsialiseeritud API-d, kuid ĂŒldine lĂ€henemine on jÀÀnud muutumatuks. Uuendatud andmevahetuse formaat ja uus arhitehtuuri vĂ”imaldasid API nĂ”rkusi palju kiiremini parandada.
MinuLaod API tÀna
TĂ€na lahendab MinuLaod API palju ĂŒlesandeid:
- andmete vahetamine veebipoodidega, raamatupidamissĂŒsteemidega, pankadega;
- arvutuste, raportite saamine;
- kasutamine kliendirakenduste tagaplaanina â meie mobiilrakendused ja töölauakassa töötavad API kaudu
- andmete muudatused MinuLaos â webhooks;
- telefoniteenused;
- loyalty-sĂŒsteemid.
API pÔhjal kirjutas meie peadirektor Askar Rahimberdiev nelja tunni jooksul telegrammi-boti, mis tÔmbab API kaudu jÀÀke:
NĂŒĂŒd kuivad numbrid.
Siin on meie statistika vanast REST API-st:
- 400 ettevÔtet;
- 600 kasutajat;
- 2 miljonit pÀringut pÀevas;
- 200 GB/pÀevas vÀljaminevat liiklust.
Ja siin on, kuhu me jÔudsime kÔikide MinuLaod API-dega:
- ĂŒle 70 integratsiooni (osa neist on vĂ”imalik vaadata siin );
- 8500 ettevÔtet;
- 12 000 kasutajat;
- 46 miljonit pÀringut pÀevas;
- 2 TB/pÀevas vÀljaminevat liiklust.
Mis edasi
API arenduskava on aktiivses arutelus. PĂŒĂŒame arvesse vĂ”tta kasutajate antud kogemusi. Mitte alati ei Ă”nnestu kĂ”ike kohe teha, kuid uus API versioon, mis hĂ”lmab mugavamaid metaandmeid ja vĂ€hem keerulist struktuuri, OAuth autentimiseks, ja API rakenduste liidestamiseks, on juba lĂ€hedal.
Uudiste jĂ€lgimiseks kĂŒlastage spetsiaalset arendajate lehte, mis on seotud MinuLadu integratsioonidega: .
Allikas: habr.com
