{"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 \u2014 rebenesime XML (kaks)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>MinuSkaapi Esimene API ilmus 10 aastat tagasi. Kogu selle aja oleme t\u00f6\u00f6tanud olemasolevate API versioonide kallal ja arendanud uusi. Ja mitmed API versioonid on juba suutnud maetud. <\/p>\n<p>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. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMinu nimi on Oleg Aleksejev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/oalexeev\/\" class=\"user_link\">oalexeev<\/a><\/noindex>, olen tehniline direktor ja MeieSkaapi kaasasutaja. <\/p>\n<h2>Miks luua API teenusele<\/h2>\n<p>\nMeie kliendid, kelleks on k\u00fcmned tuhanded ettev\u00f5tjad, kasutavad aktiivselt pilvelahendusi: pangandust, internetipoode, kaubanduse arvestust, CRM. Kui oled \u00fchendanud \u00fche \u2014 on juba raske peatuda. Ja n\u00fc\u00fcd teeb juba viies, kaheksas, k\u00fcmnes teenus ettev\u00f5tja t\u00f6\u00f6 lihtsamaks, kuid andmeid nende pilveteenuste vahel peavad kasutajad k\u00e4sitsi edastama. T\u00f6\u00f6 muutub \u00f5udusunen\u00e4oks.<\/p>\n<p>Ilmselge lahendus on anda kasutajatele v\u00f5imalus edastada andmeid pilveteenuste vahel. N\u00e4iteks importida ja eksportida andmeid failidena, mille saab seej\u00e4rel vajalikku teenusesse \u00fcles laadida. Failide tavaliselt muudetakse iga teenuse formaadi j\u00e4rgi. See on enam-v\u00e4hem lihtne k\u00e4sitsit\u00f6\u00f6, kuid teenuste arvu kasvades muutub selle tegemine j\u00e4rjest keerulisemaks.<\/p>\n<p>Seet\u00f5ttu on j\u00e4rgmine samm \u2014 API. Sellega v\u00f5idab pilveteenus sellest, et \u00fchendab mitmeid teenuseid \u00fches punktis. Sellise \u00f6kos\u00fcsteemi tekkimine t\u00f5mbab uusi kliente t\u00e4nu t\u00e4iendavatele v\u00f5imalustele. Toode koos uue funktsionaalsusega muutub kasulikuks ja atraktiivsemaks.<\/p>\n<p>Kui luua omaenda programmiliideseid, siis meelitab see m\u00f5ningaid m\u00fc\u00fcgiinimesi, nagu programmeerijad, kes tunnevad teie toodet API kaudu. Nad hakkavad ehitama lahendusi pakkuda saadud API p\u00f5hjal ja teenivad raha oma klientide \u00fclesannete automatiseerimisel.<\/p>\n<p>MeieSkaapi arvestuss\u00fcsteem p\u00f5hineb lihtsatel protsessidel. Peamine on t\u00f6\u00f6tada esmase dokumentatsiooniga, v\u00f5imalus kaupade vastuv\u00f5tmine ja v\u00e4ljastamine, saada \u00e4ri jaoks aruandeid algdokumentide p\u00f5hjal. Samuti on olemas andmete edastamine, n\u00e4iteks pilve raamatupidamisse, ja nende saamine pankade s\u00fcsteemidest v\u00f5i jaepoodidest. Samuti tegeleme internetipoodidega: saame teavet kaupade kohta ja edastame andmeid j\u00e4\u00e4kide kohta.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutasime API \u2014 rebenesime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/aefa36019217c463d2a513a9e025ebc7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>MinuSLA API<\/h2>\n<p>\n10 aasta jooksul, mil MinuSLA on API-d kasutanud, oleme arendanud mitmeid integreerimisi, mis v\u00f5imaldavad andmeid vahetada, t\u00f6\u00f6tada pankadega, teostada makseid ja kasutada v\u00e4liseid telefoniteenuseid.<\/p>\n<p>Esimese aasta jooksul lisasime v\u00f5imaluse 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\u00f5imaluse. Ekspordiprotsess k\u00e4ivitus k\u00e4sitsi eksportimise kaudu kasutajaliidest. Seega ei saanud me seda veel API-ks nimetada. <\/p>\n<p>Sel ajal alustasime koost\u00f6\u00f6d Rusagro-ga \u2014 nad kasutasid juba t\u00e4isfunktsionaalset ERP-d tootmise ja m\u00fc\u00fcgi planeerimiseks, kuid vagunite koormamine tehastes automatiseeriti MinuSLA-s. Nii tekkisid meil esimesed t\u00f5elise API alged: andmevahetus meie teenuse ja ERP vahel toimus suurte andmefailide saatmise kaudu, mis sisaldas k\u00f5igi dokumendit\u00fc\u00fcpide andmeid. <\/p>\n<p>See oli hea lahendus andmete pakkide vahetamiseks, kuid koos dokumentidega tuli edastada ka nende s\u00f5ltuvused: teave kaupade, klientide ja ladude kohta. Sellist kooslust on eksportimisel lihtne genereerida, kuid impordil on seda \u00fcsna keeruline l\u00f5hkuda, kuna \u00fches paketis saabub kogu teave: nii uute dokumentide kui ka juba olemasolevate kohta.<\/p>\n<p>Esimene XML API ei elanud kaua \u2014 kahe aasta p\u00e4rast hakkasime seda \u00fcmber ehitama. Juba API k\u00e4ivitamise alguses tegime mitmeid vigu programmeerimisliidese loomisel.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutasime API \u2014 rebenesime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/3f1b04d030e7fcb5add795f8fd75d92b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nii loodi XML API: \u00fcks meie arhitektide illustratsioon. Muide, oodake tema artikleid.<\/i><\/p>\n<p>Siin on meie peamised vead:<\/p>\n<ol>\n<li>JAXB m\u00e4rgistus tehti otse entity beans'idele. Andmebaasiga suhtlemiseks kasutame Hibernate'i ja sama m\u00e4rgistus tehti ka nendele b\u0131inidele. See viga ilmnes peaaegu kohe: iga andmestruktuuri v\u00e4rskendus t\u00f5i kaasa vajaduse kiiresti teavitada k\u00f5iki, kes API-d kasutavad, v\u00f5i ehitada ajutisi lahendusi, mis tagaksid \u00fchilduvuse eelmise andmestruktuuriga.<\/li>\n<li>API kasvas v\u00e4lja kui mingi lisand, ja algselt me ei m\u00e4\u00e4ratlenud, millise osa toote sellest moodustab. Me ei m\u00f5elnud ka sellele, kas API on midagi olulist, kas esimeste klientide jaoks tuleb tagada tagurpidi \u00fchilduvus. Mingil hetkel oli API kasutajate arv umbes 5% kogu v\u00e4ikesest koguarvust, ja neile ei p\u00f6\u00f6rdutud t\u00e4helepanu. Koostatud \u00fcldine filtreerimine viis selleni, et meid hakati kasutama tagaplaanina. See filtreerimine ei olnud t\u00e4pselt GraphQL, vaid midagi sarnast \u2014 t\u00f6\u00f6tas l\u00e4bi tohutu hulga p\u00e4ringuparameterite. Sellise v\u00f5imsa t\u00f6\u00f6riistaga oli kasutajatel raske vastu pidada, ja meie juurde suunati p\u00e4ringud otse nende e-poodide UI-st. Situatsioon osutus ebameeldivaks \u00fcllatuseks, kuna sellise teenuse pakkumine peaks n\u00f5udma teistsugust hinnakujundust ja hoopis teistsugust arusaama API-st kui tootest.<\/li>\n<li>Kuna API arenes mitte kui peamine toode, siis API dokumentatsiooni koostamine ja avaldamine toimus allesj\u00e4\u00e4vate ressursside kaudu \u2014 p\u00f6\u00f6rdprojekteerimise teel. See l\u00e4henemine n\u00e4ib olevat piisavalt lihtne ja mugav, kuid on vastuolus lepingu alusel t\u00f6\u00f6tamisega. See on siis, kui on mingi komponent eelpandud t\u00f6\u00f6schemas. Arendaja rakendab selle vastavalt sellele schema'le ja \u00fclesandele, komponent l\u00e4bib testimise, klient saab toote, mis vastab anal\u00fc\u00fctiku kavandile. P\u00f6\u00f6rdprojekteerimine aga paiskab turule toote, mis lihtsalt eksisteerib: lahendustega, kummaliste otsustega ja jalgratastega vajaliku funktsionaalsuse asemel. <\/li>\n<li>Kogu p\u00e4ringute voogu, mis tuli l\u00e4bi API, sai anal\u00fc\u00fcsida mitte rohkem kui Nginx'i v\u00f5i rakendusserveri logina. See ei v\u00f5imaldanud teemaalasid v\u00e4lja selgitada, v\u00e4lja arvatud kasutajate ja tellijate kaupa jagada. Kui pole v\u00f5imalik reguleerida rakenduse v\u00f5i klientide registreerimist, muutub olukorra anal\u00fc\u00fcsimine v\u00f5imatuks. See probleem m\u00f5jutas API arendamist k\u00f5ige v\u00e4hem, see puudutab rohkem arusaamist selle n\u00f5udlusest ja funktsionaalsete v\u00f5imaluste t\u00e4itmisest.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Katse number kaks: REST API<\/h2>\n<p>\n2010. aastal p\u00fc\u00fcdsime luua online-raamatupidamise s\u00fcsteemi, mille nimeks oli BuhSoft. See ei \u00f5nnestunud. K\u00fcll aga tekis integreerimise k\u00e4igus t\u00e4isv\u00e4\u00e4rtuslik API: REST-teenus, kus ei olnud selliseid k\u00f5rvalekaldeid nagu RPC-k\u00f5nede tegemine. Kogu suhtlemine API-ga viidi standardsele REST-re\u017eiimile: p\u00e4ringute viisis on toodud entiteedi nimi ja toiming, mida sellega tehakse, m\u00e4\u00e4ratakse http-meetodi abil. Lisatud said olemasolu uuendamise filtreerimine ning kasutajatele tekkis v\u00f5imalus replikatsiooni ehitada oma s\u00fcsteemidega.<\/p>\n<p>Samas aastal ilmus API, mis v\u00f5imaldas laoseisu ja toodete j\u00e4\u00e4ke eksportida. Kasutajatele said API kaudu kergesti k\u00e4tte s\u00fcsteemi k\u00f5ige v\u00e4\u00e4rtuslikumad osad \u2014 esialgsete dokumentide vahetus ja arvutustooted j\u00e4\u00e4kide ja kaupade enda hindade kohta.<\/p>\n<p>Detsembris 2015 avaldas RetailCRM esimese kolmanda osapoole teegi meie API-le ligip\u00e4\u00e4suks. Seda hakati \u00fcsna aktiivselt kasutama, samal ajal kasvas ka teenuse populaarsus; koormus API-le suurenes kiiremini kui veebiliidese koormus. \u00dcks kord muutus kasv t\u00f5usuks. <\/p>\n<p><img decoding=\"async\" alt=\"Kirjutasime API \u2014 rebenesime 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 \u2014 rebenesime XML (kaks)\" src=\"\/wp-content\/uploads\/2019\/05\/da221a6a122ff6d15bcbf9ea09758727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa see t\u00f5us, millega vasak pool n\u00e4itab noolt, p\u00f5hjustas t\u00e4ielikku \u00fcllatust serveris, mis teenindab meie API-d. N\u00e4dala jooksul uurisime, mis tegelikult seda koormust genereeris. Selgus, et need olid just need p\u00e4ringud, mis saadeti meie API-le klientide frontidest. K\u00f5ike neelas umbes 50 klienti. Siin saime aru \u00fchest meie veast - t\u00e4ielik piirangute puudumine. <\/p>\n<p>Kokkuv\u00f5ttes kehtestasime piiri samaaegsete p\u00e4ringute arvule. \u00dchest kontost v\u00f5is korraga avada mitte rohkem kui kaks p\u00e4ringut. See piisab replikatsiooni re\u017eiimis t\u00f6\u00f6tamiseks andmete vahetamisel paketi re\u017eiimis. Need, kes soovisid meid kasutada tagaplaanina, pidid alates sellest hetkest rohkem vastama hindadele, kuna nad l\u00fclitasid oma tarkvaradesse t\u00f6\u00f6 mitme konto kaudu.<\/p>\n<h2>Viime korda korda<\/h2>\n<p>\nJuba 2014. aastast alates on olemasoleva API n\u00f5udlus muutunud osa meie \u00e4ritegevusest, 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\u00f5hjal:<\/p>\n<ol>\n<li>Versioonide haldamise v\u00f5imalus. Versioonimine v\u00f5imaldab v\u00e4lja t\u00f6\u00f6tada uue versiooni, m\u00f5jutamata olemasolevat rakendust ja rikkumata kasutajate t\u00f6\u00f6d. <\/li>\n<li>Kasutaja v\u00f5imalus n\u00e4ha vastuses metainfot, mida ta saab.<\/li>\n<li>Suure dokumentide vahetuse v\u00f5imalus. Kui t\u00f6\u00f6tleme dokumenti, kus on rohkem kui 4-5 tuhat positsiooni, saab see serverile probleemiks: pikk tehing, pikk http-p\u00e4ring. Oleme loonud spetsiaalse mehhanismi, mis v\u00f5imaldab dokumenti uuendada osade kaupa ja hallata selle dokumendi eraldiseisvaid positsioone, saates need serverisse.<\/li>\n<li>Replikatsioonivahendid \u2014 olid ka eelmisest versioonist.<\/li>\n<li>Koormuse piirangud \u2014 kui j\u00e4\u00e4nus eelmisest versioonist. Sisse viidud piirangud p\u00e4ringute arvu osas ajavahemiku jooksul, samaaegsete p\u00e4ringute arvu ja p\u00e4ringute arvu \u00fche ip-aadressi pealt.<\/li>\n<\/ol>\n<p>\nSellest ajast oleme v\u00e4lja lasknud kaks v\u00e4ikest versiooni API-st ja k\u00e4ivitanud mitu spetsialiseeritud API-d, kuid \u00fcldine l\u00e4henemine on j\u00e4\u00e4nud muutumatuks. Uuendatud andmevahetuse formaat ja uus arhitehtuuri v\u00f5imaldasid API n\u00f5rkusi palju kiiremini parandada.<\/p>\n<h2>MinuLaod API t\u00e4na<\/h2>\n<p>\nT\u00e4na lahendab MinuLaod API palju \u00fclesandeid:<\/p>\n<ul>\n<li>andmete vahetamine veebipoodidega, raamatupidamiss\u00fcsteemidega, pankadega;<\/li>\n<li>arvutuste, raportite saamine;<\/li>\n<li>kasutamine kliendirakenduste tagaplaanina \u2014 meie mobiilrakendused ja t\u00f6\u00f6lauakassa t\u00f6\u00f6tavad API kaudu<\/li>\n<li>andmete muudatused MinuLaos \u2014 webhooks;<\/li>\n<li>telefoniteenused;<\/li>\n<li>loyalty-s\u00fcsteemid.<\/li>\n<\/ul>\n<p>\nAPI p\u00f5hjal kirjutas meie peadirektor 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 vanast REST API-st:<\/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\u00f5ikide MinuLaod API-dega:<\/p>\n<ul>\n<li>\u00fcle 70 integratsiooni (osa neist on v\u00f5imalik vaadata 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 arenduskava on aktiivses arutelus. P\u00fc\u00fcame arvesse v\u00f5tta kasutajate antud kogemusi. Mitte alati ei \u00f5nnestu k\u00f5ike kohe teha, kuid uus API versioon, mis h\u00f5lmab mugavamaid metaandmeid ja v\u00e4hem keerulist struktuuri, OAuth autentimiseks, ja API rakenduste liidestamiseks, on juba l\u00e4hedal. <\/p>\n<p>Uudiste j\u00e4lgimiseks k\u00fclastage spetsiaalset arendajate lehte, mis on seotud MinuLadu integratsioonidega: <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.moysklad.ru\">dev.muinladu.ee<\/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 5.0.1.1 - 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.\" \/>\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) 5.0.1.1\" \/>\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.\" \/>\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 purustasime XML (kaks) | ProHoster","description":"MinuSkaapi Esimene API ilmus 10 aastat tagasi. Kogu selle aja oleme t\u00f6\u00f6tanud olemasolevate API versioonide kallal ja arendanud uusi. Ja mitmed API versioonid on juba suutnud maetud.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}