{"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\/cs\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Tak co, RAML nebo OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ve dynamick\u00e9m sv\u011bt\u011b mikroslu\u017eeb se m\u016f\u017ee cokoliv zm\u011bnit \u2014 jak\u00e1koliv komponenta m\u016f\u017ee b\u00fdt p\u0159eprogramov\u00e1na v jin\u00e9m jazyce, s pou\u017eit\u00edm jin\u00fdch framework\u016f a architektury. Jedin\u011b smlouvy by m\u011bly z\u016fstat nem\u011bnn\u00e9, aby bylo mo\u017en\u00e9 s mikroslu\u017ebou interagovat z vn\u011bj\u0161ku na n\u011bjak\u00e9m st\u00e1l\u00e9m z\u00e1klad\u011b, bez ohledu na vnit\u0159n\u00ed metamorf\u00f3zy. Dnes se pod\u011bl\u00edme o na\u0161i probl\u00e9movou volbu form\u00e1tu popisu smluv a najdeme artefakty. <\/p>\n<p><img decoding=\"async\" alt=\"Tak co, RAML nebo 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 \/>\nP\u0159\u00edsp\u011bvek p\u0159ipravila <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>Mikroslu\u017eby.<\/b> P\u0159i v\u00fdvoji Acronis Cyber Cloud jsme si uv\u011bdomili, \u017ee se jim nelze vyhnout. A navrhov\u00e1n\u00ed mikroslu\u017eby je nemo\u017en\u00e9 bez formalizace smlouvy, kter\u00e1 p\u0159edstavuje rozhran\u00ed mikroslu\u017eby.<\/p>\n<p>Ale kdy\u017e v produktu je v\u00edce ne\u017e jedna komponenta a v\u00fdvoj smlouvy se st\u00e1v\u00e1 pravidelnou \u010dinnost\u00ed, nevyhnuteln\u011b za\u010dnete uva\u017eovat o optimalizaci procesu. St\u00e1v\u00e1 se z\u0159ejm\u00fdm, \u017ee rozhran\u00ed (smlouva) a implementace (mikroslu\u017eba) by si m\u011bly odpov\u00eddat, \u017ee r\u016fzn\u00e9 komponenty by m\u011bly d\u011blat stejn\u00e9 v\u011bci stejn\u011b, a \u017ee bez centralizovan\u00e9ho rozhodov\u00e1n\u00ed o t\u011bchto z\u00e1le\u017eitostech bude ka\u017ed\u00e9 t\u00fdmu neust\u00e1le tr\u00e1vit \u010das jejich z\u00edsk\u00e1v\u00e1n\u00edm znovu a znovu. <\/p>\n<p><img decoding=\"async\" alt=\"Tak co, RAML nebo OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Sch\u00e9ma mikroslu\u017eeb Amazon z <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">tweety<\/a><\/noindex> Wernera Vogeliusa, CTO Amazon<\/i><br \/>\nV \u010dem spo\u010d\u00edv\u00e1 dilema? De facto existuj\u00ed dva zp\u016fsoby interakce mikroslu\u017eeb \u2013 HTTP Rest a gRPC od spole\u010dnosti Google. Necht\u011bj\u00edce se zapl\u00e9st do technologie Google, jsme zvolili HTTP Rest. Anotace smluv HTTP REST se nej\u010dast\u011bji popisuj\u00ed jedn\u00edm ze dvou form\u00e1t\u016f: RAML a OAS, d\u0159\u00edve zn\u00e1m\u00fd jako Swagger. Proto se ka\u017ed\u00fd t\u00fdm v\u00fdvoj\u00e1\u0159\u016f setk\u00e1v\u00e1 s pot\u0159ebou zvolit si jeden ze standard\u016f. Jak se uk\u00e1zalo, u\u010dinit tuto volbu m\u016f\u017ee b\u00fdt velmi obt\u00ed\u017en\u00e9.<\/p>\n<h3>Pro\u010d jsou anotace pot\u0159ebn\u00e9?<\/h3>\n<p>\nAnotace je pot\u0159eba, aby se extern\u00ed u\u017eivatel mohl snadno orientovat v tom, co m\u016f\u017ee se sv\u00fdm slu\u017ebou prov\u00e1d\u011bt prost\u0159ednictv\u00edm jej\u00edho HTTP rozhran\u00ed. To znamen\u00e1, \u017ee na z\u00e1kladn\u00ed \u00farovni by anotace m\u011bla obsahovat minim\u00e1ln\u011b seznam dostupn\u00fdch zdroj\u016f, jejich HTTP metody, t\u011bla \u017e\u00e1dost\u00ed, v\u00fd\u010det parametr\u016f, specifikaci pot\u0159ebn\u00fdch a podporovan\u00fdch hlavi\u010dek, jako\u017e i k\u00f3dy n\u00e1vratu a form\u00e1ty odpov\u011bd\u00ed. Krajn\u011b d\u016fle\u017eit\u00fdm prvkem anotace kontraktu je tak\u00e9 jejich slovn\u00ed popis (\u201eco se stane, kdy\u017e p\u0159id\u00e1te tento dotazov\u00fd parametr k \u017e\u00e1dosti?\u201c, \u201ev jak\u00e9m p\u0159\u00edpad\u011b se vr\u00e1t\u00ed k\u00f3d 400?\u201c)<\/p>\n<p>Nicm\u00e9n\u011b, pokud jde o v\u00fdvoj velk\u00e9ho mno\u017estv\u00ed mikroslu\u017eeb, chceme z napsan\u00fdch anotac\u00ed z\u00edskat dal\u0161\u00ed u\u017eitek. Nap\u0159\u00edklad na z\u00e1klad\u011b RAML\/Swagger m\u016f\u017eeme generovat jak klientsk\u00fd, tak serverov\u00fd k\u00f3d v obrovsk\u00e9m mno\u017estv\u00ed programovac\u00edch jazyk\u016f. A m\u016f\u017eeme tak\u00e9 automaticky z\u00edskat dokumentaci k mikroslu\u017eb\u011b a nahr\u00e1t ji na v\u00e1\u0161 developersk\u00fd port\u00e1l :).<\/p>\n<p><img decoding=\"async\" alt=\"Tak co, RAML nebo OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>P\u0159\u00edklad strukturovan\u00e9ho popisu kontraktu<\/i><\/p>\n<p>M\u00e9n\u011b \u010dastou prax\u00ed je testov\u00e1n\u00ed mikroslu\u017eeb na z\u00e1klad\u011b popis\u016f kontrakt\u016f. Pokud jste napsali jak anotaci, tak komponent, m\u016f\u017eete vytvo\u0159it automatizovan\u00fd test, kter\u00fd zkontroluje adekv\u00e1tnost fungov\u00e1n\u00ed slu\u017eby s r\u016fzn\u00fdmi typy dat na vstupu. Nevrac\u00ed slu\u017eba k\u00f3d odpov\u011bdi, kter\u00fd nen\u00ed pops\u00e1n v anotaci? Bude schopna spr\u00e1vn\u011b zpracovat zjevn\u011b chybn\u00e1 data?<\/p>\n<p>V\u00edce ne\u017e to, kvalitn\u00ed implementace nejen samotn\u00fdch kontrakt\u016f, ale tak\u00e9 n\u00e1stroj\u016f pro vizualizaci anotac\u00ed usnad\u0148uje pr\u00e1ci s mikroslu\u017ebou. To znamen\u00e1, \u017ee pokud architekt kvalitn\u011b popsal kontrakt, na jeho z\u00e1klad\u011b budou design\u00e9\u0159i a v\u00fdvoj\u00e1\u0159i implementovat slu\u017ebu do jin\u00fdch produkt\u016f bez dodate\u010dn\u00fdch \u010dasov\u00fdch n\u00e1klad\u016f.<\/p>\n<p>Pro pr\u00e1ci s dal\u0161\u00edmi n\u00e1stroji maj\u00ed jak RAML, tak OAS mo\u017enost p\u0159id\u00e1vat metadata, kter\u00e1 nejsou ve standardu zahrnuta (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">nap\u0159\u00edklad, jak se to d\u011bl\u00e1 v OAS<\/a><\/noindex>).<\/p>\n<p>Obecn\u011b plat\u00ed, \u017ee prostor pro kreativitu v aplikaci kontrakt\u016f pro mikroslu\u017eby je obrovsk\u00fd\u2026 alespo\u0148 teoreticky<\/p>\n<h3>Srovn\u00e1n\u00ed je\u017eka s u\u017eovkou<\/h3>\n<p>\nV sou\u010dasn\u00e9 dob\u011b je prioritn\u00edm sm\u011brem v\u00fdvoje v Acronis v\u00fdvoj Acronis Cyber Platform. Acronis Cyber Platform \u2013 to jsou nov\u00e1 m\u00edsta integrace extern\u00edch slu\u017eeb s Acronis Cyber Cloud a agentn\u00ed \u010d\u00e1st\u00ed. A\u010dkoli na\u0161e intern\u00ed API, popsan\u00e1 v RAML, n\u00e1s uspokojovala, pot\u0159eba zve\u0159ejn\u011bn\u00ed API znovu vyvolala ot\u00e1zku v\u00fdb\u011bru: kter\u00fd standard anotac\u00ed je pro na\u0161i pr\u00e1ci lep\u0161\u00ed?<\/p>\n<p>Na za\u010d\u00e1tku se zd\u00e1lo, \u017ee existuj\u00ed dv\u011b \u0159e\u0161en\u00ed \u2013 nejroz\u0161\u00ed\u0159en\u011bj\u0161\u00ed v\u00fdvoj RAML a Swagger (nebo OAS). Ale ve skute\u010dnosti se uk\u00e1zalo, \u017ee alternativ je minim\u00e1ln\u011b 3 nebo v\u00edce.<\/p>\n<p>Na jedn\u00e9 stran\u011b je tu RAML \u2013 mocn\u00fd a efektivn\u00ed jazyk. M\u00e1 dob\u0159e implementovanou hierarchii a d\u011bdi\u010dnost, tak\u017ee tento form\u00e1t je v\u00edce vhodn\u00fd pro velk\u00e9 spole\u010dnosti, kter\u00e9 pot\u0159ebuj\u00ed hodn\u011b popis\u016f \u2013 tedy ne jeden produkt, ale mnoho mikroservis\u016f, kter\u00e9 maj\u00ed spole\u010dn\u00e9 \u010d\u00e1sti kontrakt\u016f \u2013 sch\u00e9mata autentizace, stejn\u00e9 typy dat, t\u011bla chyb.<\/p>\n<p>Ale v\u00fdvoj\u00e1\u0159 RAML, spole\u010dnost Mulesoft, se p\u0159ipojil k konsorciu Open API, kter\u00e9 se zab\u00fdv\u00e1 v\u00fdvojem <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>. Proto RAML pozastavil sv\u016fj v\u00fdvoj. P\u0159edstavte si form\u00e1t ud\u00e1losti jako situaci, kdy hlavn\u00ed \u00fadr\u017eb\u00e1\u0159i hlavn\u00edch komponent Linuxu ode\u0161li pracovat do Microsoftu. Takov\u00e1 situace vytv\u00e1\u0159\u00ed podm\u00ednky pro pou\u017eit\u00ed Swaggeru, kter\u00fd se dynamicky vyv\u00edj\u00ed a v posledn\u00ed \u2013 t\u0159et\u00ed verzi \u2013 t\u00e9m\u011b\u0159 doh\u00e1n\u00ed RAML co do flexibility a funk\u010dnosti.<\/p>\n<h3>Kdyby nebylo jednoho ale\u2026<\/h3>\n<p>\nJak se uk\u00e1zalo, daleko ne v\u0161echny open-source n\u00e1stroje se aktualizovaly na verzi OAS 3.0. Pro mikroservisy na Go bude nejkriti\u010dt\u011bj\u0161\u00ed absence adaptace <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> na novou verzi standardu. Rozd\u00edl mezi Swagger 2 a Swagger 3 je v\u0161ak <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">ohromn\u00fd<\/a><\/noindex>. Nap\u0159\u00edklad v t\u0159et\u00ed verzi v\u00fdvoj\u00e1\u0159i:<\/p>\n<ul>\n<li>vylep\u0161ili popis sch\u00e9mat autentizace<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">dokon\u010dili<\/a><\/noindex> podporu JSON Schema<\/li>\n<li>zlep\u0161ili mo\u017enosti p\u0159id\u00e1v\u00e1n\u00ed p\u0159\u00edklad\u016f<\/li>\n<\/ul>\n<p>\nSituace je pom\u011brn\u011b vtipn\u00e1: p\u0159i v\u00fdb\u011bru standardu je nutn\u00e9 pova\u017eovat RAML, Swagger 2 a Swagger 3 za samostatn\u00e9 alternativy. P\u0159i\u010dem\u017e pouze Swagger 2 m\u00e1 dobrou podporu open-source n\u00e1stroj\u016f. RAML je velmi flexibiln\u00ed\u2026 a slo\u017eit\u00fd, a Swagger 3 m\u00e1 slabou podporu komunity, tak\u017ee budete muset pou\u017e\u00edvat n\u00e1stroje vlastn\u00ed produkce nebo komer\u010dn\u00ed \u0159e\u0161en\u00ed, kter\u00e1 obvykle stoj\u00ed pom\u011brn\u011b draho. <\/p>\n<p>P\u0159i\u010dem\u017e pokud ve Swaggeru existuje mnoho p\u0159\u00edjemn\u00fdch mo\u017enost\u00ed, jako je hotov\u00fd port\u00e1l <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, na kter\u00fd lze nahr\u00e1t anotaci a z\u00edskat jej\u00ed vizualizaci s podrobn\u00fdm popisem, odkazy a vazbami, tak u RAML, kter\u00fd je v\u00edce z\u00e1kladn\u00ed a m\u00e9n\u011b p\u0159\u00edv\u011btiv\u00fd, tato mo\u017enost neexistuje. Ano, lze n\u011bco hledat mezi projekty na GitHubu, naj\u00edt tam analog a sami ho nasadit. Nicm\u00e9n\u011b v ka\u017ed\u00e9m p\u0159\u00edpad\u011b se mus\u00ed n\u011bkdo postar\u00e1t o port\u00e1l, co\u017e nen\u00ed tak pohodln\u00e9 pro z\u00e1kladn\u00ed pou\u017e\u00edv\u00e1n\u00ed nebo testovac\u00ed pot\u0159eby. Krom\u011b toho je swagger v\u00edce \"bezz\u00e1sadov\u00fd\", nebo liber\u00e1ln\u00ed \u2014 lze jej generovat z koment\u00e1\u0159\u016f v k\u00f3du, co\u017e samoz\u0159ejm\u011b odporuje principu API first a nen\u00ed podporov\u00e1no \u017e\u00e1dnou z utilit RAML.<\/p>\n<p>V ur\u010dit\u00e9m okam\u017eiku jsme za\u010dali pracovat s RAML, jako s flexibiln\u011bj\u0161\u00edm jazykem, a nakonec jsme museli mnoho v\u011bc\u00ed d\u011blat vlastn\u00edmi rukama. Nap\u0159\u00edklad v jednom z projekt\u016f se pou\u017e\u00edv\u00e1 utilita <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> v unit testech, kter\u00e1 podporuje pouze RAML 0.8. Tak\u017ee jsme museli p\u0159id\u00e1vat z\u00e1platy, aby utilita mohla \"zpracov\u00e1vat\" RAML verze 1.0.<\/p>\n<h3>Je nutn\u00e9 vyb\u00edrat?<\/h3>\n<p>\nPo zku\u0161enostech s dopisov\u00e1n\u00edm ekosyst\u00e9mu \u0159e\u0161en\u00ed pod RAML jsme dosp\u011bli k z\u00e1v\u011bru, \u017ee pot\u0159ebujeme konvertovat RAML na Swagger 2 a ji\u017e v n\u011bm prov\u00e1d\u011bt celou automatizaci, kontrolu, testov\u00e1n\u00ed a n\u00e1slednou optimalizaci. To je dobr\u00fd zp\u016fsob, jak sou\u010dasn\u011b vyu\u017e\u00edvat flexibilitu RAML a podporu n\u00e1stroj\u016f komunity od Swagger. <\/p>\n<p>Pro vy\u0159e\u0161en\u00ed tohoto \u00fakolu existuj\u00ed dva n\u00e1stroje OpenSource, kter\u00e9 by m\u011bly zaji\u0161\u0165ovat konverzi kontrakt\u016f:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 v sou\u010dasnosti nepodporovan\u00e1 utilita. B\u011bhem pr\u00e1ce s n\u00ed jsme zjistili, \u017ee m\u00e1 \u0159adu probl\u00e9m\u016f se slo\u017eit\u00fdmi RAML, kter\u00e9 jsou \"rozprost\u0159eny\" na velk\u00e9m mno\u017estv\u00ed soubor\u016f. Tento program je naps\u00e1n v JavaScriptu a prov\u00e1d\u00ed rekurzivn\u00ed proch\u00e1zen\u00ed syntaktick\u00e9ho stromu. Kv\u016fli dynamick\u00e9mu typov\u00e1n\u00ed se v tomto k\u00f3du t\u011b\u017eko vyzn\u00e1v\u00e1, tak\u017ee jsme se rozhodli v\u011bnovat \u010das psan\u00ed z\u00e1plat pro um\u00edraj\u00edc\u00ed utilitu.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 n\u00e1stroj od t\u00e9\u017ee spole\u010dnosti, kter\u00fd se sna\u017e\u00ed b\u00fdt p\u0159ipraven na konverzi v\u0161eho a v\u0161emo\u017en\u00e9ho, a to ob\u011bma sm\u011bry. Dnes je deklarov\u00e1na podpora RAML 0.8, RAML 1.0 a Swagger 2.0. Nicm\u00e9n\u011b v okam\u017eiku na\u0161eho zkoum\u00e1n\u00ed byla utilita je\u0161t\u011b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">VELMI<\/a><\/noindex> nedorobena a nepou\u017eiteln\u00e1. V\u00fdvoj\u00e1\u0159i vytv\u00e1\u0159ej\u00ed jak\u00fdsi <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, co\u017e jim v budoucnu umo\u017en\u00ed rychle p\u0159id\u00e1vat nov\u00e9 standardy. Ale zat\u00edm to v\u0161echno prost\u011b nefunguje.<\/li>\n<\/ol>\n<p>\nA to je\u0161t\u011b nejsou v\u0161echny pot\u00ed\u017ee, se kter\u00fdmi jsme se setkali. Jedn\u00edm z krok\u016f na\u0161eho pipeline je ov\u011b\u0159en\u00ed, \u017ee RAML z repozit\u00e1\u0159e je spr\u00e1vn\u00e1 podle specifikace. Vyzkou\u0161eli jsme n\u011bkolik n\u00e1stroj\u016f. Udivuj\u00edc\u00ed je, \u017ee v\u0161echny si st\u011b\u017eovaly na na\u0161e anotace na r\u016fzn\u00fdch m\u00edstech a zcela r\u016fzn\u00fdmi nep\u0159\u00edjemn\u00fdmi slovy. A to ne v\u017edy opr\u00e1vn\u011bn\u011b :).<\/p>\n<p>Nakonec jsme se rozhodli pro nyn\u00ed zastaral\u00fd projekt, kter\u00fd m\u00e1 tak\u00e9 \u0159adu probl\u00e9m\u016f (n\u011bkdy pad\u00e1 na pr\u00e1zdn\u00e9m m\u00edst\u011b, m\u00e1 pot\u00ed\u017ee s prac\u00ed s regul\u00e1rn\u00edmi v\u00fdrazy). Tak\u017ee jsme nenalezli zp\u016fsob, jak vy\u0159e\u0161it \u00fakoly validace a konverze pomoc\u00ed bezplatn\u00fdch n\u00e1stroj\u016f, a rozhodli se pou\u017e\u00edvat komer\u010dn\u00ed utilitu. V budoucnu, a\u017e se n\u00e1stroje OpenSource stanou rozvinut\u011bj\u0161\u00edmi, by mohlo b\u00fdt vy\u0159e\u0161en\u00ed tohoto \u00fakolu jednodu\u0161\u0161\u00ed. A zat\u00edm n\u00e1m \u010dasov\u00e1 a pracovn\u00ed n\u00e1ro\u010dnost 'dokon\u010dov\u00e1n\u00ed' p\u0159ipadala v\u00fdznamn\u011bj\u0161\u00ed ne\u017e cena komer\u010dn\u00edho servisu.<\/p>\n<h3>Z\u00e1v\u011br<\/h3>\n<p>\nPo tom v\u0161em jsme cht\u011bli sd\u00edlet na\u0161e zku\u0161enosti a zd\u016fraznit, \u017ee p\u0159ed volbou n\u00e1stroje pro popis smluv je t\u0159eba jasn\u011b ur\u010dit, co od n\u011bho o\u010dek\u00e1v\u00e1te a jak\u00fd rozpo\u010det jste ochotni vlo\u017eit. Pokud zapomenete na OpenSource, u\u017e nyn\u00ed existuje velk\u00e9 mno\u017estv\u00ed slu\u017eeb a produkt\u016f, kter\u00e9 pomohou prov\u00e9st ov\u011b\u0159en\u00ed, konverzi a validaci. Ale stoj\u00ed hodn\u011b, a n\u011bkdy \u2014 velmi hodn\u011b. Pro velkou spole\u010dnost jsou takov\u00e9 n\u00e1klady \u00fanosn\u00e9, ale pro startup se mohou st\u00e1t velk\u00fdm b\u0159emenem.<\/p>\n<p>Ur\u010dete soubor n\u00e1stroj\u016f, kter\u00e9 budete pou\u017e\u00edvat pozd\u011bji. Nap\u0159\u00edklad, pokud pot\u0159ebujete jen zobrazit smlouvu, bude jednodu\u0161\u0161\u00ed pou\u017e\u00edt Swagger 2, kter\u00fd m\u00e1 kr\u00e1sn\u00e9 API, proto\u017ee v RAML budete muset spustit a udr\u017eovat slu\u017ebu sami.<br \/>\n\u010c\u00edm v\u00edce \u00fakol\u016f budete m\u00edt, t\u00edm \u0161ir\u0161\u00ed bude pot\u0159eba po n\u00e1stroj\u00edch, a ty jsou r\u016fzn\u00e9 pro r\u016fzn\u00e9 platformy, a je lep\u0161\u00ed se nejprve sezn\u00e1mit s dostupn\u00fdmi verzemi, abyste u\u010dinili v\u00fdb\u011br, kter\u00fd minimalizuje va\u0161e n\u00e1klady v budoucnu.<\/p>\n<p>Je t\u0159eba uznat, \u017ee v\u0161echny ekosyst\u00e9my, kter\u00e9 dnes existuj\u00ed, nejsou dokonal\u00e9. Pokud tedy ve firm\u011b jsou fanou\u0161ci, kte\u0159\u00ed r\u00e1di pracuj\u00ed s RAML, proto\u017ee \"umo\u017e\u0148uje flexibiln\u011bji vyjad\u0159ovat my\u0161lenky\", nebo naopak preferuj\u00ed Swagger, proto\u017ee \"je srozumiteln\u011bj\u0161\u00ed\", je nejlep\u0161\u00ed nechat je pracovat v tom, na co jsou zvykl\u00ed a co cht\u011bj\u00ed, proto\u017ee n\u00e1stroje jak\u00e9hokoliv form\u00e1tu vy\u017eaduj\u00ed lad\u011bn\u00ed. <\/p>\n<p>Co se t\u00fd\u010de na\u0161\u00ed zku\u0161enosti, v n\u00e1sleduj\u00edc\u00edch p\u0159\u00edsp\u011bvc\u00edch se pod\u011bl\u00edme o to, jak\u00e9 statick\u00e9 a dynamick\u00e9 kontroly prov\u00e1d\u00edme na z\u00e1klad\u011b na\u0161\u00ed architektury RAML-Swagger, stejn\u011b jako o tom, jakou dokumentaci generujeme z kontrakt\u016f a jak to v\u0161e funguje.<\/p>\n<p class=\"for_users_only_msg\">Pouze registrovan\u00ed u\u017eivatel\u00e9 se mohou \u00fa\u010dastnit ankety. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">P\u0159ihlaste se<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Jak\u00fd jazyk pou\u017e\u00edv\u00e1te pro anotace kontrakt\u016f mikroservis\u016f?<\/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 (jak se tak\u00e9 naz\u00fdv\u00e1)<\/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>                    Jin\u00fd<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nepou\u017e\u00edv\u00e1m<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 100 u\u017eivatel\u016f. Zdr\u017eelo se 24 u\u017eivatel\u016f.<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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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 co, RAML nebo OAS (Swagger)? | ProHoster","description":"Ve dynamick\u00e9m sv\u011bt\u011b mikroservis\u016f se m\u016f\u017ee zm\u011bnit cokoliv \u2014 jakoukoli komponentu lze p\u0159epsat v jin\u00e9m jazyce, s pou\u017eit\u00edm jin\u00fdch framework\u016f a architektur.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}