{"id":34354,"date":"2019-10-31T21:57:51","date_gmt":"2019-10-31T18:57:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/pisali-api-porvali-xml-dva\/"},"modified":"2019-10-31T21:57:51","modified_gmt":"2019-10-31T18:57:51","slug":"pisali-api-porvali-xml-dva","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","title":{"rendered":"Kirjutasime API - reastasime XML (kaks)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>MinuS\u00fcsteemi esimene API ilmus 10 aastat tagasi. Kogu selle aja oleme t\u00f6\u00f6tanud olemasolevate API versioonide kallal ning arendame uusi. Ja m\u00f5ned API versioonid on juba suutnud l\u00f5petada oma elu. <\/p>\n<p>Selles artiklis on palju teavet: kuidas API loodi, miks see on pilveteenusele vajalik, mida see kasutajatele annab, milliseid takistusi oleme kohanud ja mida tahame tulevikus teha. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMinu nimi on Oleg Alekseev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/oalexeev\/\" class=\"user_link\">oalexeev<\/a><\/noindex>, olen minuS\u00fcsteemi tehniline direktor ja kaasasutaja. <\/p>\n<h2>Miks luua teenuse jaoks API<\/h2>\n<p>\nMeie kliendid, keda on k\u00fcmneid tuhandeid ettev\u00f5tjaid, kasutavad aktiivselt pilvelahendusi: pankade teenuseid, veebipoode, kaupade arvestust, CRM-i. Kui oled \u00fchega liitunud \u2014 on raske peatuda. Ja juba viies, kaheksas, k\u00fcmnes teenus muudab ettev\u00f5tjate t\u00f6\u00f6 lihtsamaks, kuid andmeid nende pilveteenuste vahel kannavad kasutajad k\u00e4sitsi. T\u00f6\u00f6 muutub \u00f5udusunen\u00e4oks.<\/p>\n<p>Ilmselt on parim lahendus anda kasutajatele v\u00f5imalus andmeid voogesitada erinevate pilveteenuste vahel. N\u00e4iteks importida ja eksportida andmeid failidena, mida saab seej\u00e4rel vajalikku teenusesse laadida. Failid kohandatakse tavaliselt iga teenuse formaadi j\u00e4rgi. See on enam-v\u00e4hem lihtne k\u00e4sit\u00f6\u00f6, kuid teenuste arvu suurenedes muutub selle teostamine \u00fcha keerulisemaks.<\/p>\n<p>Seet\u00f5ttu on j\u00e4rgmine samm API. Sellega saavuta pilveteenus kasu, sidudes mitu teenust \u00fchte punkti. Sellise \u00f6kos\u00fcsteemi tekkimine t\u00f5mbab uusi kliente, pakkudes lisav\u00f5imalusi. Uue funktsionaalsusega toode muutub kasumlikumaks ja kasulikumaks.<\/p>\n<p>Kui luua oma tarkvaraliideseid, meelitab see v\u00e4lim\u00fc\u00fcjaid huvitavateks programmeerijateks, kes tunnevad teie toodet API abil. Nad hakkavad looma lahendusi pakkuda API baasil ja teenivad raha oma klientide \u00fclesannete automatiseerimisega.<\/p>\n<p>MinuLaadi arvestuss\u00fcsteem p\u00f5hineb lihtsates protsessides. Peamine on t\u00f6\u00f6tada esmase dokumentatsiooniga, v\u00f5imalus kaupade vastuv\u00f5tmiseks ja v\u00e4ljastamiseks, samuti saada esmaseid andmeid \u00e4riaruannete koostamiseks. Samuti toetame andmete edastamist, n\u00e4iteks pilvep\u00f5hisesse raamatupidamisse, ja andmete saamist pangas\u00fcsteemidelt v\u00f5i jaem\u00fc\u00fcgipunktidelt. Veelgi enam, me teeme koost\u00f6\u00f6d veebipoed: saame teavet toodete kohta ja edastame andmeid varude kohta.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutasime API - reastasime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/aefa36019217c463d2a513a9e025ebc7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>MinuLaadi esimene API<\/h2>\n<p>\nMinuLaadi API 10 aasta jooksul oleme meie saanud mitmesuguseid integraatioone, mis v\u00f5imaldavad andmeid vahetada, t\u00f6\u00f6tada pankadega, teha makseid ja kasutada v\u00e4list telefoni.<\/p>\n<p>Esimesel aastal andsime kasutajatele v\u00f5imaluse eksportida k\u00f5ik andmed XML-formaadis. Sel ajal oli kasutajatele palju arusaadavam ja mugavam hoida andmeid offline, mitte mingis pilves, ja me andsime neile just selle v\u00f5imaluse. Ekspordi k\u00e4ivitamine toimus kasutajaliidese kaudu k\u00e4sitsi eksportimise kaudu. Seega ei saanud API-d veel nii nimetada. <\/p>\n<p>Siis alustasime koost\u00f6\u00f6d Rusagroga \u2013 nad kasutasid juba \u2018t\u00e4iskasvanud\u2019 ERP-d tootmise ja m\u00fc\u00fcgi planeerimiseks, samas kui vagunite laadimist tehasetes automatiseeriti Moeskladis. Nii said meil alguse esimesed t\u00f5elise API jooned: vahetus meie teenuse ja ERP vahel toimus suurte andmefailide saatmise teel, mis sisaldasid k\u00f5iki dokumendit\u00fc\u00fcpe. <\/p>\n<p>See on \u00fcsna hea variant andmete paketivahetuseks, kuid koos dokumentidega tuli edastada ka nende s\u00f5ltuvused: teave kaupade, partnerite ja ladude kohta. Sellist segadust on lihtne genereerida eksportimisel, kuid \u00fcsna keeruline importimisel lahti harutada, kuna \u00fches paketis tuleb kogu teave: nii uute dokumentide kui ka juba olemasolevate kohta.<\/p>\n<p>Esimene XML API ei kestnud kauaks \u2013 kahe aasta p\u00e4rast alustasime selle \u00fcmberkujundamist. Juba selle t\u00f6\u00f6 alguses tegime m\u00f5ned vead liidese ehitamisel.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutasime API - reastasime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/3f1b04d030e7fcb5add795f8fd75d92b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kuidas XML API loodi: illustratsioon meie arhitektidelt. Muide, oodake tema artikleid.<\/i><\/p>\n<p>Siin on meie peamised vead:<\/p>\n<ol>\n<li>JAXB m\u00e4rgendus tehti otse entity beans'itele. Andmebaasiga suhtlemiseks kasutame Hibernate'i, ning need samad bean'id said JAXB m\u00e4rgenduse. See viga ilmus peaaegu kohe: iga andmestruktuuri uuendus n\u00f5udis kiiret teavitamist k\u00f5igilt, kes kasutavad API-d, v\u00f5i tuli luua ajutisi lahendusi, mis tagaksid \u00fchilduvuse vana andmestruktuuriga.<\/li>\n<li>API areneb sammuks, mille me algselt ei m\u00e4\u00e4ratlenud, kui suur osa tootest see on. Me ei m\u00f5elnud ka sellele, kas API on midagi olulist ja kas varasematele klientidele tagasip\u00f6\u00f6rdumisena t\u00e4htsust tuleks toetada. Teatud hetkel oli API kasutajaid umbes 5% kogu v\u00e4ikesest kasutajaskonnast ja neid ignoreeriti. Aja jooksul loodud universaalne filtreerimine viis selleni, et meid hakati kasutama tagaplaanina. See filtreerimine ei olnud sugugi GraphQL, vaid midagi sarnast \u2014 see t\u00f6\u00f6tas lugematute p\u00e4ringuparametrite kaudu. Sellise v\u00f5imsa t\u00f6\u00f6riista t\u00f5ttu oli kasutajatel raske loobuda ning meie suunas suunati p\u00e4ringud niiv\u00f5rd, et need saadeti otse nende e-poe kasutajaliidestest. See olukord osutus ebameeldivaks \u00fcllatuseks, kuna sellise teenuse pakkumine n\u00f5uab teistsugust hinnakujundust ja teistsugust arusaama API-st kui tootest.<\/li>\n<li>Kuna API arenes mitte p\u00f5hitoote, vaid k\u00f5rvaltoodetena, siis API dokumentatsioon loodi ja avaldati peamiselt tagasitehnoloogia kaudu. See l\u00e4henemine v\u00f5ib tunduda lihtne ja mugav, kuid see on vastuolus lepingulise t\u00f6\u00f6ga. Ehk on mingisugune komponent, millel on eelnevalt m\u00e4\u00e4ratud toimimisviis. Arendaja rakendab selle vastavalt sellele skeemile ja \u00fclesandele, komponent l\u00e4heb testimisele, klient saab toote, mis vastab anal\u00fc\u00fctiku kavatsusele. Tagasitehnoloogia seevastu turule toodab lihtsalt olemasoleva toote: toote, mis sisaldab ajutisi lahendusi, kummalisi otsuseid ja jalgrattaid vajaliku funktsionaalsuse asemel. <\/li>\n<li>Kogu API kaudu saadud p\u00e4ringute voogu sai anal\u00fc\u00fcsida vaid Nginx'i v\u00f5i rakendusserveri logide kaupa. See ei v\u00f5imaldanud teemasid eristada, v\u00e4lja arvatud kasutajate ja tellijate l\u00f5ikes jagades. Kui rakenduse v\u00f5i klientide registri reguleerimiseks v\u00f5imalusi pole, muutub olukorra anal\u00fc\u00fcsimine v\u00f5imatuks. See probleem m\u00f5jutas API arengut minimaalset, pigem on see seotud selle n\u00f5udlikkuse ja funktsionaalsuse arusaamisega.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Teine katse: REST API<\/h2>\n<p>\n2010. aastal proovime ehitada s\u00fcsteemi, et vahetada online-raamatupidamisega \u2014 Buhsoftiga. See ei \u00f5nnestunud. Kuid integreerimise k\u00e4igus tekkis t\u00e4ie\u00f5iguslik API: REST-teenuse vahetus, kus puudusid vabadused, nagu RPC-k\u00f5nede vormistamine operatsioonide juurde. Koost\u00f6\u00f6 API-ga viidi standardseks REST-re\u017eiimiks: p\u00e4ringureas on olemas \u00fcksuse nimi, ja operatsioon, mida sellel teostatakse, m\u00e4\u00e4ratakse HTTP-meetodi abil. Lisame filtreerimise vastavalt \u00fcksuste uuendusmomendile, ja kasutajatele avanes v\u00f5imalus ehitada replikatsioon oma s\u00fcsteemidega.<\/p>\n<p>Samas aastal ilmus API lao- ja kaubaj\u00e4\u00e4kide eksportimiseks. Kasutajatele avanesid l\u00e4bi API s\u00fcsteemi k\u00f5ige v\u00e4\u00e4rtuslikumad osad \u2014 esmaste dokumentide vahetamine ja arvestusandmed kaubaj\u00e4\u00e4kide ja toodete iseloomu kohta.<\/p>\n<p>2015. aasta detsembris avaldas RetailCRM meie API-le esimese kolmandate osapoolte teegi. Seda hakati \u00fcsna aktiivselt kasutama ning teenuse populaarsus kasvas \u00fcldiselt kiiremini kui koormus veebiliidesele. \u00dchel hetkest kasvas koormus h\u00fcppeliselt. <\/p>\n<p><img decoding=\"async\" alt=\"Kirjutasime API - reastasime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/86b289455db8a13f5583cd4eeb377970.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kirjutasime API - reastasime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/da221a6a122ff6d15bcbf9ea09758727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa see h\u00fcpe, millele vasakul nool osutab, j\u00e4ttis meie API teenindava serveri t\u00e4ielikku h\u00e4mmeldusse. Meie tegelesime n\u00e4dal aega selle koormuse p\u00f5hjuse v\u00e4ljaselgitamisega. Selgus, et need olid just need p\u00e4ringud, mis saadeti meie API-le klientide frontidest. K\u00f5ik selle koormuse tekitavad umbes 50 klienti. Siinkohal m\u00f5istsime \u00fche oma vea \u2014 t\u00e4ieliku piirangute puudumise. <\/p>\n<p>Seel\u00e4bi paigaldasime piirangud samaaegsete p\u00e4ringute arvule. \u00dche konto alt on n\u00fc\u00fcd lubatud avada korraga mitte rohkem kui kaks p\u00e4ringut. See on piisav replikatsioonire\u017eiimis t\u00f6\u00f6tamiseks andmevahetuses partiire\u017eiimis. Need, kes soovisid meid kasutada tagaplaanina, pidid n\u00fc\u00fcd rohkem arvestama hindadega, kuna nende tarkvaras tuli sisse v\u00f5tta mitme konto haldus.<\/p>\n<h2>Korra seadmine<\/h2>\n<p>\nAlates 2014. aastast on olemasoleva API n\u00f5udmine saanud olulise osa meie tegevusest ning see API genereeris andmevahetuses klientidega suurima andmemahtu. 2015. aastal k\u00e4ivitasime projekti API korrastamiseks. Valisime vorminguks JSON, mitte XML, ja alustasime selle koostamist varasema versiooni rakendamisel tuvastatud omaduste p\u00f5hjal:<\/p>\n<ol>\n<li>Versioonihalduse v\u00f5imalus. Versioonimine v\u00f5imaldab arendada uut versiooni, m\u00f5jutamata olemasolevat rakendust ega rikkudes kasutajate t\u00f6\u00f6d. <\/li>\n<li>Kasutaja v\u00f5imalus n\u00e4ha metaandmeid otse vastuses, mille ta saab.<\/li>\n<li>Suured dokumentide vahetamise v\u00f5imalused. Kui t\u00f6\u00f6tleme dokumente, millel on rohkem kui 4-5 tuhat \u00fcksust, tekib serverile probleem: pikk tehing, pikk HTTP-p\u00e4ring. Oleme loonud spetsiaalse mehhanismi, mis v\u00f5imaldab dokumenti osade kaupa uuendada ja hallata selle dokumenti \u00fcksikute positsioonide saatmist serverisse.<\/li>\n<li>Replikatsiooni t\u00f6\u00f6riistad \u2014 need olid ka eelnevas versioonis.<\/li>\n<li>Kohandamise piirangud \u2014 nagu eelnevas versioonis meid \u00fcllatanud takistused. Oleme kehtestanud piirangud p\u00e4ringute arvu kohta aja jooksul, samaaegsete p\u00e4ringute arvu ja \u00fche IP-aadressi p\u00e4ringute kohta.<\/li>\n<\/ol>\n<p>\nSellest ajast oleme v\u00e4lja lasknud kaks v\u00e4ikest API versiooni ja lansseerinud mitu spetsialiseeritud API-d, kuid \u00fcldine l\u00e4henemine on j\u00e4\u00e4nud muutumatuks. Uuendatud vahetusformaadid ja uus arhitektuur on v\u00f5imaldanud API vigu kiiremini parandada.<\/p>\n<h2>T\u00e4na on MojeSklad API<\/h2>\n<p>\nT\u00e4na lahendab MojeSklad API palju \u00fclesandeid:<\/p>\n<ul>\n<li>andmete vahetamine internetipoodide, raamatupidamiss\u00fcsteemide, pankadega;<\/li>\n<li>arvutuste andmete ja aruannete saamine;<\/li>\n<li>kasutamine kliendirakenduste taga \u2014 meie mobiilirakendused ja t\u00f6\u00f6lauakassa t\u00f6\u00f6tavad API kaudu<\/li>\n<li>teavituste saatmine andmete muutumise kohta MoemSkladis \u2014 webhooks;<\/li>\n<li>telefoniteenused;<\/li>\n<li>loyaliteets\u00fcsteemid.<\/li>\n<\/ul>\n<p>\nAPI p\u00f5hjal kirjutas meie tegevjuht Askar Rahimberdiev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/rhino\/\" class=\"user_link\">rhino<\/a><\/noindex> nelja tunni jooksul telegrammi boti, mis t\u00f5mbab API kaudu j\u00e4\u00e4ke: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/arahimberdiev\/com-lognex-telegram-moysklad-stock\">github.com\/arahimberdiev\/com-lognex-telegram-moysklad-stock<\/a><\/noindex><\/p>\n<p>N\u00fc\u00fcd kuivad numbrid. <\/p>\n<p>Siin on meie statistika vana REST API kohta:<\/p>\n<ul>\n<li>400 ettev\u00f5tet;<\/li>\n<li>600 kasutajat;<\/li>\n<li>2 miljonit p\u00e4ringut p\u00e4evas;<\/li>\n<li>200 GB\/p\u00e4evas v\u00e4ljaminevat liiklust.<\/li>\n<\/ul>\n<p>\nJa siin on, kuhu me j\u00f5udsime k\u00f5igi MoemSklad API-dega:<\/p>\n<ul>\n<li>\u00fcle 70 integratsiooni (osa neist on saadaval siin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.moysklad.ru\/integratsii\/\">www.moysklad.ru\/integratsii<\/a><\/noindex>);<\/li>\n<li>8500 ettev\u00f5tet;<\/li>\n<li>12 000 kasutajat;<\/li>\n<li>46 miljonit p\u00e4ringut p\u00e4evas;<\/li>\n<li>2 TB\/p\u00e4evas v\u00e4ljaminevat liiklust.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mis edasi<\/h2>\n<p>\nAPI arendamise plaanid on aktiivses arutelus. P\u00fc\u00fcame arvesse v\u00f5tta kasutajate jagatud kogemusi. Mitte alati ja k\u00f5ike ei \u00f5nnestu kohe teha, kuid uus API versioon, mis sisaldab mugavamaid metaandmeid ja v\u00e4hem keerulist struktuuri, OAuth autentimiseks ning API rakenduste liidesesse integreerimiseks, on juba nurga taga. <\/p>\n<p>Uudiste kohta saab j\u00e4lgida spetsiaalsel saidil, mis on m\u00f5eldud MoimSkladiga integreerimise arendajatele: <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.moysklad.ru\">dev.moysklad.ru<\/a><\/noindex>.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/moysklad\/blog\/453136\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e: \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 API, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0438 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u041c\u0435\u043d\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25898,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e: \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 API, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0438 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u041c\u0435\u043d\u044f\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pisali-api-porvali-xml-dva\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0438\u0441\u0430\u043b\u0438 API \u2014 \u043f\u043e\u0440\u0432\u0430\u043b\u0438 XML (\u0434\u0432\u0430) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e: \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 API, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0438 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u041c\u0435\u043d\u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pisali-api-porvali-xml-dva\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:57:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:57:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kirjutasime API \u2014 l\u00f5hkusime XML (kaks) | ProHoster","description":"MoimSkladi esimene API ilmus 10 aastat tagasi. Sel ajal oleme t\u00f6\u00f6tanud olemasolevate API versioonide kallal ja arendame uusi. M\u00f5ni versioon API-st on juba maidenud. Selles artiklis r\u00e4\u00e4gime palju: kuidas API loodi, miks see on vajalik pilveteenusele, mida see kasutajatele annab, millistele takistustele oleme juba komistanud ja mida plaanime edasi teha. Mind","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0438\u0441\u0430\u043b\u0438 API \u2014 \u043f\u043e\u0440\u0432\u0430\u043b\u0438 XML (\u0434\u0432\u0430) | ProHoster","og:description":"\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e: \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 API, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0438 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u041c\u0435\u043d\u044f","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:57:51+00:00","article:modified_time":"2019-10-31T18:57:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34354","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 18:52:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:23:17","updated":"2026-01-21 18:52:24"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34354"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34354\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/25898"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}