{"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\/ro\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Deci, RAML sau OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00cen lumea dinamic\u0103 a microserviciilor, orice component\u0103 poate fi rescris\u0103 \u00eentr-o alt\u0103 limb\u0103, folosind cadre \u0219i arhitecturi diferite. Contractele ar trebui s\u0103 r\u0103m\u00e2n\u0103 constant, astfel \u00eenc\u00e2t microserviciile s\u0103 poat\u0103 interac\u021biona extern pe o baz\u0103 constant\u0103, indiferent de metamorfozele interne. Ast\u0103zi, vom vorbi despre dilema noastr\u0103 \u00een privin\u021ba alegerii formatului de descriere a contractelor \u0219i vom \u00eemp\u0103rt\u0103\u0219i artefactele descoperite. <\/p>\n<p><img decoding=\"async\" alt=\"Deci, RAML sau 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 \/>\nPostarea a fost preg\u0103tit\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekhova<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapa\u021bin<\/a><\/noindex> <\/p>\n<p><b>Microservicii.<\/b> \u00cen dezvoltarea Acronis Cyber Cloud, am realizat c\u0103 nu ne putem feri de ele. Proiectarea unui microserviciu este imposibil\u0103 f\u0103r\u0103 formalizarea contractului, care reprezint\u0103 interfa\u021ba microserviciului.<\/p>\n<p>Dar c\u00e2nd produsul con\u021bine mai mult dec\u00e2t o singur\u0103 component\u0103 \u0219i dezvoltarea contractului devine o activitate regulat\u0103, \u00eencepi s\u0103 te g\u00e2nde\u0219ti inevitabil la optimizarea procesului. Devine evident c\u0103 interfa\u021ba (contractul) \u0219i implementarea (microserviciul) trebuie s\u0103 corespund\u0103, c\u0103 diferite componente trebuie s\u0103 fac\u0103 acelea\u0219i lucruri \u00een mod uniform \u0219i c\u0103, f\u0103r\u0103 o decizie centralizat\u0103, fiecare echip\u0103 va fi nevoit\u0103 s\u0103 \u00ee\u0219i piard\u0103 timpul repetat \u00een ob\u021binerea acestor decizii. <\/p>\n<p><img decoding=\"async\" alt=\"Deci, RAML sau OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Schema microserviciilor Amazon din <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">tweet<\/a><\/noindex> al lui Werner Vogels, CTO Amazon<\/i><br \/>\nCare este dilema? De facto, exist\u0103 dou\u0103 moduri de interac\u021biune \u00eentre microservicii \u2013 HTTP Rest \u0219i gRPC de la Google. Neav\u00e2nd dorin\u021ba de a fi implica\u021bi \u00een tehnologiile Google, am ales HTTP Rest. Anot\u0103rile pentru contractele HTTP REST sunt, de obicei, descrise \u00eentr-unul dintre cele dou\u0103 formate: RAML \u0219i OAS, anterior cunoscut ca Swagger. Prin urmare, fiecare echip\u0103 de dezvoltatori se confrunt\u0103 cu necesitatea de a alege unul dintre standarde. Dar, dup\u0103 cum s-a dovedit, aceast\u0103 alegere poate fi foarte complicat\u0103.<\/p>\n<h3>De ce sunt necesare anot\u0103rile?<\/h3>\n<p>\nO not\u0103 explicativ\u0103 este necesar\u0103 pentru ca utilizatorul extern s\u0103 poat\u0103 \u00een\u021belege cu u\u0219urin\u021b\u0103 ce se poate face cu serviciul dvs. prin intermediul interfe\u021bei HTTP. Astfel, la un nivel de baz\u0103, nota trebuie s\u0103 con\u021bin\u0103 cel pu\u021bin o list\u0103 a resurselor disponibile, metodele HTTP, trupurile cererilor, enumerarea parametrilor, specificarea antetelor necesare \u0219i acceptate, precum \u0219i codurile de r\u0103spuns \u0219i formatele r\u0103spunsurilor. Un element extrem de important al notei contractului este \u0219i descrierea verbal\u0103 a acestora (\u201ece se va \u00eent\u00e2mpla dac\u0103 ad\u0103ug\u0103m acest parametru de interogare \u00een cerere?\u201d, \u201e\u00een ce caz va reveni codul 400?\u201d)<\/p>\n<p>Cu toate acestea, atunci c\u00e2nd vine vorba de dezvoltarea unui num\u0103r mare de microservicii, se dore\u0219te extragerea de beneficii suplimentare din notele scrise. De exemplu, pe baza RAML\/Swagger se pot genera at\u00e2t coduri client, c\u00e2t \u0219i server pentru un num\u0103r uria\u0219 de limbaje de programare. De asemenea, se poate ob\u021bine automat documenta\u021bia pentru microserviciu \u0219i o poate \u00eenc\u0103rca pe portalul dvs. de dezvoltatori :).<\/p>\n<p><img decoding=\"async\" alt=\"Deci, RAML sau OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Exemplu de descriere structurat\u0103 a contractului<\/i><\/p>\n<p>Practica test\u0103rii microserviciilor pe baza descrierilor contractelor este mai rar \u00eent\u00e2lnit\u0103. Dac\u0103 a\u021bi scris at\u00e2t nota, c\u00e2t \u0219i componenta, atunci se poate crea un test automat care s\u0103 verifice adecvarea func\u021bion\u0103rii serviciului cu diferite tipuri de date la intrare. Serviciul \u00eentoarce un cod de r\u0103spuns nerecunoscut \u00een not\u0103? Poate s\u0103 proceseze corect datele evident gre\u0219ite?<\/p>\n<p>Mai mult dec\u00e2t at\u00e2t, o implementare de calitate nu doar a contractelor, ci \u0219i a instrumentelor pentru vizualizarea notelor permite simplificarea lucrului cu microserviciul. Adic\u0103, dac\u0103 arhitectul a descris cu rigurositate contractul, pe baza acestuia, designerii \u0219i dezvoltatorii vor integra serviciul \u00een alte produse f\u0103r\u0103 cheltuieli de timp suplimentare.<\/p>\n<p>Pentru func\u021bionarea instrumentelor suplimentare, at\u00e2t RAML, c\u00e2t \u0219i OAS au capacitatea de a ad\u0103uga metadate, neprev\u0103zute de standard (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">de exemplu, a\u0219a cum se face \u00een OAS<\/a><\/noindex>).<\/p>\n<p>\u00cen general, c\u00e2mpul pentru creativitate \u00een aplicarea contractelor pentru microservicii este imens\u2026 cel pu\u021bin teoretic<\/p>\n<h3>Compararea ariciului cu \u0219arpele<\/h3>\n<p>\n\u00cen prezent, direc\u021bia prioritar\u0103 de dezvoltare la Acronis este Acronis Cyber Platform. Acronis Cyber Platform reprezint\u0103 noi puncte de integrare pentru servicii externe cu Acronis Cyber Cloud \u0219i partea agentului. De\u0219i API-urile noastre interne, descrise \u00een RAML, erau satisf\u0103c\u0103toare, necesitatea public\u0103rii API-ului a readus \u00een discu\u021bie alegerea: care standard de anotare ar fi mai bun pentru na\u0219tere?<\/p>\n<p>Ini\u021bial, p\u0103rea c\u0103 exist\u0103 dou\u0103 solu\u021bii \u2014 cele mai comune dezvolt\u0103ri sunt RAML \u0219i Swagger (sau OAS). Dar, de fapt, s-a dovedit c\u0103 alternativele sunt cel pu\u021bin 2, ba chiar 3 sau mai multe.<\/p>\n<p>Pe de o parte, exist\u0103 RAML \u2014 un limbaj puternic \u0219i eficient. Acesta are o ierarhie \u0219i mo\u0219tenire bine implementate, astfel \u00eenc\u00e2t acest format se potrive\u0219te mai bine companiilor mari, care necesit\u0103 multe descrieri \u2014 adic\u0103 nu un singur produs, ci multe microservicii care au p\u0103r\u021bi comune ale contractelor \u2014 scheme de autentificare, tipuri de date identice, corpuri de erori.<\/p>\n<p>Dar dezvoltatorul RAML, compania Mulesoft, s-a al\u0103turat consor\u021biului Open API, care se ocup\u0103 cu evolu\u021bia <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>. A\u0219adar, RAML \u0219i-a oprit dezvoltarea. Pentru a-\u021bi imagina formatul evenimentului, imagineaz\u0103-\u021bi c\u0103 mentenanii componentelor de baz\u0103 Linux au plecat s\u0103 lucreze la Microsoft. Aceast\u0103 situa\u021bie creeaz\u0103 premisele pentru utilizarea Swagger, care se dezvolt\u0103 dinamic \u0219i, \u00een ultima \u2014 a treia versiune \u2014 aproape ajunge la RAML \u00een ceea ce prive\u0219te flexibilitatea \u0219i func\u021bionalitatea.<\/p>\n<h3>Dac\u0103 nu ar fi un aspect\u2026<\/h3>\n<p>\nDup\u0103 cum s-a dovedit, nu toate utilitarele open-source s-au actualizat la versiunea OAS 3.0. Pentru microservicii pe Go, lipsa adapt\u0103rii <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> la noua versiune a standardului va fi cea mai critic\u0103. Totu\u0219i, diferen\u021ba dintre Swagger 2 \u0219i Swagger 3 este <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">imens\u0103<\/a><\/noindex>. De exemplu, \u00een a treia versiune, dezvoltatorii:<\/p>\n<ul>\n<li>au \u00eembun\u0103t\u0103\u021bit descrierea schemelor de autentificare<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">au finalizat<\/a><\/noindex> suportul pentru JSON Schema<\/li>\n<li>au \u00eembun\u0103t\u0103\u021bit capabilitatea de a ad\u0103uga exemple<\/li>\n<\/ul>\n<p>\nSitua\u021bia devine amuzant\u0103: atunci c\u00e2nd alege\u021bi un standard, trebuie s\u0103 lua\u021bi \u00een considerare RAML, Swagger 2 \u0219i Swagger 3 ca alternative separate. \u00cen acest context, doar Swagger 2 are un bun suport pentru uneltele OpenSource. RAML este foarte flexibil\u2026 \u0219i complex, iar Swagger 3 este slab sus\u021binut de comunitate, a\u0219a c\u0103 va trebui s\u0103 folosi\u021bi unelte dezvoltate intern sau solu\u021bii comerciale, care, \u00een general, sunt destul de costisitoare. <\/p>\n<p>\u00cen acela\u0219i timp, de\u0219i Swagger ofer\u0103 multe oportunit\u0103\u021bi pl\u0103cute, cum ar fi un portal gata preg\u0103tit <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, unde se poate \u00eenc\u0103rca o adnotare \u0219i ob\u021bine vizualizarea acesteia cu o descriere detaliat\u0103, linkuri \u0219i rela\u021bii; \u00eens\u0103 pentru RAML, care este mai fundamental \u0219i mai pu\u021bin prietenos, nu exist\u0103 o asemenea posibilitate. Da, po\u021bi c\u0103uta ceva printre proiectele de pe GitHub, s\u0103 g\u0103se\u0219ti un analog \u0219i s\u0103 \u00eel implementezi singur. Totu\u0219i, \u00een orice caz, cineva va trebui s\u0103 sprijine portalul, ceea ce nu este foarte convenabil pentru utilizarea de baz\u0103 sau pentru nevoile de testare. \u00cen plus, swagger este mai \u201eimpar\u021bial\u201d, sau mai liberal - poate fi generat din comentarii \u00een cod, ceea ce, bine\u00een\u021beles, contravine principiului API first \u0219i nu este suportat de niciunul dintre instrumentele RAML.<\/p>\n<p>Noi am \u00eenceput s\u0103 lucr\u0103m cu RAML, ca fiind un limbaj mai flexibil, \u0219i \u00een cele din urm\u0103 a trebuit s\u0103 facem multe lucruri manual. De exemplu, \u00eentr-unul dintre proiecte se utilizeaz\u0103 instrumentul <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> \u00een teste unitare, care suport\u0103 doar RAML 0.8. A\u0219adar, a fost nevoie s\u0103 ad\u0103ug\u0103m solu\u021bii provizorii pentru ca instrumentul s\u0103 poat\u0103 \u201eprocesa\u201d RAML versiunea 1.0.<\/p>\n<h3>\u0218i este nevoie s\u0103 alegem?<\/h3>\n<p>\nDup\u0103 ce ne-am obisnuit cu completarea ecosistemului de solu\u021bii pe baza RAML, am ajuns la concluzia c\u0103 trebuie s\u0103 convertim RAML \u00een Swagger 2 \u0219i s\u0103 realiz\u0103m automatizarea, verificarea, testarea \u0219i optimizarea ulterioar\u0103 \u00een acesta. Este o metod\u0103 bun\u0103 de a utiliza at\u00e2t flexibilitatea RAML, c\u00e2t \u0219i suportul instrumentelor din comunitate oferit de Swagger. <\/p>\n<p>Pentru aceast\u0103 sarcin\u0103 exist\u0103 dou\u0103 instrumente OpenSource care ar trebui s\u0103 asigure conversia contractelor:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 un instrument care nu mai este \u00eentre\u021binut. \u00cen timpul lucrului cu acesta, am descoperit c\u0103 \u00eent\u00e2mpin\u0103 o serie de probleme cu RAML sofisticate, care sunt \u201e\u00eentinse\u201d pe un num\u0103r mare de fi\u0219iere. Aceast\u0103 aplica\u021bie este scris\u0103 \u00een JavaScript \u0219i realizeaz\u0103 o navigare recursiv\u0103 \u00een arborele sintactic. Din cauza tipiz\u0103rii dinamice, a devenit dificil s\u0103 \u00een\u021belegem acest cod, a\u0219a c\u0103 am decis s\u0103 nu pierdem timp scriind patch-uri pentru un instrument \u00een declin.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 un instrument de la aceea\u0219i companie, care pretinde c\u0103 este gata s\u0103 converteasc\u0103 tot \u0219i orice, \u00een orice direc\u021bie. P\u00e2n\u0103 \u00een prezent, este sus\u021binut RAML 0.8, RAML 1.0 \u0219i Swagger 2.0. Totu\u0219i, la momentul cercet\u0103rii noastre, instrumentul era \u00eenc\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">EXTREM<\/a><\/noindex> nefinisat \u0219i nepotrivit pentru utilizare. Dezvoltatorii creeaz\u0103 un soi de <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, ceea ce le va permite s\u0103 adauge rapid noi standarde \u00een viitor. Dar, p\u00e2n\u0103 acum, toate acestea pur \u0219i simplu nu func\u021bioneaz\u0103.<\/li>\n<\/ol>\n<p>\n\u0218i aceasta nu este tot, ci doar o parte din dificult\u0103\u021bile cu care ne-am confruntat. Unul dintre pa\u0219ii din pipeline-ul nostru este s\u0103 verific\u0103m dac\u0103 RAML-ul din repository este corect \u00een raport cu specifica\u021bia. Am \u00eencercat mai multe utilitare. Uimitor, dar toate s-au pl\u00e2ns de anot\u0103rile noastre \u00een diferite locuri \u0219i cu cuvinte complet diferite. \u0218i nu de fiecare dat\u0103 pe bun\u0103 dreptate :).<\/p>\n<p>\u00cen cele din urm\u0103, ne-am oprit la un proiect acum \u00eenvechit, care are, de asemenea, o serie de probleme (uneori se pr\u0103bu\u0219e\u0219te f\u0103r\u0103 niciun motiv, are dificult\u0103\u021bi \u00een a lucra cu expresii regulate). Astfel, nu am g\u0103sit o modalitate de a rezolva problemele de validare \u0219i conversie baz\u00e2ndu-ne pe instrumente gratuite \u0219i am decis s\u0103 utiliz\u0103m o utilitate comercial\u0103. \u00cen viitor, c\u00e2nd instrumentele OpenSource vor deveni mai avansate, poate c\u0103 rezolvarea acestei probleme va deveni mai u\u0219oar\u0103. P\u00e2n\u0103 atunci, costul \u00een munc\u0103 \u0219i timp pentru \u201efinisare\u201d ne-a p\u0103rut mai semnificativ dec\u00e2t costul serviciului comercial.<\/p>\n<h3>Concluzie<\/h3>\n<p>\nDup\u0103 toate acestea, ne-am dorit s\u0103 \u00eemp\u0103rt\u0103\u0219im experien\u021ba \u0219i s\u0103 subliniem c\u0103 \u00eenainte de a alege un instrument pentru descrierea contractelor, trebuie s\u0103 v\u0103 stabili\u021bi clar ce dori\u021bi de la acesta \u0219i ce buget sunte\u021bi dispu\u0219i s\u0103 investi\u021bi. Dac\u0103 uit\u0103m de OpenSource, deja exist\u0103 o mul\u021bime de servicii \u0219i produse care pot ajuta s\u0103 efectuezi verific\u0103ri, s\u0103 converte\u0219ti, s\u0103 validezi. Dar acestea sunt scumpe, iar uneori \u2014 foarte scumpe. Pentru o mare companie, astfel de cheltuieli sunt acceptabile, dar pentru un startup pot constitui o povar\u0103 semnificativ\u0103.<\/p>\n<p>Defini\u021bi setul de instrumente pe care le ve\u021bi folosi mai t\u00e2rziu. De exemplu, dac\u0103 trebuie doar s\u0103 afi\u0219a\u021bi un contract, va fi mai simplu s\u0103 folosi\u021bi Swagger 2, care are o API frumoas\u0103, pentru c\u0103 \u00een RAML va trebui s\u0103 ridica\u021bi \u0219i s\u0103 men\u021bine\u021bi serviciul pe cont propriu.<br \/>\nCu c\u00e2t ave\u021bi mai multe sarcini, cu at\u00e2t va cre\u0219te nevoia de instrumente, iar acestea sunt diferite pentru diferite platforme, a\u0219a c\u0103 este mai bine s\u0103 v\u0103 familiariza\u021bi din timp cu versiunile disponibile pentru a face o alegere care s\u0103 minimizeze cheltuielile \u00een viitor.<\/p>\n<p>Trebuie s\u0103 recunoa\u0219tem c\u0103 toate ecosistemele existente ast\u0103zi sunt imperfecte. A\u0219adar, dac\u0103 \u00een companie sunt fani care ador\u0103 s\u0103 lucreze cu RAML pentru c\u0103 \u201e\u00eei permite s\u0103 \u00ee\u0219i exprime g\u00e2ndurile mai flexibil\u201d, sau, dimpotriv\u0103, prefer\u0103 Swagger pentru c\u0103 \u201eeste mai clar\u201d, cel mai bine este s\u0103 \u00eei l\u0103s\u0103m s\u0103 lucreze \u00een ceea ce sunt obi\u0219nui\u021bi \u0219i doresc, deoarece instrumentele fiec\u0103rui format necesit\u0103 ajust\u0103ri fine. <\/p>\n<p>\u00cen ceea ce prive\u0219te experien\u021ba noastr\u0103, \u00een post\u0103rile viitoare vom vorbi despre ce verific\u0103ri statice \u0219i dinamice efectu\u0103m pe baza arhitecturii noastre RAML-Swagger, precum \u0219i despre documenta\u021bia pe care o gener\u0103m din contracte \u0219i despre cum func\u021bioneaz\u0103 totul.<\/p>\n<p class=\"for_users_only_msg\">Numai utilizatorii \u00eenregistra\u021bi pot participa la sondaj. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Conecta\u021bi-v\u0103<\/a><\/noindex>, v\u0103 rug\u0103m.<\/p>\n<h2 class=\"default-block__polling-title\">Ce limbaj folosi\u021bi pentru anotarea contractelor microserviciilor?<\/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 (cunoscuta \u0219i sub numele de)<\/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>                    Altele<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nu folosesc<\/p>\n<\/li>\n<\/ul>\n<p>    Au votat 100 de utilizatori. S-au ab\u021binut 24 de utilizatori.<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Deci, RAML sau OAS (Swagger)? | ProHoster","description":"\u00centr-o lume dinamic\u0103 a microserviciilor, orice component\u0103 poate fi rescris\u0103 \u00een alt limbaj, folosind alte cadre \u0219i arhitecturi.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}