{"id":38022,"date":"2019-10-31T22:21:14","date_gmt":"2019-10-31T19:21:14","guid":{"rendered":"https:\/\/prohoster.info\/blog\/tak-vse-taki-raml-ili-oas-swagger\/"},"modified":"2019-10-31T22:21:14","modified_gmt":"2019-10-31T19:21:14","slug":"tak-vse-taki-raml-ili-oas-swagger","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Dakle, RAML ili OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>U dinami\u010dnom svijetu mikroservisa mo\u017ee se promijeniti sve \u2014 svaka komponenta mo\u017ee biti prepisana na drugom jeziku, koriste\u0107i razli\u010dite okvire i arhitekturu. Neizmjene trebaju ostati samo ugovori kako bi se moglo komunicirati s mikroservisom na nekoj stalnoj osnovi, neovisno o unutarnjim metamorfozama. Danas \u0107emo govoriti o na\u0161em problemu izbora formata za opisivanje ugovora i podijeliti prona\u0111ene artefakte. <\/p>\n<p><img decoding=\"async\" alt=\"Dakle, RAML ili OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/00864185e0f8032a304049ebf21eab21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nObjavu je pripremila <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekhova<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Mikroservisi.<\/b> Tijekom razvoja Acronis Cyber Cloud shvatili smo da smo ih neizbje\u017eno morali koristiti. A projektiranje mikroservisa nemogu\u0107e je bez formalizacije ugovora, koji predstavlja su\u010delje mikroservisa.<\/p>\n<p>Ali kada u proizvodu postoji vi\u0161e od jedne komponente, a razvoj ugovora postaje redovita aktivnost, po\u010dinje\u0161 razmi\u0161ljati o optimizaciji procesa. O\u010digledno je da su\u010delje (ugovor) i implementacija (mikroservis) moraju odgovarati jedno drugome, da razli\u010dite komponente trebaju raditi iste stvari na isti na\u010din i da, bez centraliziranog dono\u0161enja svih tih odluka, svaki tim \u0107e ponovno tro\u0161iti vrijeme na njihovo postizanje. <\/p>\n<p><img decoding=\"async\" alt=\"Dakle, RAML ili OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Shema mikros servisa Amazon iz <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">tweeta<\/a><\/noindex> Wernera Vogels, CTO Amazon<\/i><br \/>\nU \u010demu se zapravo sastoji dilema? De facto postoje dva na\u010dina interakcije mikroservisa \u2013 HTTP Rest i gRPC od Googlea. Ne \u017eele\u0107i se uklju\u010diti u Googleov tehnolo\u0161ki skup, odabrali smo HTTP Rest. Annotacije za HTTP REST ugovore naj\u010de\u0161\u0107e se opisuju jednim od dva formata: RAML i OAS, koji je ranije bio poznat kao Swagger. Stoga se svaki tim programera suo\u010dava s potrebom da odabere jedan od standarda. No, kako se ispostavilo, donijeti tu odluku mo\u017ee biti jako te\u0161ko.<\/p>\n<h3>Za\u0161to su potrebne anotacije?<\/h3>\n<p>\nSa\u017eetak je potreban kako bi vanjski korisnik mogao lako razumjeti \u0161to mo\u017ee raditi s va\u0161om uslugom putem njenog HTTP su\u010delja. Drugim rije\u010dima, na osnovnoj razini sa\u017eetak bi trebao sadr\u017eavati barem popis dostupnih resursa, njihove HTTP metode, tijela zahtjeva, nabrojavanje parametara, nazna\u010divanje potrebnih i podr\u017eanih zaglavlja, kao i kodove povratka i formate odgovora. Ekstremno va\u017ean element sa\u017eetka ugovora tako\u0111er je i njihovo verbalno opisivanje (\"\u0161to \u0107e se dogoditi ako dodate ovaj query-parametar u zahtjev?\", \"u kojem \u0107e se slu\u010daju vratiti kod 400?\")<\/p>\n<p>Ipak, kada se radi o razvoju velikog broja mikroservisa, postoji \u017eelja za dodatnom korist od napisanih sa\u017eetaka. Na primjer, na temelju RAML\/Swaaggera mo\u017ee se generirati i klijentski i serverski kod na velikom broju programskih jezika. Tako\u0111er, mo\u017ee se automatski dobiti dokumentacija za mikroservis i prenijeti je na va\u0161u developer-portalu :).<\/p>\n<p><img decoding=\"async\" alt=\"Dakle, RAML ili OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Primjer strukturiranog opisa ugovora<\/i><\/p>\n<p>Rje\u0111e se susre\u0107e praksa testiranja mikroservisa na temelju opisa ugovora. Ako ste napisali i sa\u017eetak, i komponentu, mo\u017eete stvoriti automatski test koji provjerava adekvatnost rada usluge s razli\u010ditim tipovima podataka na ulazu. Da li usluga vra\u0107a kod odgovora koji nije opisan u sa\u017eetku? Ho\u0107e li ispravno obraditi namjerno neto\u010dne podatke?<\/p>\n<p>\u0160tovi\u0161e, kvalitetna implementacija ne samo samih ugovora, ve\u0107 i alata za vizualizaciju sa\u017eetaka omogu\u0107ava pojednostavljenje rada s mikroservisom. Drugim rije\u010dima, ako je arhitekt kvalitetno opisao ugovor, na temelju toga dizajneri i programeri \u0107e integrirati uslugu u druge proizvode bez dodatnih vremenskih tro\u0161kova.<\/p>\n<p>Za rad dodatnih alata, i RAML i OAS omogu\u0107uju dodavanje metapodataka koji nisu predvi\u0111eni standardom (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">na primjer, tako se to radi u OAS<\/a><\/noindex>).<\/p>\n<p>Uglavnom, polje za kreativnost u primjeni ugovora za mikroservise je ogromno... barem teoretski<\/p>\n<h3>Usporedba je\u017ea s u\u017eom<\/h3>\n<p>\nTrenutno je prioritetna linija razvoja u Acronisu \u2013 razvoj Acronis Cyber Platforme. Acronis Cyber Platforma predstavlja nove to\u010dke integracije vanjskih servisa s Acronis Cyber Cloud i agencijskim dijelom. Iako su nas na\u0161i interni API-ji, opisani u RAML-u, zadovoljili, potreba za objavom API-ja ponovno je pokrenula pitanje izbora: koji standard anotacija najbolje koristiti za na\u0161 rad?<\/p>\n<p>Prvotno se \u010dinilo da postoje dva rje\u0161enja \u2013 najrasprostranjeniji razvojni standardi RAML i Swagger (ili OAS). No, u stvarnosti se pokazalo da alternativa ima barem ne 2, ve\u0107 3 ili vi\u0161e.<\/p>\n<p>S jedne strane imamo RAML \u2013 sna\u017ean i u\u010dinkovit jezik. Dobro su implementirane hijerarhije i naslje\u0111ivanje, pa je ovaj format vi\u0161e prikladan za velike tvrtke kojima je potrebno mnogo opisa \u2013 to jest, ne jedan proizvod, ve\u0107 mnoge mikroservise koji imaju zajedni\u010dke dijelove ugovora \u2013 sheme autentikacije, jednake tipove podataka, tijela gre\u0161aka.<\/p>\n<p>No, razvojnici RAML-a, kompanija Mulesoft, pridru\u017eili su se konzorcijumu Open API koji se bavi razvojem <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/url?q=https:\/\/swagger.io\/blog\/news\/mulesoft-joins-the-open-api-initiative\/&amp;sa=D&amp;ust=1568012015646000&amp;usg=AFQjCNExaO-_GkMnfmqc_MRu6mgHYgjK-A\">Swagger<\/a><\/noindex>. Stoga je razvoj RAML-a obustavljen. Da zamislite format doga\u0111aja, zamislite da su glavni odr\u017eavatelji komponenti sustava Linux oti\u0161li raditi u Microsoft. Ova situacija stvara pretpostavke za kori\u0161tenje Swaggera, koji se dinami\u010dki razvija i u posljednjoj \u2013 tre\u0107oj verziji \u2013 prakti\u010dki susti\u017ee RAML po fleksibilnosti i funkcionalnosti.<\/p>\n<h3>Da nije jednog ali\u2026<\/h3>\n<p>\nKako se ispostavilo, daleko ne koriste sve open-source alate verziju OAS 3.0. Za mikroservise na Go-u najkriti\u010dnije \u0107e biti odsustvo prilagodbe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> na novu verziju standarda. Razlika izme\u0111u Swagger 2 i Swagger 3 je <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">ogromna.<\/a><\/noindex>Na primjer, u tre\u0107oj verziji, programeri su:<\/p>\n<ul>\n<li>pobolj\u0161ali opis shema autentikacije,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">dovr\u0161ili<\/a><\/noindex> podr\u0161ku za JSON Schema,<\/li>\n<li>pove\u0107ali mogu\u0107nost dodavanja primjera.<\/li>\n<\/ul>\n<p>\nSituacija postaje zanimljiva: prilikom odabira standarda treba razmatrati RAML, Swagger 2 i Swagger 3 kao odvojene alternative. U tom slu\u010daju, samo Swagger 2 ima dobru podr\u0161ku alata OpenSource. RAML je vrlo fleksibilan\u2026 i slo\u017een, dok Swagger 3 slabo podr\u017eavaju zajednice, pa \u0107ete se morati slu\u017eiti alatima vlastitog razvoja ili komercijalnim rje\u0161enjima koja, u pravilu, ko\u0161taju prili\u010dno skupo. <\/p>\n<p>Pri tome, ako u Swaggeru postoji mnogo korisnih mogu\u0107nosti, kao \u0161to je gotov portal. <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, na koji mo\u017eete u\u010ditati anotaciju i dobiti njenu vizualizaciju s detaljnim opisom, vezama i odnosima, ali za temeljitiji i manje prijateljski RAML takva mogu\u0107nost ne postoji. Da, mo\u017eete potra\u017eiti ne\u0161to me\u0111u projektima na GitHubu, prona\u0107i ekvivalent i sami ga postaviti. Me\u0111utim, u svakom slu\u010daju, netko \u0107e morati odr\u017eavati portal, \u0161to nije tako zgodno za osnovnu upotrebu ili testne potrebe. Osim toga, Swagger je vi\u0161e \"bezprincipijelan\", ili liberalan \u2014 mo\u017ee se generirati iz komentara u kodu, \u0161to naravno ide protiv na\u010dela API first i nije podr\u017eano ni jednim alatom RAML.<\/p>\n<p>U svoje vrijeme smo po\u010deli raditi s RAML-om, kao fleksibilnijim jezikom, i na kraju smo morali mnogo toga raditi ru\u010dno. Na primjer, u jednom od projekata koristi se alat <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> u unit testovima, koji podr\u017eava samo RAML 0.8. Tako da smo morali dodavati improvizacije, kako bi alat mogao \"konzumirati\" RAML verzije 1.0.<\/p>\n<h3>Je li potrebno birati?<\/h3>\n<p>\nNakon isprobavanja rje\u0161enja ekosustava za RAML, do\u0161li smo do zaklju\u010dka da moramo konvertirati RAML u Swagger 2 i ve\u0107 u njemu provoditi svu automatizaciju, verifikaciju, testiranje i kasniju optimizaciju. To je dobar na\u010din da se istovremeno iskoristi fleksibilnost RAML-a i podr\u0161ka alata zajednice od Swaggera. <\/p>\n<p>Za rje\u0161avanje ovog zadatka postoje dva OpenSource alata koja bi trebala osigurati konverziju ugovora:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 trenutno nepodr\u017eavani alat. Tijekom rada s njim otkrili smo da ima niz problema s kompleksnim RAML-ima koji su \"raspr\u0161eni\" po velikom broju datoteka. Ovaj program je napisan u JavaScriptu i izvr\u0161ava rekurzivnu obrada sintakti\u010dkog stabla. Zbog dinami\u010dkog tipiziranja, snalaziti se u ovom kodu postaje vrlo te\u0161ko, pa smo odlu\u010dili ne tro\u0161iti vrijeme na pisanje zakrpa za umiru\u0107i alat.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 alat iste tvrtke koji tvrdi da je spreman konvertirati sve i sva\u0161ta, u svim smjerovima. Do danas, podr\u017eava RAML 0.8, RAML 1.0 i Swagger 2.0. Me\u0111utim, u vrijeme na\u0161eg istra\u017eivanja, alat je jo\u0161 uvijek bio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">IZUZETNO<\/a><\/noindex> nespretan i neprikladan za kori\u0161tenje. Razvija\u010di stvaraju svojevrsni <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, \u0161to \u0107e im omogu\u0107iti brzo dodavanje novih standarda u budu\u0107nosti. No, trenutno to jednostavno ne funkcionira.<\/li>\n<\/ol>\n<p>\nI to nije sve pote\u0161ko\u0107e s kojima smo se suo\u010dili. Jedan od koraka na\u0161eg pipelinea je provjeriti da li je RAML iz repozitorija ispravan u odnosu na specifikaciju. Isprobali smo nekoliko alata. Uzimaju\u0107i u obzir, svi su se bunili zbog na\u0161ih oznaka na razli\u010ditim mjestima koriste\u0107i razli\u010dite glupe rije\u010di. I to ne uvijek s razlogom :).<\/p>\n<p>Na kraju smo se odlu\u010dili za sada ve\u0107 zastarjeli projekt, koji tako\u0111er ima niz problema (ponekad se ru\u0161i bez razloga, ima problema s radom s regularnim izrazima). Tako da nismo prona\u0161li na\u010din za rje\u0161avanje problema validacije i konverzije pomo\u0107u besplatnih alata, pa smo se odlu\u010dili koristiti komercijalni alat. U budu\u0107nosti, kada OpenSource alati postanu razvijeniji, rje\u0161avanje ovog problema \u0107e mo\u017eda postati lak\u0161e. A za sada su tro\u0161kovi rada i vremena na 'dora\u0111ivanje' djelovali ve\u0107i od cijene komercijalne usluge.<\/p>\n<h3>Zaklju\u010dak<\/h3>\n<p>\nNakon svega ovoga po\u017eeljeli smo podijeliti iskustvo i istaknuti da prilikom odabira alata za opisivanje ugovora trebate jasno odrediti \u0161to \u017eelite i koji bud\u017eet ste spremni ulo\u017eiti. Ako zaboravite na OpenSource, ve\u0107 sada postoji puno usluga i proizvoda koji poma\u017eu u provjeri, konverziji i validaciji. No, oni su skupi, a ponekad \u010dak i vrlo skupi. Za veliku kompaniju takvi tro\u0161kovi su podno\u0161ljivi, ali za startup mogu predstavljati veliki teret.<\/p>\n<p>Odredite skup alata koje \u0107ete koristiti kasnije. Na primjer, ako trebate samo prikazati ugovor, lak\u0161e \u0107e biti koristiti Swagger 2, koji ima lijep API, jer \u0107ete u RAML-u morati sami podignuti i odr\u017eavati servis.<br \/>\n\u0160to vi\u0161e zadataka imate, ve\u0107a \u0107e biti potreba za alatima, a oni su razli\u010diti za razli\u010dite platforme, pa je bolje odmah se upoznati s dostupnim verzijama kako biste donijeli odluku koja \u0107e minimizirati va\u0161e tro\u0161kove u budu\u0107nosti.<\/p>\n<p>No, trebamo priznati da su sve ekosustave koje danas postoje nesavr\u0161ene. Stoga, ako u kompaniji postoje zaljubljenici koji vole raditi u RAML-u jer \"omogu\u0107uje fleksibilnije izra\u017eavanje misli\", ili, s druge strane, preferiraju Swagger jer \"je jasniji\", najbolje je dopustiti im da rade u onome \u010demu su navikli i \u0161to \u017eele, jer alati bilo kojeg od formata zahtijevaju doradu. <\/p>\n<p>\u0160to se ti\u010de na\u0161eg iskustva, u sljede\u0107im postovima \u0107emo govoriti o tome koje stati\u010dke i dinami\u010dke provjere provodimo na temelju na\u0161e RAML-Swagger arhitekture, kao i o dokumentaciji koju generiramo iz ugovora i na koji na\u010din sve to funkcionira.<\/p>\n<p class=\"for_users_only_msg\">Samo registrirani korisnici mogu sudjelovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molimo.<\/p>\n<h2 class=\"default-block__polling-title\">Koji jezik koristite za anotacije ugovora mikroservisa?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    RAML 0.8<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    RAML 1.0<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Swagger 2<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    OAS3 (poznat i kao )<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Blueprint<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Drugo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ne koristim<\/p>\n<\/li>\n<\/ul>\n<p>    Glasalo je 100 korisnika. 24 korisnika su se suzdr\u017eala.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/acronis\/blog\/466691\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0432\u043d\u0435 \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u043e\u0437. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28540,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38022","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=\"\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443.\" \/>\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\/hr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\u0422\u0430\u043a \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 RAML \u0438\u043b\u0438 OAS (Swagger)? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\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-31T19:21:14+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:21:14+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\udd47Pa, RAML ili OAS (Swagger)? | ProHoster","description":"U dinami\u010dnom svijetu mikroservisa, sve se mo\u017ee promijeniti \u2014 bilo koja komponenta se mo\u017ee prepisati na drugom jeziku, koriste\u0107i razli\u010dite frameworke i arhitekturu.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\u0422\u0430\u043a \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 RAML \u0438\u043b\u0438 OAS (Swagger)? | ProHoster","og:description":"\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443.","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","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-31T19:21:14+00:00","article:modified_time":"2019-10-31T19:21:14+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38022","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-23 20:09:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:43:20","updated":"2026-01-23 20:09:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}