{"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\/sq\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Pra, RAML apo OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00eb nj\u00eb bot\u00eb dinamike mikros services, gjith\u00e7ka mund t\u00eb ndryshoj\u00eb - \u00e7do komponent mund t\u00eb riprogramohet n\u00eb nj\u00eb gjuh\u00eb tjet\u00ebr, duke p\u00ebrdorur frameworke dhe arkitektura t\u00eb ndryshme. Ajo q\u00eb duhet t\u00eb mbetet e pandryshuar jan\u00eb kontratat, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb ket\u00eb nj\u00eb nd\u00ebrveprim t\u00eb vazhduesh\u00ebm me mikros services, pavar\u00ebsisht nga metamorfoza t\u00eb brendshme. Sot do t\u00eb flasim p\u00ebr problemin ton\u00eb t\u00eb zgjedhjes s\u00eb formatit t\u00eb p\u00ebrshkrimit t\u00eb kontratave dhe do t\u00eb ndajm\u00eb artefaktet e gjetura. <\/p>\n<p><img decoding=\"async\" alt=\"Pra, RAML apo 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 \/>\nPostimi \u00ebsht\u00eb p\u00ebrgatitur nga <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekova<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Mikroserviset.<\/b> Gjat\u00eb zhvillimit t\u00eb Acronis Cyber Cloud, kuptuam se nuk kishim ku t\u00eb iknim prej tyre. Dizajnimi i nj\u00eb mikros services nuk mund t\u00eb realizohet pa formalizimin e kontrat\u00ebs, e cila p\u00ebrfaq\u00ebson nd\u00ebrfaqen e mikros services.<\/p>\n<p>Por kur n\u00eb produkt ka m\u00eb shum\u00eb se nj\u00eb komponent, dhe zhvillimi i kontrat\u00ebs b\u00ebhet nj\u00eb aktivitet i rregullt, fillon t\u00eb mendosh p\u00ebr optimizimin e procesit. B\u00ebn t\u00eb dukshme se nd\u00ebrfaqja (kontrata) dhe implementimi (mikros services) duhet t\u00eb p\u00ebrputhen, q\u00eb komponent\u00ebt e ndrysh\u00ebm duhet t\u00eb b\u00ebjn\u00eb t\u00eb nj\u00ebjtat gj\u00ebra nj\u00ebsoj, dhe se pa nj\u00eb pranimin qendror t\u00eb t\u00eb gjitha k\u00ebtyre vendimeve, \u00e7do ekip do t\u00eb ishte i detyruar t\u00eb humbte koh\u00eb p\u00ebrs\u00ebri dhe p\u00ebrs\u00ebri p\u00ebr t'i marr\u00eb ato. <\/p>\n<p><img decoding=\"async\" alt=\"Pra, RAML apo OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Skema e mikroserviseve Amazon nga <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">tweet-i<\/a><\/noindex> i Werner Vogels, CTO i Amazon<\/i><br \/>\n\u00c7far\u00eb \u00ebsht\u00eb dilema? N\u00eb fakt, ka dy m\u00ebnyra p\u00ebr nd\u00ebrveprimin e mikroserviseve - HTTP Rest dhe gRPC nga Google. T\u00eb mos d\u00ebshirojm\u00eb t\u00eb p\u00ebrfshihemi n\u00eb stek teknologjish t\u00eb Google, ne zgjodh\u00ebm HTTP Rest. Annotationet e kontratave HTTP REST zakonisht p\u00ebrshkruhen n\u00eb nj\u00eb nga dy formate: RAML dhe OAS, i njohur m\u00eb par\u00eb si Swagger. Prandaj, \u00e7do ekip zhvilluesish p\u00ebrballet me nevoj\u00ebn p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb zgjedhje midis nj\u00ebrit prej standardeve. Por, si\u00e7 u zbulua, t\u00eb b\u00ebsh k\u00ebt\u00eb zgjedhje mund t\u00eb jet\u00eb shum\u00eb e v\u00ebshtir\u00eb.<\/p>\n<h3>Pse nevojiten annotationet?<\/h3>\n<p>\nNj\u00eb p\u00ebrmbledhje \u00ebsht\u00eb e nevojshme q\u00eb p\u00ebrdoruesi i jasht\u00ebm t\u00eb mund t\u00eb kuptoj\u00eb leht\u00ebsisht se \u00e7far\u00eb mund t\u00eb b\u00ebj\u00eb me sh\u00ebrbimin tuaj n\u00ebp\u00ebrmjet nd\u00ebrfaqes s\u00eb tij HTTP. K\u00ebshtu q\u00eb, n\u00eb nj\u00eb nivel bazik, p\u00ebrmbledhja duhet t\u00eb p\u00ebrmbaj\u00eb t\u00eb pakt\u00ebn nj\u00eb list\u00eb t\u00eb burimeve t\u00eb disponueshme, metodave t\u00eb tyre HTTP, trupit t\u00eb k\u00ebrkesave, njohjen e parametrave, specifikimin e titujve t\u00eb nevojsh\u00ebm dhe t\u00eb mb\u00ebshtetur, si dhe kodeve t\u00eb kthimit dhe formateve t\u00eb p\u00ebrgjigjeve. Nj\u00eb element jasht\u00ebzakonisht t\u00eb r\u00ebnd\u00ebsish\u00ebm t\u00eb p\u00ebrmbledhjes s\u00eb kontrat\u00ebs \u00ebsht\u00eb dhe p\u00ebrshkrimi i tyre me fjal\u00eb (\u201c\u00e7far\u00eb do t\u00eb ndodh\u00eb n\u00ebse shtohet ky parametrat e k\u00ebrkes\u00ebs?\u201d, \u201cn\u00eb cilin rast do t\u00eb kthehet kodi 400?\u201d)<\/p>\n<p>Megjithat\u00eb, kur flitet p\u00ebr zhvillimin e nj\u00eb numri t\u00eb madh mikrosherbimesh, d\u00ebshira \u00ebsht\u00eb t\u00eb nxirret dobi shtes\u00eb nga p\u00ebrmbledhjet e shkruara. P\u00ebr shembull, mbi baz\u00ebn e RAML\/SWAGGER mund t\u00eb gjenerohet kod klienti dhe serveri n\u00eb nj\u00eb num\u00ebr t\u00eb madh gjuh\u00ebsh programimi. Po ashtu, mund t\u00eb p\u00ebrfitohet automatikisht dokumentacioni p\u00ebr mikrosherbimin dhe ta ngarkoni at\u00eb n\u00eb portalin tuaj p\u00ebr zhvilluesit :).<\/p>\n<p><img decoding=\"async\" alt=\"Pra, RAML apo OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Shembulli i p\u00ebrshkrimit t\u00eb strukturuar t\u00eb kontrat\u00ebs<\/i><\/p>\n<p>Praktika e testimit t\u00eb mikrosherbimeve mbi baz\u00ebn e p\u00ebrshkrimeve t\u00eb kontratave \u00ebsht\u00eb m\u00eb e rrall\u00eb. N\u00ebse keni shkruar si p\u00ebrmbledhjen ashtu edhe komponentin, mund t\u00eb krijoni nj\u00eb test automatik q\u00eb kontrollon funksionimin e sh\u00ebrbimit me lloje t\u00eb ndryshme t\u00eb t\u00eb dh\u00ebnave n\u00eb hyrje. A kthen sh\u00ebrbimi nj\u00eb kod p\u00ebrgjigjeje q\u00eb nuk \u00ebsht\u00eb p\u00ebrshkruar n\u00eb p\u00ebrmbledhje? A do t\u00eb jet\u00eb n\u00eb gjendje t\u00eb p\u00ebrpunoj\u00eb t\u00eb dh\u00ebna t\u00eb gabuara?<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, nj\u00eb zbatim cil\u00ebsor jo vet\u00ebm i kontratave t\u00eb vetme, por gjithashtu i mjeteve p\u00ebr vizualizimin e p\u00ebrmbledhjeve aktualizon pun\u00ebn me mikrosherbimin. K\u00ebshtu q\u00eb n\u00ebse arkitekti e ka p\u00ebrshkruar mir\u00eb kontrat\u00ebn, n\u00eb baz\u00eb t\u00eb saj dizajner\u00ebt dhe zhvilluesit do ta integrojn\u00eb sh\u00ebrbimin n\u00eb produkte t\u00eb tjera pa shpenzuar koh\u00eb shtes\u00eb.<\/p>\n<p>P\u00ebr t\u00eb punuar me mjete shtes\u00eb, si RAML ashtu edhe OAS kan\u00eb mund\u00ebsin\u00eb e shtimit t\u00eb metadatatve, q\u00eb nuk jan\u00eb parashikuar nga standardi (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">p\u00ebr shembull, k\u00ebshtu b\u00ebhet n\u00eb OAS<\/a><\/noindex>).<\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, fusha p\u00ebr krijimtari n\u00eb aplikimin e kontratave p\u00ebr mikrosherbime \u00ebsht\u00eb e madhe... t\u00eb pakt\u00ebn teoritikisht<\/p>\n<h3>Krahasimi i jezit me ujku<\/h3>\n<p>\nAktualisht, drejtimi kryesor i zhvillimit n\u00eb Acronis \u00ebsht\u00eb zhvillimi i Acronis Cyber Platform. Acronis Cyber Platform \u00ebsht\u00eb pik\u00ebt e reja t\u00eb integrimit t\u00eb sh\u00ebrbimeve t\u00eb jashtme me Acronis Cyber Cloud dhe pjes\u00ebn agjente. Edhe pse API-t\u00eb tona t\u00eb brendshme, t\u00eb p\u00ebrshkruara n\u00eb RAML, na k\u00ebnaqin, nevoja p\u00ebr publikimin e API-ve e ngre p\u00ebrs\u00ebri pyetjen: cili standard i anotimeve \u00ebsht\u00eb m\u00eb i mir\u00eb p\u00ebr pun\u00ebn ton\u00eb?<\/p>\n<p>Fillimisht dukej se kishte dy zgjidhje \u2014 ato jan\u00eb zhvillimet m\u00eb t\u00eb zakonshme RAML dhe Swagger (ose OAS). Por n\u00eb fakt u tregua se alternativat jan\u00eb t\u00eb pakt\u00ebn 3 ose m\u00eb shum\u00eb.<\/p>\n<p>Nga nj\u00ebra an\u00eb, ka RAML \u2013 nj\u00eb gjuh\u00eb e fuqishme dhe efektive. Ajo realizon mir\u00eb hierarkin\u00eb dhe trash\u00ebgimin\u00eb, k\u00ebshtu q\u00eb ky format \u00ebsht\u00eb m\u00eb i p\u00ebrshtatsh\u00ebm p\u00ebr kompanit\u00eb e m\u00ebdha q\u00eb kan\u00eb nevoj\u00eb p\u00ebr shum\u00eb p\u00ebrshkrime \u2014 pra, jo vet\u00ebm nj\u00eb produkt, por shum\u00eb mikro sh\u00ebrbime q\u00eb kan\u00eb pjes\u00eb t\u00eb p\u00ebrbashk\u00ebta t\u00eb kontratave \u2014 skemat e autentifikimit, t\u00eb nj\u00ebjtat tipe t\u00eb dh\u00ebnash, trupat e gabimeve.<\/p>\n<p>Por zhvilluesi i RAML, kompania Mulesoft, u bashkua me konsorciumin Open API, i cili merret me zhvillimin <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>. Prandaj RAML e ndali zhvillimin e tij. T\u00eb imagjinoni formatin e ngjarjes, imagjinoni q\u00eb mbajt\u00ebsit e komponenteve kryesore t\u00eb Linux shkuan t\u00eb punojn\u00eb n\u00eb Microsoft. Nj\u00eb situat\u00eb e till\u00eb krijon premisat p\u00ebr t\u00eb p\u00ebrdorur Swagger, i cili zhvillohet dinamike dhe n\u00eb versionin e tij t\u00eb tret\u00eb \u2014 praktikisht arrin RAML n\u00eb fleksibilitet dhe funksionalitet.<\/p>\n<h3>N\u00ebse nuk do t\u00eb ishte nj\u00eb por...<\/h3>\n<p>\nSi\u00e7 doli, shum\u00eb prej mjeteve open-source nuk jan\u00eb p\u00ebrdit\u00ebsuar n\u00eb versionin OAS 3.0. P\u00ebr mikro sh\u00ebrbimet n\u00eb Go, m\u00eb kritikja do t\u00eb ishte mungesa e adaptimit t\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> p\u00ebr versionin e rinovuar t\u00eb standardit. Megjithat\u00eb, ndryshimi mes Swagger 2 dhe Swagger 3 \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">i madh.<\/a><\/noindex>P\u00ebr shembull, n\u00eb versionin e tret\u00eb, zhvilluesit:<\/p>\n<ul>\n<li>p\u00ebrmir\u00ebsuan p\u00ebrshkrimin e skemave t\u00eb autentifikimit<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">finalizuan<\/a><\/noindex> mb\u00ebshtetje p\u00ebr JSON Schema<\/li>\n<li>p\u00ebrmir\u00ebsuan mund\u00ebsin\u00eb e shtimit t\u00eb shembujve.<\/li>\n<\/ul>\n<p>\nSituata rezulton t\u00eb jet\u00eb e \u00e7uditshme: kur zgjidhni standardin duhet t\u00eb merrni parasysh RAML, Swagger 2 dhe Swagger 3 si alternativa t\u00eb ve\u00e7anta. N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, vet\u00ebm Swagger 2 ka mb\u00ebshtetje t\u00eb mir\u00eb p\u00ebr mjetet OpenSource. RAML \u00ebsht\u00eb shum\u00eb fleksib\u00ebl\u2026 dhe i komplikuar, nd\u00ebrsa Swagger 3 mb\u00ebshtetet dob\u00ebt nga komuniteti, k\u00ebshtu q\u00eb do t'ju duhet t\u00eb p\u00ebrdorni mjete t\u00eb zhvillimit tuaj ose zgjidhje komerciale, t\u00eb cilat zakonisht jan\u00eb mjaft t\u00eb shtrenjta. <\/p>\n<p>Megjithat\u00eb, n\u00ebse n\u00eb Swagger ekzistojn\u00eb shum\u00eb mund\u00ebsi interesante, t\u00eb tilla si portali i gatsh\u00ebm. <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, n\u00eb t\u00eb cilin mund t\u00eb ngarkohet nj\u00eb annotim dhe t\u00eb merret vizatimi i tij me nj\u00eb p\u00ebrshkrim t\u00eb holl\u00ebsish\u00ebm, lidhje dhe marr\u00ebdh\u00ebnie, nuk \u00ebsht\u00eb nj\u00eb mund\u00ebsi p\u00ebr RAML, i cili \u00ebsht\u00eb m\u00eb themelor dhe m\u00eb pak miq\u00ebsor. Po, mund t\u00eb k\u00ebrkoni di\u00e7ka nd\u00ebrmjet projekteve n\u00eb GitHub, t\u00eb gjeni nj\u00eb ekuivalent dhe ta zhvilloni vet\u00eb. Megjithat\u00eb, n\u00eb \u00e7do rast, dikush duhet ta mbaj\u00eb portalin, gj\u00eb q\u00eb nuk \u00ebsht\u00eb aq e p\u00ebrshtatshme p\u00ebr p\u00ebrdorim bazik ose nevoja testuese. P\u00ebr m\u00eb tep\u00ebr, swagger \u00ebsht\u00eb m\u00eb \u201cpa parime\u201d, ose m\u00eb liberal \u2014 mund t\u00eb gjenerohet nga komentet n\u00eb kod, q\u00eb natyrisht \u00ebsht\u00eb n\u00eb kund\u00ebrshtim me parimin API first dhe nuk mb\u00ebshtetet nga asnj\u00eb nga utilitat e RAML.<\/p>\n<p>Ne filluam t\u00eb punojm\u00eb me RAML, si nj\u00eb gjuh\u00eb m\u00eb fleksibile, dhe p\u00ebrfundimisht duhet t\u00eb b\u00ebnim shum\u00eb gj\u00ebra me duar. P\u00ebr shembull, n\u00eb nj\u00eb nga projektet p\u00ebrdoret utilita <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> n\u00eb testet unit, e cila mb\u00ebshtet vet\u00ebm RAML 0.8. Pra, duhej t\u00eb shtonim k\u00ebste, q\u00eb utilita t\u00eb mund t\u00eb \u201chan\u00eb\u201d RAML versionin 1.0.<\/p>\n<h3>A duhet t\u00eb zgjedhim?<\/h3>\n<p>\nPas p\u00ebrpjekjeve me shtimin e ekosistemit t\u00eb zgjidhjeve p\u00ebr RAML, arrit\u00ebm n\u00eb p\u00ebrfundimin se na duhej t\u00eb konvertonim RAML n\u00eb Swagger 2 dhe t\u00eb b\u00ebnim t\u00eb gjith\u00eb automatizimin, verifikimin, testimin dhe optimizimin e m\u00ebvonsh\u00ebm n\u00eb t\u00eb. Kjo \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb e mir\u00eb p\u00ebr t\u00eb p\u00ebrdorur nj\u00ebkoh\u00ebsisht fleksibilitetin e RAML dhe mb\u00ebshtetje nga mjetet e komunitetit t\u00eb Swagger. <\/p>\n<p>P\u00ebr zgjidhjen e k\u00ebtij problemi ekzistojn\u00eb dy mjete OpenSource, t\u00eb cilat duhet t\u00eb sigurojn\u00eb konvertimin e kontratave:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2014 nj\u00eb utilitet i mb\u00ebshtetur m\u00eb par\u00eb. Gjat\u00eb pun\u00ebs me t\u00eb, zbuluam se ka nj\u00eb s\u00ebr\u00eb problemi me RAML-t\u00eb e nd\u00ebrlikuara q\u00eb jan\u00eb \u201cshtrir\u00eb\u201d n\u00eb nj\u00eb num\u00ebr t\u00eb madh skedash. Ky program \u00ebsht\u00eb shkruar n\u00eb JavaScript dhe b\u00ebn nj\u00eb traversim recursiv t\u00eb pem\u00ebs sintaksore. P\u00ebr shkak t\u00eb tipizimit dinamik, b\u00ebhet e v\u00ebshtir\u00eb t\u00eb kuptohet ky kod, prandaj vendos\u00ebm t\u00eb mos humbim koh\u00eb duke shkruar patches p\u00ebr nj\u00eb utilitet q\u00eb \u00ebsht\u00eb duke vdekur.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 nj\u00eb mjet nga e nj\u00ebjta kompani, i cili pretendon se \u00ebsht\u00eb i gatsh\u00ebm t\u00eb konvertoj\u00eb gjith\u00e7ka, p\u00ebrve\u00e7 \u00e7do gj\u00ebje, dhe n\u00eb \u00e7do drejtim. Aktualisht, \u00ebsht\u00eb shpallur mb\u00ebshtetje p\u00ebr RAML 0.8, RAML 1.0 dhe Swagger 2.0. Megjithat\u00eb, n\u00eb momentin e hetimit ton\u00eb, utilita ishte ende <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">M\u00cb<\/a><\/noindex> e papjekur dhe e pap\u00ebrdorshme. Zhvilluesit po krijojn\u00eb nj\u00eb t\u00eb till\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, q\u00eb do t'i lejoj\u00eb ata t\u00eb shtojn\u00eb shpejt standarde t\u00eb reja n\u00eb t\u00eb ardhmen. Por p\u00ebr momentin, kjo thjesht nuk funksionon.<\/li>\n<\/ol>\n<p>\nDhe kjo nuk \u00ebsht\u00eb e gjitha, sepse ne jemi p\u00ebrballur me disa sfida. Nj\u00eb nga hapat e pipeline-it ton\u00eb \u00ebsht\u00eb t\u00eb verifikohet se RAML nga repository \u00ebsht\u00eb e sakt\u00eb n\u00eb raport me specifikimin. Ne provuam disa mjete. P\u00ebr t\u00eb habitur, ato t\u00eb gjitha gjykuan p\u00ebr anotacionet tona n\u00eb vende t\u00eb ndryshme me fjal\u00eb t\u00eb k\u00ebqija t\u00eb ndryshme. Dhe jo gjithmon\u00eb p\u00ebr arsye t\u00eb mira : ).<\/p>\n<p>N\u00eb fund, ne u ndal\u00ebm n\u00eb nj\u00eb projekt q\u00eb tani \u00ebsht\u00eb i vjetruar, i cili gjithashtu ka disa probleme (ndonj\u00ebher\u00eb d\u00ebshton pa ndonj\u00eb arsye, ka probleme me shprehjet e rregullta). Prandaj, ne nuk gjet\u00ebm nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb zgjidhur problemet e validimit dhe konvertimit duke p\u00ebrdorur mjete falas, dhe vendos\u00ebm t\u00eb p\u00ebrdorim nj\u00eb mjet komercial. N\u00eb t\u00eb ardhmen, kur mjetet OpenSource t\u00eb b\u00ebhen m\u00eb t\u00eb zhvilluara, ndoshta kjo detyr\u00eb do t\u00eb b\u00ebhet m\u00eb e leht\u00eb. Deri at\u00ebher\u00eb, kostot e pun\u00ebs dhe koh\u00ebs p\u00ebr \u201cp\u00ebrfundimin\u201d e saj na dukeshin m\u00eb t\u00eb m\u00ebdha se sa kostoja e sh\u00ebrbimit komercial.<\/p>\n<h3>P\u00ebrfundim<\/h3>\n<p>\nPas t\u00eb gjitha k\u00ebtyre, na erdhi d\u00ebshira p\u00ebr t\u00eb ndar\u00eb p\u00ebrvoj\u00ebn dhe p\u00ebr t\u00eb theksuar se para se t\u00eb zgjidhni mjetin p\u00ebr p\u00ebrshkrimin e kontratave, \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb p\u00ebrcaktoni sakt\u00ebsisht se \u00e7far\u00eb d\u00ebshoni prej tij dhe sa buxhet jeni t\u00eb gatsh\u00ebm t\u00eb investoni. N\u00ebse harrojm\u00eb p\u00ebr OpenSource, tashm\u00eb ka nj\u00eb num\u00ebr t\u00eb madh sh\u00ebrbimesh dhe produkteve q\u00eb mund t\u00eb ndihmojn\u00eb me verifikimin, konvertimin, dhe validimin. Por ato jan\u00eb t\u00eb shtrenjta, ndonj\u00ebher\u00eb jasht\u00ebzakonisht t\u00eb shtrenjta. P\u00ebr nj\u00eb kompani t\u00eb madhe, k\u00ebto shpenzime jan\u00eb t\u00eb pranueshme, por p\u00ebr nj\u00eb startup ato mund t\u00eb b\u00ebhen nj\u00eb ngarkes\u00eb e madhe.<\/p>\n<p>P\u00ebrcaktoni nj\u00eb grup mjete q\u00eb do t\u00eb p\u00ebrdorni m\u00eb von\u00eb. P\u00ebr shembull, n\u00ebse ju nevojitet thjesht t\u00eb shfaqni kontrat\u00ebn, do t\u00eb ishte m\u00eb e leht\u00eb t\u00eb p\u00ebrdornit Swagger 2, i cili ka nj\u00eb API t\u00eb bukur, pasi n\u00eb RAML do t'ju duheshin t\u00eb ngrinit dhe t\u00eb mbani sh\u00ebrbimin vet\u00eb.<br \/>\nSa m\u00eb shum\u00eb detyra t\u00eb keni, aq m\u00eb e madhe do t\u00eb jet\u00eb nevoja p\u00ebr mjete, dhe ato jan\u00eb t\u00eb ndryshme p\u00ebr platforma t\u00eb ndryshme, k\u00ebshtu q\u00eb \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb njiheni me versionet e disponueshme menj\u00ebher\u00eb p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb zgjedhje q\u00eb minimizon shpenzimet tuaja n\u00eb t\u00eb ardhmen.<\/p>\n<p>Por t\u00eb qen\u00eb t\u00eb sinqert\u00eb, t\u00eb gjitha ekosistemat ekzistuese sot jan\u00eb t\u00eb pap\u00ebrkryera. Prandaj, n\u00ebse n\u00eb kompani ka adhurues q\u00eb p\u00eblqejn\u00eb t\u00eb punojn\u00eb me RAML, sepse \"ai lejon shprehjen m\u00eb t\u00eb fleksib\u00ebl t\u00eb mendimeve\", ose, p\u00ebrkundrazi, ata q\u00eb preferojn\u00eb Swagger, sepse \"ai \u00ebsht\u00eb m\u00eb i kuptuesh\u00ebm\", \u00ebsht\u00eb m\u00eb mir\u00eb t'i lejoni ata t\u00eb punojn\u00eb me at\u00eb q\u00eb jan\u00eb t\u00eb zakonsh\u00ebm dhe d\u00ebshirojn\u00eb, sepse mjeti i \u00e7do formati k\u00ebrkon p\u00ebrmir\u00ebsim. <\/p>\n<p>Sa i p\u00ebrket p\u00ebrvoj\u00ebs son\u00eb, n\u00eb postimet e ardhshme do t\u00eb flasim p\u00ebr kontrollet - statike dhe dinamike q\u00eb realizojm\u00eb n\u00eb baz\u00eb t\u00eb arkitektur\u00ebs son\u00eb RAML-Swagger, si dhe p\u00ebr dokumentacionin q\u00eb gjenerojm\u00eb nga kontratat dhe se si funksionon gjith\u00e7ka kjo.<\/p>\n<p class=\"for_users_only_msg\">Vet\u00ebm p\u00ebrdoruesit e regjistruar mund t\u00eb marrin pjes\u00eb n\u00eb anket\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Hyni<\/a><\/noindex>, ju lutem.<\/p>\n<h2 class=\"default-block__polling-title\">Cilin gjuh\u00eb p\u00ebrdorni p\u00ebr annotimin e kontratave t\u00eb mikrosh\u00ebrbimeve?<\/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 (e njohur gjithashtu si)<\/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>                    Tjet\u00ebr<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nuk p\u00ebrdori<\/p>\n<\/li>\n<\/ul>\n<p>    100 p\u00ebrdorues kan\u00eb votuar. 24 p\u00ebrdorues abstenuan.<br \/>\n<br \/>Burimi: <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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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\udd47Pra, RAML apo OAS (Swagger)? | ProHoster","description":"N\u00eb bot\u00ebn dinamike t\u00eb mikrosh\u00ebrbimeve, \u00e7do gj\u00eb mund t\u00eb ndryshoj\u00eb - \u00e7do komponent mund t\u00eb rishkruhet n\u00eb nj\u00eb gjuh\u00eb tjet\u00ebr, duke p\u00ebrdorur framework-e dhe arkitektur\u00eb t\u00eb ndryshme.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}