{"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\/nl\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Dus, is het RAML of OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In de dynamische wereld van microservices kan alles veranderen \u2014 elke component kan in een andere taal worden herschreven, met andere frameworks en architecturen. Alleen de contracten moeten ongewijzigd blijven, zodat er op een consistente basis met de microservice van buitenaf kan worden samengewerkt, ongeacht interne metamorfosen. Vandaag zullen we onze probleem met de keuze van het formaat voor het beschrijven van contracten bespreken en de gevonden artefacten delen. <\/p>\n<p><img decoding=\"async\" alt=\"Dus, is het RAML of 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 \/>\nDit artikel is voorbereid door <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekhova<\/a><\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Microservices.<\/b> Bij de ontwikkeling van Acronis Cyber Cloud realiseerden we ons dat we niet om ze heen konden. Ontwerp van een microservice is onmogelijk zonder de formalisering van het contract, dat de interface van de microservice vertegenwoordigt.<\/p>\n<p>Maar wanneer er meer dan \u00e9\u00e9n component in het product zit en de ontwikkeling van contracten een reguliere activiteit wordt, ga je automatisch nadenken over procesoptimalisatie. Het wordt duidelijk dat de interface (contract) en de implementatie (microservice) elkaar moeten overeenkomen, dat verschillende componenten hetzelfde moeten doen op een uniforme manier, en dat zonder gecentraliseerde besluitvorming over al deze punten elk team steeds weer tijd zal moeten besteden aan het verkrijgen ervan. <\/p>\n<p><img decoding=\"async\" alt=\"Dus, is het RAML of OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Schema van microservices van Amazon uit <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">een tweet<\/a><\/noindex> van Werner Vogels, CTO van Amazon<\/i><br \/>\nWaaruit bestaat de dilemma? De facto zijn er twee manieren waarop microservices met elkaar communiceren \u2013 HTTP Rest en gRPC van Google. We willen niet betrokken raken bij de technologie\u00ebn van Google, daarom hebben we voor HTTP Rest gekozen. Annotaties voor HTTP REST-contracten worden meestal beschreven in een van de twee formaten: RAML en OAS, voorheen bekend als Swagger. Daarom heeft elk ontwikkelteam de noodzaak om een keuze te maken voor een van de standaard. Maar zoals bleek, kan het maken van deze keuze erg ingewikkeld zijn.<\/p>\n<h3>Waarom zijn annotaties nodig?<\/h3>\n<p>\nEen annotatie is nodig zodat externe gebruikers snel kunnen begrijpen wat ze met uw service kunnen doen via de HTTP-interface. Op basisniveau moet de annotatie ten minste een lijst van beschikbare bronnen bevatten, hun HTTP-methoden, verzoeklichamen, een opsomming van parameters, de vereiste en ondersteunde headers, evenals retourcodes en responformaten. Een uiterst belangrijk element van de contractannotatie is hun verbale beschrijving (\u201cwat gebeurt er als ik deze queryparameter aan het verzoek toevoeg?\u201d, \u201cin welk geval wordt retourcode 400 gegeven?\u201d)<\/p>\n<p>Echter, wanneer het gaat om de ontwikkeling van een groot aantal microservices, wil je extra voordeel halen uit de geschreven annotaties. Op basis van RAML\/Swagger kan zowel client- als servercode gegenereerd worden in een groot aantal programmeertalen. Bovendien kan je automatisch documentatie voor de microservice verkrijgen en deze uploaden naar uw developer-portal :).<\/p>\n<p><img decoding=\"async\" alt=\"Dus, is het RAML of OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Voorbeeld van een gestructureerde contractbeschrijving<\/i><\/p>\n<p>Het komt minder vaak voor dat microservices getest worden op basis van contractbeschrijvingen. Als u zowel de annotatie als de component hebt geschreven, kunt u een autotest maken die verifieert of de service adequaat werkt met verschillende ingangsdatatypes. Geeft de service geen retourcode terug die niet in de annotatie is beschreven? Kan het onjuiste gegevens correct verwerken?<\/p>\n<p>Bovendien maakt een kwalitatieve implementatie van niet alleen de contracten, maar ook de tools voor het visualiseren van annotaties het werken met de microservice eenvoudiger. Dit betekent dat als de architect het contract goed heeft beschreven, ontwerpers en ontwikkelaars de service in andere producten kunnen integreren zonder extra tijdsverlies.<\/p>\n<p>Voor de werking van extra tools hebben zowel RAML als OAS de mogelijkheid om metadata toe te voegen die niet door de standaard worden voorzien (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">bijvoorbeeld, zo wordt dit gedaan in OAS<\/a><\/noindex>).<\/p>\n<p>Over het algemeen is het veld voor creativiteit in de toepassing van contracten voor microservices enorm... tenminste theoretisch<\/p>\n<h3>Vergelijking van een eg met een adder<\/h3>\n<p>\nMomenteel is de prioriteit van ontwikkeling bij Acronis de ontwikkeling van het Acronis Cyber Platform. Acronis Cyber Platform zijn nieuwe integratiepunten voor externe diensten met Acronis Cyber Cloud en de agentensectie. Hoewel onze interne API's, beschreven in RAML, ons bevielen, heeft de noodzaak om de API te publiceren weer de vraag opgeworpen: welke standaard voor annotaties kunnen we het beste gebruiken voor ons werk?<\/p>\n<p>In het begin leek het erop dat er twee oplossingen waren - de meest voorkomende ontwikkelingen RAML en Swagger (of OAS). Maar in werkelijkheid blijken er minstens drie of meer alternatieven te zijn.<\/p>\n<p>Aan de ene kant is er RAML - een krachtige en effici\u00ebnte taal. Het heeft een goede hi\u00ebrarchie en erfelijkheid, zodat dit formaat beter geschikt is voor grote bedrijven die veel beschrijvingen nodig hebben - dat wil zeggen niet \u00e9\u00e9n product, maar veel microservices die gemeenschappelijke contractonderdelen hebben - authenticatieschema's, dezelfde datatypes, foutlichamen.<\/p>\n<p>Maar de ontwikkelaar van RAML, het bedrijf Mulesoft, heeft zich aangesloten bij het Open API-consortium, dat zich bezighoudt met de ontwikkeling <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>. Daarom is de ontwikkeling van RAML stilgelegd. Stel je voor dat de maintainers van de belangrijkste Linux-componenten bij Microsoft zijn gaan werken. Zo'n situatie cre\u00ebert voorwaarden om Swagger te gebruiken, dat dynamisch evolueert en in de laatste - derde versie - bijna RAML inhaalt qua flexibiliteit en functionaliteit.<\/p>\n<h3>Als het niet voor \u00e9\u00e9n maar was...<\/h3>\n<p>\nZoals bleek, hebben lang niet alle open-source tools zich ge\u00fcpdatet naar versie OAS 3.0. Voor microservices in Go is het ontbreken van aanpassing <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> voor de nieuwe standaard zijn het grootste probleem. Echter, het verschil tussen Swagger 2 en Swagger 3 is - <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">enorm<\/a><\/noindex>. Bijvoorbeeld, in de derde versie hebben ontwikkelaars:<\/p>\n<ul>\n<li>de beschrijving van authenticatieschema's verbeterd<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">voltooid<\/a><\/noindex> de ondersteuning voor JSON Schema geavanceerd<\/li>\n<li>de mogelijkheid om voorbeelden toe te voegen vergroot<\/li>\n<\/ul>\n<p>\nDe situatie is eigenlijk grappig: bij het kiezen van een standaard moet je RAML, Swagger 2 en Swagger 3 als afzonderlijke alternatieven beschouwen. Alleen Swagger 2 heeft echter goede ondersteuning voor open-source hulpmiddelen. RAML is zeer flexibel... en complex, terwijl Swagger 3 zwak wordt ondersteund door de community, zodat je gedwongen zult zijn om je eigen of commerci\u00eble oplossingen te gebruiken, die meestal vrij duur zijn. <\/p>\n<p>Ondertussen zijn er in Swagger veel aangename mogelijkheden, zoals een kant-en-klaar portaal <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, waarop je een annotatie kunt uploaden en een visualisatie kunt krijgen met gedetailleerde beschrijvingen, links en relaties. Voor de meer fundamentele en minder gebruiksvriendelijke RAML is die mogelijkheid er echter niet. Ja, je kunt iets zoeken tussen projecten op GitHub, daar een equivalent vinden en het zelf opzetten. Maar in elk geval moet iemand het portaal onderhouden, wat niet zo handig is voor basaal gebruik of testdoeleinden. Bovendien is Swagger meer \u201converschillig\u201d, of liberaal \u2014 het kan worden gegenereerd vanuit opmerkingen in de code, wat natuurlijk in strijd is met het principe van API first en niet wordt ondersteund door enige RAML-tools.<\/p>\n<p>Ooit zijn we begonnen te werken met RAML, als een flexibeler taal, en uiteindelijk moesten we veel zelf doen. Bijvoorbeeld, in een van de projecten wordt de tool <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> in unit tests gebruikt, die alleen RAML 0.8 ondersteunt. Dus we moesten tijdelijke oplossingen toevoegen zodat de tool RAML versie 1.0 kon verwerken.<\/p>\n<h3>Is er wel een keuze nodig?<\/h3>\n<p>\nNa veel gedoe met het schrijven van een ecosysteem van oplossingen voor RAML, kwamen we tot de conclusie dat we RAML naar Swagger 2 moesten converteren en alles daar te automatiseren, te verifi\u00ebren, te testen en vervolgens te optimaliseren. Dit is een goede manier om zowel de flexibiliteit van RAML als de ondersteuning van de gemeenschapstools van Swagger te gebruiken. <\/p>\n<p>Voor deze taak zijn er twee OpenSource-hulpmiddelen die de conversie van contracten moeten waarborgen:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 momenteel niet meer ondersteunde tool. Tijdens het werken met deze tool ontdekten we dat deze een aantal problemen had met complexe RAML's die \u201cuitgesmeerd\u201d zijn over een groot aantal bestanden. Dit programma is geschreven in JavaScript en voert een recursieve traversering van de syntaxisboom uit. Door de dynamische typisering wordt het moeilijk om in deze code te begrijpen, dus we besloten geen tijd te besteden aan het schrijven van patches voor de stervende tool.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 een tool van hetzelfde bedrijf, die claimt alles en iedereen te kunnen converteren, in elke richting. De ondersteuning van RAML 0.8, RAML 1.0 en Swagger 2.0 is momenteel aangekondigd. Echter, ten tijde van ons onderzoek was de tool nog <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">EXTREEM<\/a><\/noindex> onvolwassen en niet bruikbaar. De ontwikkelaars cre\u00ebren een soort <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, wat hen in de toekomst in staat zal stellen snel nieuwe standaarden toe te voegen. Maar voor nu werkt dit gewoon niet.<\/li>\n<\/ol>\n<p>\nEn dit is nog niet alle complicaties waarmee we zijn geconfronteerd. Een van de stappen in onze pipeline is controleren of de RAML uit de repository correct is volgens de specificatie. We hebben verschillende tools uitgeprobeerd. Verrassend genoeg waren ze allemaal kritisch op onze annotaties op verschillende punten en met volkomen verschillende ongepaste woorden. En niet altijd terecht :).<\/p>\n<p>Uiteindelijk zijn we ge\u00ebindigd bij een inmiddels verouderd project dat ook een aantal problemen heeft (soms crasht het zonder duidelijke reden, het heeft problemen met reguliere expressies). We hebben dus geen manier gevonden om de validatie- en conversietaken met gratis tools op te lossen en hebben besloten om een commerci\u00eble tool te gebruiken. In de toekomst, wanneer OpenSource middelen verder ontwikkeld worden, kan het oplossen van dit probleem misschien eenvoudiger worden. Voor nu leken de tijd- en arbeidskosten voor het \u2018afstemmen\u2019 ons echter significanter dan de kosten van de commerci\u00eble dienst.<\/p>\n<h3>Conclusie<\/h3>\n<p>\nNa alles wilden we onze ervaringen delen en opmerken dat bij het kiezen van een tool voor het beschrijven van contracten, je duidelijk moet defini\u00ebren wat je ervan verwacht en welk budget je bereid bent te investeren. Als we OpenSource vergeten, zijn er nu al talloze diensten en producten die helpen bij het controleren, converteren en valideren. Maar ze zijn duur, en soms heel duur. Voor een groot bedrijf zijn dergelijke kosten aanvaardbaar, maar voor een startup kunnen ze een zware last vormen.<\/p>\n<p>Bepaal de set van tools die je later gaat gebruiken. Als je bijvoorbeeld alleen het contract wilt weergeven, is het gemakkelijker om Swagger 2 te gebruiken, dat een mooie API heeft, want met RAML zul je de service zelf moeten opzetten en onderhouden.<br \/>\nHoe meer taken je hebt, hoe groter de behoefte aan tools zal zijn, en die zijn verschillend voor verschillende platforms. Het is beter om meteen bekend te raken met de beschikbare versies, zodat je een keuze maakt die je toekomstige kosten minimaliseert.<\/p>\n<p>Maar het moet worden erkend dat alle ecosystemen die vandaag de dag bestaan, onvolmaakt zijn. Daarom, als er binnen het bedrijf mensen zijn die graag met RAML werken omdat 'het hen in staat stelt om flexibeler gedachten uit te drukken', of aan de andere kant, die de voorkeur geven aan Swagger omdat 'het duidelijker is', is het het beste om hen te laten werken met wat ze gewend zijn en willen, omdat de hulpmiddelen van elk van de formaten enige aanpassing vereisen. <\/p>\n<p>Wat onze ervaring betreft, zullen we in de volgende berichten vertellen over welke statische en dynamische controles we uitvoeren op basis van onze RAML-Swagger architectuur, evenals over de documentatie die we genereren uit contracten en hoe dit alles werkt.<\/p>\n<p class=\"for_users_only_msg\">Alleen geregistreerde gebruikers kunnen deelnemen aan de enqu\u00eate. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Log in<\/a><\/noindex>, alstublieft.<\/p>\n<h2 class=\"default-block__polling-title\">Welke taal gebruik je voor het annoteren van contracten van microservices?<\/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 (ook bekend als )<\/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>                    Andere<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Gebruik ik niet<\/p>\n<\/li>\n<\/ul>\n<p>    Er hebben 100 gebruikers gestemd. 24 gebruikers hebben zich onthouden.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47 Wat is het nu, RAML of OAS (Swagger)? | ProHoster","description":"In de dynamische wereld van microservices kan alles veranderen - elk component kan worden herschreven in een andere taal met gebruik van andere frameworks en architecturen.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}