{"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\/sl\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","title":{"rendered":"Pisalno API \u2014 raztrgali XML (dva)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Prvi API MojeSkladiste pojavio se prije 10 godina. Cijelo to vrijeme radimo na postoje\u0107im verzijama API-ja i razvijamo nove. Neke verzije API-ja su ve\u0107 zaboravljene. <\/p>\n<p>U ovom \u010dlanku bit \u0107e puno svega: kako smo stvorili API, za\u0161to je potreban obla\u010dnom servisu, \u0161to donosi korisnicima, na koje smo zamke ve\u0107 nai\u0161li i \u0161to planiramo raditi dalje. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nZovem se Oleg Alekseev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/oalexeev\/\" class=\"user_link\">oalexeev<\/a><\/noindex>, ja sam tehni\u010dki direktor i suosniva\u010d MojeSkladiste. <\/p>\n<h2>Za\u0161to praviti API za servis<\/h2>\n<p>\nNa\u0161i klijenti, a to su deseci tisu\u0107a poduzetnika, aktivno koriste obla\u010dna rje\u0161enja: bankarstvo, internetske trgovine, upravljanje robom, CRM. Spojite se s jednim \u2014 i ve\u0107 je te\u0161ko stati. I evo ve\u0107 peti, osmi, deseti servis olak\u0161ava posao poduzetnika, ali korisnici ru\u010dno prenose podatke izme\u0111u tih obla\u010dnih servisa. Rad postaje no\u0107na mora.<\/p>\n<p>O\u010dito rje\u0161enje \u2014 omogu\u0107iti korisnicima prijenos podataka izme\u0111u obla\u010dnih servisa. Na primjer, uvoziti i izvoziti podatke kao datoteke koje se zatim mogu u\u010ditati u potrebni servis. Datoteke se obi\u010dno prilago\u0111avaju formatu svakog servisa. To je manje-vi\u0161e jednostavan ru\u010dni rad, ali s rastom broja ovih servisa, obavljanje toga postaje sve slo\u017eenije.<\/p>\n<p>Stoga je sljede\u0107i korak \u2014 API. S njim obla\u010dni servis pobje\u0111uje jer povezuje nekoliko servisa na jednoj ta\u010dki. Pojava takve ekosustava privla\u010di nove klijente zahvaljuju\u0107i dodatnim mogu\u0107nostima. Proizvod s novim funkcionalnostima postaje profitabilniji i korisniji.<\/p>\n<p>Ako se kreiraju vlastiti programski su\u010delja, to privla\u010di vanjske prodava\u010de u obliku programera koji saznaju za va\u0161 proizvod zahvaljuju\u0107i API-ju. Oni po\u010dinju izgra\u0111ivati rje\u0161enja na temelju ponu\u0111enog API-ja i zara\u0111uju novac na automatizaciji zadataka svojih klijenata.<\/p>\n<p>Sistem vo\u0111enja MojeSkladiste temelji se na jednostavnim procesima. Glavno \u2014 rad s primarnim dokumentima, mogu\u0107nost prihvata i otpreme robe, dobivanje poslovnih izvje\u0161taja na temelju primarnih dokumenata. Tako\u0111er postoji prijenos podataka, na primjer u obla\u010dno ra\u010dunovodstvo, i njihovo dobavljanje iz bankovnih sistema ili maloprodajnih mjesta. Tako\u0111er radimo s internetskim trgovinama: dobivamo informacije o robama i \u0161aljemo podatke o zalihama.<\/p>\n<p><img decoding=\"async\" alt=\"Pisalno API \u2014 raztrgali XML (dva)\" src=\"\/wp-content\/uploads\/2019\/05\/aefa36019217c463d2a513a9e025ebc7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Prvi API MojeSkladi\u0161te<\/h2>\n<p>\nTijekom 10 godina rada MojeSkladi\u0161te s API-jem stvorili smo razne integracije koje omogu\u0107uju razmjenu podataka, rad s bankama, obavljanje pla\u0107anja i kori\u0161tenje vanjske telefonije.<\/p>\n<p>U prvoj godini omogu\u0107ili smo izvo\u0111enje bilo kakvih podataka u XML formatu. Tada je korisnicima bilo puno jasnije i uobi\u010dajenije \u010duvati podatke offline, a ne u nekoj obla\u010dnoj usluzi, i to smo im omogu\u0107ili. Izvoz je pokrenut ru\u010dnim izvo\u0111enjem iz su\u010delja. Dakle, u tom trenutku to se nije moglo nazvati API-jem. <\/p>\n<p>Tada smo po\u010deli suradnju s kompanijom Rusagro \u2014 oni su ve\u0107 koristili 'zrelu' ERP za planiranje proizvodnje i prodaje, a u\u010ditavanje vagona u tvornicama automatizirali su u MojeSkladi\u0161te. Tako smo dobili prve naznake pravog API-ja: razmjena izme\u0111u na\u0161e usluge i ERP-a odvijala se slanjem velikog datoteka s podacima o svim vrstama dokumenata. <\/p>\n<p>To je bio dobar izbor za paketnu razmjenu podataka, ali zajedno s dokumentima trebalo je prenositi njihove zavisnosti: informacije o proizvodima, partnerima i skladi\u0161tima. Takvu hrpu nije tako te\u0161ko generirati prilikom izvoza, ali je prili\u010dno te\u0161ko razdvojiti prilikom uvoza, jer u jednom paketu dolaze sve informacije: i o novim dokumentima, i o ve\u0107 postoje\u0107ima.<\/p>\n<p>Prvi XML API nije trajao dugo \u2014 nakon dvije godine po\u010deli smo s njegovom rekonstrukcijom. \u010cak i na po\u010detku rada napravili smo nekoliko pogre\u0161aka prilikom izrade programskog su\u010delja.<\/p>\n<p><img decoding=\"async\" alt=\"Pisalno API \u2014 raztrgali XML (dva)\" src=\"\/wp-content\/uploads\/2019\/05\/3f1b04d030e7fcb5add795f8fd75d92b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kako je izra\u0111en XML API: ilustracija jednog od na\u0161ih arhitekata. Ina\u010de, o\u010dekujte njegove \u010dlanke.<\/i><\/p>\n<p>Evo na\u0161ih glavnih gre\u0161aka:<\/p>\n<ol>\n<li>JAXB ozna\u010davanje je napravljeno izravno na entitet bini. Za komunikaciju s bazom koristimo Hibernate, a na te iste bine je napravljeno JAXB ozna\u010davanje. Ova pogre\u0161ka se brzo pojavila: svaka promjena strukture podataka zahtijevala je hitno obavje\u0161tavanje svih koji koriste API, ili izgradnju 'kosti' koja bi osigurala kompatibilnost s prethodnom strukturom podataka.<\/li>\n<li>API se je razvijal kot dodatek, in sprva nismo opredelili, kak\u0161en del izdelka je. Nismo razmi\u0161ljali niti o tem, ali je API kaj pomembnega, ali je treba ohranjati nazaj kompatibilnost za prve stranke. V nekem trenutku je \u0161tevilo uporabnikov API zna\u0161alo pribli\u017eno 5 % od skupnega majhnega \u0161tevila, in na njih nismo dajali pozornosti. Splo\u0161na filtracija, ki smo jo neko\u010d uvedli, je povzro\u010dila, da smo postali uporabljen kot backend. Ta filtracija ni bila prav GraphQL, ampak nekaj takega \u2014 delovala je preko mno\u017eice parametrov v poizvedovanju. S tako mo\u010dnim orodjem je bilo uporabnikom te\u017eko ostati stran, in na\u0161a zahteva je bila preusmerjena tako, da so jih po\u0161iljali neposredno iz UI njihovih spletnih trgovin. Situacija je bila neprijetno presene\u010denje, saj bi morala taka storitev zahtevati druga\u010dno tarifacijo in sploh druga\u010dno razumevanje samega API kot izdelka.<\/li>\n<li>Ker se API ni razvijal kot glavni izdelek, je bila dokumentacija za API izdelana in objavljena kot stranski produkt \u2014 skozi in\u017eenirstvo povratnih informacij. Ta pot se zdi dokaj preprosta in priro\u010dna, a je v nasprotju z delom po pogodbi. To pomeni, da obstaja neki komponent s prednastavljeno shemo delovanja. Razvijalec ga implementira v skladu s to shemo in nalogo, komponenta prestane testiranje, stranka dobi izdelek, ki ustreza zamisli analitika. In\u017eenirstvo povratnih informacij pa na trg vr\u017ee izdelek, ki preprosto obstaja: z obratovanji, \u010dudnimi re\u0161itvami in biciklisti namesto potrebne funkcionalnosti. <\/li>\n<li>Vse zahteve, ki so prihajale preko API, je bilo mogo\u010de analizirati le kot dnevnik Nginx-a ali aplikacijskega stre\u017enika. To ni omogo\u010dilo razlikovanja predmetnih podro\u010dij, razen \u010de bi jih razdelili po uporabnikih in naro\u010dnikih. \u010ce ni mo\u017enosti regulirati registracije aplikacij ali strank, postane analiza situacije nemogo\u010da. Ta problem je najmanj vplival na razvoj API, bolj gre za razumevanje njegove povpra\u0161evanja in polnosti funkcionalnosti.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Poskus \u0161tevilka dva: REST API<\/h2>\n<p>\nV letu 2010 smo posku\u0161ali zgraditi sistem izmenjave z online ra\u010dunovodstvom \u2014 BukhSoftom. Ni obrodilo sadov. A v procesu integracije je nastal popoln API: REST storitev izmenjave, kjer niso bile prisotne prostovoljne izjave, kot na primer klici operacij v obliki RPC. Vsa komunikacija z API-jem je bila pripeljana do standardnega na\u010dina delovanja za REST: v nizu poizvedbe se nahaja ime entitete, medtem ko se operacija, ki se izvaja na njej, dolo\u010di s pomo\u010djo http-metode. Dodali smo filtriranje po trenutku posodabljanja entitet, kar je uporabnikom omogo\u010dilo gradnjo replikacije s svojimi sistemi.<\/p>\n<p>V istem letu se je pojavil API za izvoz skladi\u0161\u010dnih in blagovnih zalog. Uporabnikom so postale dostopne prek API-ja najbolj dragocene komponente sistema \u2014 izmenjava prvotnih dokumentov in ra\u010dunovodska podatkov o zalogah in stro\u0161kih blaga.<\/p>\n<p>Decembra 2015 je RetailCRM objavil prvo zunanje knji\u017enico za dostop do na\u0161ega API-ja. Uporabljali so jo precej aktivno, pri \u010demer je rasla priljubljenost storitve kot celote, obremenitev na API-ju pa je rastla hitreje kot obremenitev na spletni vmesnik. Enkrat je rast pre\u0161la v skok obremenitve. <\/p>\n<p><img decoding=\"async\" alt=\"Pisalno API \u2014 raztrgali XML (dva)\" src=\"\/wp-content\/uploads\/2019\/05\/86b289455db8a13f5583cd4eeb377970.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Pisalno API \u2014 raztrgali XML (dva)\" src=\"\/wp-content\/uploads\/2019\/05\/da221a6a122ff6d15bcbf9ea09758727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn ta skok, na katerega ka\u017ee pu\u0161\u010dica levo, je popolnoma osupnil stre\u017enik, ki poganja na\u0161 API. Teden dni smo se ukvarjali s tem, kaj pravzaprav povzro\u010da to obremenitev. Izkazalo se je, da so to tisti zahtevki, ki so se prena\u0161ali na na\u0161 API iz frontov pri strankah. Vse je pojedlo okoli 50 strank. Takrat smo spoznali eno od svojih napak \u2014 popolno pomanjkanje omejitev. <\/p>\n<p>Na koncu smo uvedli omejitev za \u0161tevilo hkratnih poizvedb. Z enega ra\u010duna je bilo mo\u017eno hkrati odpreti najve\u010d dve poizvedbi. To je dovolj za delovanje v na\u010dinu replikacije za izmenjavo podatkov v paketnem na\u010dinu. Tisti, ki so \u017eeleli uporabljati nas kot backend, so bili od takrat naprej prisiljeni bolj ustrezati tarifam, saj so uvedli delo preko ve\u010d ra\u010dunov v svojih programskih sredstvih.<\/p>\n<h2>Urejamo zadeve<\/h2>\n<p>\n\u017de od leta 2014 je povpra\u0161evanje po obstoje\u010dem API-ju postalo pomemben del poslovanja, sam API pa je generiral najve\u010dje koli\u010dine podatkov pri izmenjavi z klienti. Leta 2015 smo zagnali projekt urejanja API-ja. Izbrali smo format JSON namesto XML in za\u010deli graditi na osnovi zna\u010dilnosti, ki smo jih odkrili pri izvajanju prej\u0161nje razli\u010dice:<\/p>\n<ol>\n<li>Mo\u017enost upravljanja razli\u010dicami. Razli\u010dkovanje omogo\u010da razvoj nove razli\u010dice brez vpliva na obstoje\u010do aplikacijo in brez motenj za uporabnike. <\/li>\n<li>Mo\u017enost, da uporabnik vidi metapodatke v sami odgovoru, ki ga prejme.<\/li>\n<li>Mo\u017enost izmenjave velikih dokumentov. \u010ce obdelujemo dokument s \u0161tevilom postavk ve\u010djim od 4-5 tiso\u010d, to postane te\u017eava za stre\u017enik: dolga transakcija, dolg http-zahtjev. Razvili smo poseben mehanizem, ki omogo\u010da posodabljanje dokumenta v delih in upravljanje posameznih postavk tega dokumenta ter njihovo po\u0161iljanje na stre\u017enik.<\/li>\n<li>Orodja za replikacijo \u2014 bila so \u017ee v prej\u0161nji razli\u010dici.<\/li>\n<li>Omejitve glede obremenitve \u2014 kot dedi\u0161\u010dina te\u017eav, na katere smo naleteli v prej\u0161nji razli\u010dici. Uvedli smo omejitve glede \u0161tevila zahtevkov v dolo\u010denem \u010dasu, \u0161tevila hkratnih zahtevkov in zahtevkov z enega ip-naslova.<\/li>\n<\/ol>\n<p>\nOd takrat smo izdali dve manj\u0161i razli\u010dici API in zagnali ve\u010d specializiranih API-jev, vendar je osnovni pristop ostal nespremenjen. Posodobljen format izmenjave in nova arhitektura sta omogo\u010dila hitrej\u0161e odpravljanje pomanjkljivosti v API-ju.<\/p>\n<h2>API MojeSklade danes<\/h2>\n<p>\nDanes API MojeSklade re\u0161uje \u0161tevilne naloge:<\/p>\n<ul>\n<li>izmenjava podatkov z spletno trgovino, ra\u010dunovodskimi sistemi, bankami;<\/li>\n<li>prejemanje izra\u010dunskih podatkov, poro\u010dil;<\/li>\n<li>uporaba kot backend za klientske aplikacije \u2014 na\u0161e mobilne aplikacije in desktoppna blagajna delujejo skozi API<\/li>\n<li>po\u0161iljanje obvestil o spremembah podatkov v MojeSklade \u2014 webhooks;<\/li>\n<li>telefonija;<\/li>\n<li>lojalnostni sistemi.<\/li>\n<\/ul>\n<p>\nNa osnovi API je na\u0161 direktor Askar Rakhimberdiev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/rhino\/\" class=\"user_link\">rhino<\/a><\/noindex> v \u0161tirih urah napisal telegram-bota, ki prena\u0161a preko API ostanke: <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>Zdaj suhe \u0161tevilke. <\/p>\n<p>Tukaj je na\u0161a statistika za staro REST API:<\/p>\n<ul>\n<li>400 podjetij;<\/li>\n<li>600 uporabnikov;<\/li>\n<li>2 milijona zahtevkov na dan;<\/li>\n<li>200 GB\/dan odhodnega prometa.<\/li>\n<\/ul>\n<p>\nIn tukaj je, kam smo pri\u0161li glede vseh API-jev MojeSklade:<\/p>\n<ul>\n<li>ve\u010d kot 70 integracij (del jih lahko vidite tukaj <noindex><a rel=\"nofollow\" href=\"https:\/\/www.moysklad.ru\/integratsii\/\">www.moysklad.ru\/integratsii<\/a><\/noindex>);<\/li>\n<li>8500 podjetij;<\/li>\n<li>12 000 uporabnikov;<\/li>\n<li>46 milijonov zahtevkov na dan;<\/li>\n<li>2 TB\/dan odhodnega prometa.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Kaj naprej<\/h2>\n<p>\nNa\u010drti za razvoj API-ja so v aktivni razpravi. Trudimo se upo\u0161tevati izku\u0161nje z obratovanjem, ki nam jih zagotavljajo uporabniki. Ni vedno mogo\u010de vsega uresni\u010diti takoj, vendar je nova razli\u010dica API-ja, ki bo imela bolj uporabne metapodatke in manj zapleteno strukturo, \u017ee blizu, ter OAuth za avtentikacijo in API za vgrajevanje v uporabni\u0161ke vmesnike aplikacij. <\/p>\n<p>Novice lahko spremljate na posebni spletni strani za razvijalce integracij z MojimSkladi: <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.moysklad.ru\">dev.mojsklad.ru<\/a><\/noindex>.<br \/>\n<br \/>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/pisali-api-porvali-xml-dva\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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\udd47Pisali smo API \u2014 raztrgali XML (dva) | ProHoster","description":"Prvi API MojeSkladiste pojavio se prije 10 godina. Cijelo to vrijeme radimo na postoje\u0107im verzijama API-ja i razvijamo nove. Neke verzije API-ja su ve\u0107 zaboravljene.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/34354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=34354"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/34354\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/25898"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=34354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=34354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=34354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}