{"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\/sk\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Tak predsa RAML alebo OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vo dynamickom svete mikroservisov sa m\u00f4\u017ee zmeni\u0165 \u010doko\u013evek \u2014 ak\u00fako\u013evek zlo\u017eku je mo\u017en\u00e9 prep\u00edsa\u0165 v inom jazyku pomocou r\u00f4znych r\u00e1mcov a architekt\u00far. Nemenn\u00e9 musia zosta\u0165 iba zmluvy, aby bolo mo\u017en\u00e9 s mikroservisom interagova\u0165 zvonka na nejakej stabilnej b\u00e1ze, bez oh\u013eadu na vn\u00fatorn\u00e9 metamorf\u00f3zy. A dnes sa s vami podel\u00edme o na\u0161u problematiku vo\u013eby form\u00e1tu popisu zml\u00fav a zdie\u013eame n\u00e1jden\u00e9 artefakty. <\/p>\n<p><img decoding=\"async\" alt=\"Tak predsa RAML alebo 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 \/>\nPr\u00edspevok pripravil <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melechova<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Mikroservisy.<\/b> Pri v\u00fdvoji Acronis Cyber Cloud sme si uvedomili, \u017ee sa im nedok\u00e1\u017eeme vyhn\u00fa\u0165. N\u00e1vrh mikroservisu nie je mo\u017en\u00fd bez formaliz\u00e1cie zmluvy, ktor\u00e1 predstavuje rozhranie mikroservisu.<\/p>\n<p>Ale ke\u010f produkt obsahuje viac ne\u017e jednu zlo\u017eku a v\u00fdvoj zmluvy sa st\u00e1va pravidelnou aktivitou, nevyhnutne za\u010dnete uva\u017eova\u0165 o optimaliz\u00e1cii procesu. St\u00e1va sa o\u010dividn\u00fdm, \u017ee rozhranie (zmluva) a implement\u00e1cia (mikroservis) si musia navz\u00e1jom zodpoveda\u0165, \u017ee r\u00f4zne zlo\u017eky by mali robi\u0165 rovnak\u00e9 veci rovnak\u00fdm sp\u00f4sobom, a \u017ee bez centralizovan\u00e9ho prij\u00edmania v\u0161etk\u00fdch t\u00fdchto rozhodnut\u00ed bude ka\u017ed\u00e9 t\u00edm n\u00faten\u00fd znova a znova str\u00e1ca\u0165 \u010das ich z\u00edskavan\u00edm. <\/p>\n<p><img decoding=\"async\" alt=\"Tak predsa RAML alebo OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Sch\u00e9ma mikroservisov Amazon z <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">tweety<\/a><\/noindex> Wernera Vogelesa, CTO Amazon<\/i><br \/>\nV \u010dom spo\u010d\u00edva dilema? De facto existuj\u00fa dva sp\u00f4soby interakcie mikroservisov \u2013 HTTP Rest a gRPC od spolo\u010dnosti Google. Aby sme sa nechceli zap\u00e1ja\u0165 do technologick\u00e9ho z\u00e1sobn\u00edka Google, zvolili sme HTTP Rest. Anot\u00e1cie k zmluv\u00e1m HTTP REST sa naj\u010dastej\u0161ie opisuj\u00fa jedn\u00fdm z dvoch form\u00e1tov: RAML a OAS, predt\u00fdm zn\u00e1my ako Swagger. Preto sa ka\u017ed\u00e9 v\u00fdvoj\u00e1rske t\u00edm stret\u00e1va s potrebou urobi\u0165 vo\u013ebu v prospech jedn\u00e9ho z \u0161tandardov. Ale ako sa uk\u00e1zalo, urobi\u0165 t\u00fato vo\u013ebu m\u00f4\u017ee by\u0165 ve\u013emi zlo\u017eit\u00e9.<\/p>\n<h3>Na \u010do s\u00fa anot\u00e1cie potrebn\u00e9?<\/h3>\n<p>\nAnot\u00e1cia je potrebn\u00e1 na to, aby extern\u00fd pou\u017e\u00edvate\u013e mohol \u013eahko pochopi\u0165, \u010do m\u00f4\u017ee robi\u0165 s va\u0161ou slu\u017ebou cez jej HTTP rozhranie. To znamen\u00e1, \u017ee na z\u00e1kladnej \u00farovni by mala anot\u00e1cia obsahova\u0165 minim\u00e1lne zoznam dostupn\u00fdch zdrojov, ich HTTP met\u00f3d, tel\u00e1 dopytov, vymenovanie parametrov, uvedenie nevyhnutn\u00fdch a podporovan\u00fdch hlavi\u010diek, ako aj k\u00f3dov n\u00e1vratu a form\u00e1tov odpoved\u00ed. Mimoriadne d\u00f4le\u017eit\u00fdm prvkom anot\u00e1cie zmluvy je aj ich slovn\u00fd opis (\u201e\u010do sa stane, ak prid\u00e1te tento query parameter k dopytu?\u201c, \u201ev ak\u00fdch pr\u00edpadoch sa vr\u00e1ti k\u00f3d 400?\u201c)<\/p>\n<p>Napriek tomu, ke\u010f ide o v\u00fdvoj ve\u013ek\u00e9ho mno\u017estva mikroslu\u017eieb, je mo\u017en\u00e9 z\u00edska\u0165 \u010fal\u0161ie v\u00fdhody z nap\u00edsan\u00fdch anot\u00e1ci\u00ed. Napr\u00edklad, na z\u00e1klade RAML\/Swagger je mo\u017en\u00e9 generova\u0165 klientsky aj serverov\u00fd k\u00f3d na obrovskom mno\u017estve programovac\u00edch jazykov. Okrem toho je mo\u017en\u00e9 automaticky z\u00edskava\u0165 dokument\u00e1ciu k mikroslu\u017ebe a nahr\u00e1va\u0165 ju na v\u00e1\u0161 developer-portal : ).<\/p>\n<p><img decoding=\"async\" alt=\"Tak predsa RAML alebo OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Pr\u00edklad \u0161trukt\u00farovan\u00e9ho opisu zmluvy<\/i><\/p>\n<p>Zriedkavej\u0161ie sa stret\u00e1va prax testovania mikroslu\u017eieb na z\u00e1klade opisov zml\u00fav. Ak ste nap\u00edsali ako anot\u00e1ciu, tak aj komponent, m\u00f4\u017eete vytvori\u0165 autotest, ktor\u00fd over\u00ed primeranos\u0165 fungovania slu\u017eby s r\u00f4znymi typmi d\u00e1t na vstupe. Nevracia slu\u017eba k\u00f3d odpovede, ktor\u00fd nie je op\u00edsan\u00fd v anot\u00e1cii? Dok\u00e1\u017ee spr\u00e1vne spracova\u0165 zjavne nespr\u00e1vne d\u00e1ta?<\/p>\n<p>Navy\u0161e, kvalitn\u00e1 implement\u00e1cia nie len samotn\u00fdch zml\u00fav, ale aj n\u00e1strojov na vizualiz\u00e1ciu anot\u00e1ci\u00ed umo\u017e\u0148uje zjednodu\u0161i\u0165 pr\u00e1cu s mikroslu\u017ebou. T\u00fdm p\u00e1dom, ak architekt kvalitne op\u00edsal zmluvu, na jej z\u00e1klade dizajn\u00e9ri a v\u00fdvoj\u00e1ri bud\u00fa implementova\u0165 slu\u017ebu do in\u00fdch produktov bez dodato\u010dn\u00fdch \u010dasov\u00fdch n\u00e1kladov.<\/p>\n<p>Na pr\u00e1cu s dodato\u010dn\u00fdmi n\u00e1strojmi RAML aj OAS maj\u00fa mo\u017enos\u0165 prida\u0165 metad\u00e1ta, ktor\u00e9 nie s\u00fa predp\u00edsan\u00e9 \u0161tandardom (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">napr\u00edklad, takto sa to rob\u00ed v OAS<\/a><\/noindex>).<\/p>\n<p>Celkovo je pole pre kreativitu v aplik\u00e1cii zml\u00fav pre mikroslu\u017eby obrovsk\u00e9... aspo\u0148 teoreticky<\/p>\n<h3>Porovnanie je\u017eka s hadom<\/h3>\n<p>\nV s\u00fa\u010dasnosti je prioritn\u00fdm smerom v\u00fdvoja v Acronis rozvoj Acronis Cyber Platform. Acronis Cyber Platform s\u00fa nov\u00e9 body integr\u00e1cie extern\u00fdch slu\u017eieb s Acronis Cyber Cloud a agendovou \u010das\u0165ou. Hoci na\u0161e intern\u00e9 API, op\u00edsan\u00e9 v RAML, n\u00e1m vyhovovali, potreba publikovania API op\u00e4\u0165 vyvolala ot\u00e1zku v\u00fdberu: ktor\u00fd \u0161tandard anot\u00e1ci\u00ed je pre na\u0161u pr\u00e1cu najlep\u0161\u00ed?<\/p>\n<p>Najprv sa zdalo, \u017ee existuj\u00fa dve rie\u0161enia \u2014 najroz\u0161\u00edrenej\u0161ie v\u00fdvojov\u00e9 r\u00e1mce RAML a Swagger (alebo OAS). Ale v skuto\u010dnosti sa uk\u00e1zalo, \u017ee alternat\u00edv je aspo\u0148 nie 2, ale 3 alebo viac.<\/p>\n<p>Na jednej strane je tu RAML \u2013 mocn\u00fd a efekt\u00edvny jazyk. V \u0148om je dobre implementovan\u00e1 hierarchia a dedenie, tak\u017ee tento form\u00e1t je vhodnej\u0161\u00ed pre ve\u013ek\u00e9 spolo\u010dnosti, ktor\u00e9 potrebuj\u00fa mno\u017estvo popisov \u2014 teda nie jeden produkt, ale mnoho mikroslu\u017eieb, ktor\u00e9 maj\u00fa spolo\u010dn\u00e9 \u010dasti kontraktov \u2014 sch\u00e9my autentifik\u00e1cie, rovnak\u00e9 typy d\u00e1t, tel\u00e1 ch\u00fdb.<\/p>\n<p>Ale v\u00fdvoj\u00e1r RAML, spolo\u010dnos\u0165 Mulesoft, sa pripojil k konzorciu Open API, ktor\u00e9 sa zaober\u00e1 rozvojom <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>. Preto sa v\u00fdvoj RAML pozastavil. Aby ste si predstavili form\u00e1t udalosti, predstavte si, \u017ee spr\u00e1vcovia hlavn\u00fdch komponentov Linuxu odi\u0161li pracova\u0165 do Microsoftu. Tak\u00e1 situ\u00e1cia vytv\u00e1ra predpoklady na pou\u017eitie Swagger, ktor\u00fd sa dynamicky vyv\u00edja a v poslednej \u2014 tretej verzii \u2014 takmer dobehne RAML z poh\u013eadu flexibility a funk\u010dnosti.<\/p>\n<h3>Keby nebolo jedn\u00e9ho \"ale\"...<\/h3>\n<p>\nAko sa uk\u00e1zalo, \u010faleko nie v\u0161etky open-source n\u00e1stroje sa aktualizovali na verziu OAS 3.0. Pre mikroslu\u017eby na Go bude najkritickej\u0161\u00edm ch\u00fdbaj\u00faca adapt\u00e1cia <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> na \u010derstv\u00fa verziu \u0161tandardu. Rozdiel medzi Swagger 2 a Swagger 3 je <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">obrovsk\u00fd<\/a><\/noindex>. Napr\u00edklad v tretej verzii v\u00fdvoj\u00e1ri:<\/p>\n<ul>\n<li>vylep\u0161ili popis sch\u00e9m autentifik\u00e1cie<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">dopracovali<\/a><\/noindex> podporu JSON Schema<\/li>\n<li>zv\u00fd\u0161ili mo\u017enos\u0165 prid\u00e1vania pr\u00edkladov<\/li>\n<\/ul>\n<p>\nSitu\u00e1cia je z\u00e1bavn\u00e1: pri v\u00fdbere \u0161tandardu je potrebn\u00e9 pova\u017eova\u0165 RAML, Swagger 2 a Swagger 3 za samostatn\u00e9 alternat\u00edvy. Pri tom m\u00e1 len Swagger 2 dobr\u00fa podporu n\u00e1strojov OpenSource. RAML je ve\u013emi flexibiln\u00fd\u2026 a zlo\u017eit\u00fd, zatia\u013e \u010do Swagger 3 je slab\u0161ie podporovan\u00fd komunitou, tak\u017ee budete musie\u0165 pou\u017e\u00edva\u0165 n\u00e1stroje vlastn\u00e9ho v\u00fdvoja alebo komer\u010dn\u00e9 rie\u0161enia, ktor\u00e9 zvy\u010dajne stoja dos\u0165 ve\u013ea. <\/p>\n<p>Pri tom ak existuje mnoho pr\u00edjemn\u00fdch mo\u017enost\u00ed v Swagger, ako je hotov\u00fd port\u00e1l <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, na ktor\u00fd m\u00f4\u017eete nahra\u0165 anot\u00e1ciu a z\u00edska\u0165 jej vizualiz\u00e1ciu s podrobn\u00fdm popisom, odkazmi a vz\u0165ahmi, av\u0161ak pre RAML, ktor\u00fd je z\u00e1kladnej\u0161\u00ed a menej priate\u013esk\u00fd, nie je tak\u00e1to mo\u017enos\u0165 k dispoz\u00edcii. \u00c1no, m\u00f4\u017eete sa pok\u00fasi\u0165 nie\u010do n\u00e1js\u0165 medzi projektmi na GitHub, n\u00e1js\u0165 tam podobn\u00fd n\u00e1stroj a samostatne ho rozbehn\u00fa\u0165. Napriek tomu by sa niekto mal postara\u0165 o port\u00e1l, \u010do nie je ve\u013emi pohodln\u00e9 na z\u00e1kladn\u00e9 pou\u017e\u00edvanie alebo testovacie potreby. Okrem toho, swagger je viac 'bez z\u00e1sad', alebo liber\u00e1lny - m\u00f4\u017ee sa generova\u0165 z koment\u00e1rov v k\u00f3de, \u010do samozrejme ide proti princ\u00edpu API first a nijak\u00e1 z RAML util\u00edt to nepodporuje.<\/p>\n<p>V minulosti sme za\u010dali pracova\u0165 s RAML, ako s flexibilnej\u0161\u00edm jazykom, a nakoniec sme museli ve\u013ea robi\u0165 sami. Napr\u00edklad, v jednom z projektov pou\u017e\u00edvame n\u00e1stroj <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> v jednotkov\u00fdch testoch, ktor\u00fd podporuje len RAML 0.8. Tak\u017ee sme museli prida\u0165 obmedzenia, aby n\u00e1stroj mohol 'jes\u0165' RAML verzie 1.0.<\/p>\n<h3>A je potrebn\u00e9 vybera\u0165?<\/h3>\n<p>\nPo mno\u017estve dodato\u010dn\u00e9ho p\u00edsania ekosyst\u00e9mu rie\u0161en\u00ed pre RAML sme dospeli k z\u00e1veru, \u017ee potrebujeme konvertova\u0165 RAML na Swagger 2 a u\u017e v \u0148om vykon\u00e1va\u0165 v\u0161etku automatiz\u00e1ciu, kontrolu, testovanie a n\u00e1sledn\u00fa optimaliz\u00e1ciu. Toto je dobr\u00fd sp\u00f4sob, ako vyu\u017ei\u0165 flexibilitu RAML a podporu tento n\u00e1stroj od komunity Swagger. <\/p>\n<p>Na tento probl\u00e9m existuj\u00fa dva OpenSource n\u00e1stroje, ktor\u00e9 by mali zabezpe\u010di\u0165 konverziu kontraktov:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 v s\u00fa\u010dasnosti nepodporovan\u00e1 utilita. Po\u010das pr\u00e1ce s \u0148ou sme zistili, \u017ee m\u00e1 mno\u017estvo probl\u00e9mov so zlo\u017eit\u00fdmi RAML, ktor\u00e9 s\u00fa 'rozpt\u00fdlen\u00e9' v mnoh\u00fdch s\u00faboroch. Tento program je nap\u00edsan\u00fd v JavaScripte a vykon\u00e1va rekurz\u00edvne prech\u00e1dzanie syntaktick\u00e9ho stromu. Kv\u00f4li dynamick\u00e9mu typizovaniu sa v tomto k\u00f3de \u0165a\u017eko orientuje, tak\u017ee sme sa rozhodli nestr\u00e1ca\u0165 \u010das p\u00edsan\u00edm z\u00e1plat pre umieraj\u00facu utilitu.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 n\u00e1stroj od tej istej spolo\u010dnosti, ktor\u00e1 sa sna\u017e\u00ed konvertova\u0165 v\u0161etko a v\u0161ade, a to v akomko\u013evek smere. K dne\u0161n\u00e9mu d\u0148u je deklarovan\u00e1 podpora RAML 0.8, RAML 1.0 a Swagger 2.0. Av\u0161ak v \u010dase na\u0161ich v\u00fdskumov bola utilita e\u0161te <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">OVER<\/a><\/noindex> nezrel\u00e1 a nepou\u017eite\u013en\u00e1. V\u00fdvoj\u00e1ri vytv\u00e1raj\u00fa ak\u00fdsi <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, \u010do im v bud\u00facnosti umo\u017en\u00ed r\u00fdchlo prid\u00e1va\u0165 nov\u00e9 \u0161tandardy. Ale zatia\u013e to jednoducho nefunguje.<\/li>\n<\/ol>\n<p>\nA to nie s\u00fa v\u0161etky komplik\u00e1cie, ktor\u00fdm \u010del\u00edme. Jedn\u00fdm zo krokov n\u00e1\u0161ho pipeline je overenie toho, \u017ee RAML z repozit\u00e1ra je spr\u00e1vne vzh\u013eadom na \u0161pecifik\u00e1ciu. Vysk\u00fa\u0161ali sme nieko\u013eko n\u00e1strojov. Prekvapuj\u00face je, \u017ee v\u0161etky sa s\u0165a\u017eovali na na\u0161e anot\u00e1cie na r\u00f4znych miestach a \u00faplne r\u00f4znymi nevhodn\u00fdmi slovami. A nie v\u017edy to bolo na mieste :).<\/p>\n<p>Nakoniec sme sa rozhodli pre dnes u\u017e zastaran\u00fd projekt, ktor\u00fd m\u00e1 tie\u017e mno\u017estvo probl\u00e9mov (niekedy sa zr\u00fati bez zjavn\u00e9ho d\u00f4vodu, m\u00e1 probl\u00e9my pri pr\u00e1ci s regul\u00e1rnymi v\u00fdrazmi). Tak\u017ee sme nena\u0161li sp\u00f4sob, ako vyrie\u0161i\u0165 \u00falohy valid\u00e1cie a konverzie na z\u00e1klade bezplatn\u00fdch n\u00e1strojov, a rozhodli sme sa vyu\u017ei\u0165 komer\u010dn\u00fd n\u00e1stroj. V bud\u00facnosti, ke\u010f sa OpenSource n\u00e1stroje stan\u00fa vyvinutej\u0161\u00edmi, bude mo\u017eno rie\u0161enie tejto \u00falohy jednoduch\u0161ie. A zatia\u013e sa n\u00e1m n\u00e1klady na \u201edodato\u010dn\u00e9 doladenie\u201c zdali by\u0165 v\u00e4\u010d\u0161ie, ako n\u00e1klady na komer\u010dn\u00fa slu\u017ebu.<\/p>\n<h3>Z\u00e1ver<\/h3>\n<p>\nPo v\u0161etkom tom sme mali chu\u0165 podeli\u0165 sa o sk\u00fasenosti a poznamena\u0165, \u017ee pred v\u00fdberom n\u00e1stroja na popis zml\u00fav je potrebn\u00e9 presne definova\u0165, \u010do od neho o\u010dak\u00e1vate, a ak\u00fd rozpo\u010det ste ochotn\u00ed investova\u0165. Ak zabudneme na OpenSource, u\u017e teraz existuje mno\u017estvo slu\u017eieb a produktov, ktor\u00e9 v\u00e1m pom\u00f4\u017eu s overen\u00edm, konverziou a valid\u00e1ciou. Ale s\u00fa drah\u00e9, a niekedy ve\u013emi drah\u00e9. Pre ve\u013ek\u00fa spolo\u010dnos\u0165 s\u00fa tieto n\u00e1klady prijate\u013en\u00e9, ale pre startupy m\u00f4\u017eu predstavova\u0165 ve\u013ek\u00e9 za\u0165a\u017eenie.<\/p>\n<p>Definujte s\u00fabor n\u00e1strojov, ktor\u00e9 budete nesk\u00f4r pou\u017e\u00edva\u0165. Napr\u00edklad, ak potrebujete iba zobrazi\u0165 zmluvu, bude jednoduch\u0161ie pou\u017ei\u0165 Swagger 2, ktor\u00fd m\u00e1 pekn\u00e9 API, lebo v RAML budete musie\u0165 prev\u00e1dzkova\u0165 a udr\u017eiava\u0165 slu\u017ebu sami.<br \/>\n\u010c\u00edm viac \u00faloh budete ma\u0165, t\u00fdm \u0161ir\u0161ia bude potreba n\u00e1strojov, a tie s\u00fa r\u00f4zne pre r\u00f4zne platformy, a je lep\u0161ie sa hne\u010f obozn\u00e1mi\u0165 s dostupn\u00fdmi verziami, aby ste mali na v\u00fdber, ktor\u00fd minimalizuje va\u0161e bud\u00face n\u00e1klady.<\/p>\n<p>Je d\u00f4le\u017eit\u00e9 uzna\u0165, \u017ee v\u0161etky ekosyst\u00e9my, ktor\u00e9 dnes existuj\u00fa, s\u00fa nedokonal\u00e9. Preto, ak m\u00e1 spolo\u010dnos\u0165 fan\u00fa\u0161ikov, ktor\u00ed uprednost\u0148uj\u00fa pr\u00e1cu v RAML, preto\u017ee \"umo\u017e\u0148uje flexibilnej\u0161ie vyjadri\u0165 my\u0161lienky\", alebo naopak, t\u00fdch, ktor\u00ed preferuj\u00fa Swagger, preto\u017ee \"je preh\u013eadnej\u0161\u00ed\", je najlep\u0161ie necha\u0165 ich pracova\u0165 s t\u00fdm, na \u010do s\u00fa zvyknut\u00ed a \u010do chc\u00fa, preto\u017ee n\u00e1stroje oboch form\u00e1tov vy\u017eaduj\u00fa doladenie. <\/p>\n<p>Pokia\u013e ide o na\u0161e sk\u00fasenosti, v nasleduj\u00facich pr\u00edspevkoch sa podel\u00edme o to, ak\u00e9 statick\u00e9 a dynamick\u00e9 kontroly vykon\u00e1vame na na\u0161ej RAML-Swagger architekt\u00fare, ako aj o tom, ak\u00fa dokument\u00e1ciu generujeme z kontraktov a ako to v\u0161etko funguje.<\/p>\n<p class=\"for_users_only_msg\">Len registrovan\u00ed pou\u017e\u00edvatelia sa m\u00f4\u017eu z\u00fa\u010dastni\u0165 prieskumu. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prihl\u00e1ste sa<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Ak\u00fd jazyk pou\u017e\u00edvate na anot\u00e1cie kontraktov mikroslu\u017eieb?<\/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 (t.j. Swagger)<\/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>                    In\u00fd<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nepou\u017e\u00edvam<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 100 pou\u017e\u00edvate\u013eov. Zdr\u017ealo sa 24 pou\u017e\u00edvate\u013eov.<br \/>\n<br \/>Zdroj: <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.3 - 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\/sk\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Tak\u017ee RAML alebo OAS (Swagger)? | ProHoster","description":"V dynamickom svete mikroslu\u017eieb sa m\u00f4\u017ee zmeni\u0165 \u010doko\u013evek \u2014 ak\u00fako\u013evek s\u00fa\u010das\u0165 je mo\u017en\u00e9 prepisova\u0165 v inom jazyku, pri\u010dom sa pou\u017e\u00edvaj\u00fa in\u00e9 r\u00e1mce a architekt\u00fara.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}