{"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\/fr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Alors, c'est RAML ou OAS (Swagger) ?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dans le monde dynamique des microservices, tout peut changer \u2014 n'importe quel composant peut \u00eatre r\u00e9\u00e9crit dans un autre langage, en utilisant d'autres frameworks et architectures. Ce qui doit rester inchang\u00e9, ce sont les contrats, afin de pouvoir interagir avec le microservice de fa\u00e7on constante, ind\u00e9pendamment des m\u00e9tamorphoses internes. Aujourd'hui, nous allons parler de notre probl\u00e8me de choix de format de description des contrats et partager les artefacts que nous avons trouv\u00e9s. <\/p>\n<p><img decoding=\"async\" alt=\"Alors, c&#039;est RAML ou 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 \/>\nPost pr\u00e9par\u00e9 par <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekhova<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Microservices.<\/b> Dans le d\u00e9veloppement d'Acronis Cyber Cloud, nous avons compris que nous ne pouvions pas y \u00e9chapper. La conception d'un microservice est impossible sans formalisation d'un contrat, qui repr\u00e9sente l'interface du microservice.<\/p>\n<p>Mais lorsque le produit contient plus d'un composant, et que le d\u00e9veloppement du contrat devient une activit\u00e9 r\u00e9guli\u00e8re, on commence in\u00e9vitablement \u00e0 r\u00e9fl\u00e9chir \u00e0 l'optimisation du processus. Il devient \u00e9vident que l'interface (contrat) et l'impl\u00e9mentation (microservice) doivent correspondre l'une \u00e0 l'autre, que les diff\u00e9rents composants doivent faire les m\u00eames choses de la m\u00eame mani\u00e8re, et que sans une adoption centralis\u00e9e de toutes ces d\u00e9cisions, chaque \u00e9quipe sera forc\u00e9e de passer de nouveau du temps \u00e0 les obtenir. <\/p>\n<p><img decoding=\"async\" alt=\"Alors, c&#039;est RAML ou OAS (Swagger) ?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Sch\u00e9ma des microservices d'Amazon issu de <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">un tweet<\/a><\/noindex> de Werner Vogels, CTO d'Amazon<\/i><br \/>\nQuelle est donc la dilemme ? De facto, il existe deux mani\u00e8res d'interagir entre les microservices \u2013 HTTP Rest et gRPC de Google. Ne souhaitant pas \u00eatre impliqu\u00e9s dans la pile technologique de Google, nous avons choisi HTTP Rest. Les annotations aux contrats HTTP REST sont g\u00e9n\u00e9ralement d\u00e9crites dans l'un des deux formats : RAML et OAS, anciennement connu sous le nom de Swagger. Par cons\u00e9quent, chaque \u00e9quipe de d\u00e9veloppement est confront\u00e9e \u00e0 la n\u00e9cessit\u00e9 de faire un choix en faveur de l'un des standards. Mais, comme il s'est av\u00e9r\u00e9, faire ce choix peut \u00eatre tr\u00e8s difficile.<\/p>\n<h3>Pourquoi avons-nous besoin d'annotations ?<\/h3>\n<p>\nUne annotation est n\u00e9cessaire pour que l'utilisateur externe puisse facilement comprendre ce qu'il peut faire avec votre service via son interface HTTP. \u00c0 un niveau de base, l'annotation doit contenir au minimum une liste des ressources disponibles, leurs m\u00e9thodes HTTP, les corps des requ\u00eates, l'\u00e9num\u00e9ration des param\u00e8tres, l'indication des en-t\u00eates requis et pris en charge, ainsi que des codes de retour et des formats de r\u00e9ponses. Un \u00e9l\u00e9ment crucial de l'annotation du contrat est \u00e9galement leur description verbale (\u00ab que se passera-t-il si ce param\u00e8tre de requ\u00eate est ajout\u00e9 \u00e0 la requ\u00eate ? \u00bb, \u00ab dans quelle situation le code 400 sera-t-il retourn\u00e9 ? \u00bb)<\/p>\n<p>Cependant, lorsqu'il s'agit de d\u00e9velopper un grand nombre de microservices, on souhaite tirer un b\u00e9n\u00e9fice suppl\u00e9mentaire des annotations \u00e9crites. Par exemple, \u00e0 partir de RAML\/Swagger, il est possible de g\u00e9n\u00e9rer \u00e0 la fois du code client et serveur dans un grand nombre de langages de programmation. De plus, il est possible d'obtenir automatiquement la documentation du microservice et de la publier sur votre developer-portal :)<\/p>\n<p><img decoding=\"async\" alt=\"Alors, c&#039;est RAML ou OAS (Swagger) ?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Exemple de description structur\u00e9e d'un contrat<\/i><\/p>\n<p>Il est moins fr\u00e9quent de voir la pratique de tester des microservices sur la base des descriptions de contrats. Si vous avez r\u00e9dig\u00e9 \u00e0 la fois l'annotation et le composant, vous pouvez cr\u00e9er un autotest qui v\u00e9rifie l'ad\u00e9quation du service avec divers types de donn\u00e9es en entr\u00e9e. Le service retourne-t-il un code de r\u00e9ponse non d\u00e9crit dans l'annotation ? Peut-il traiter correctement des donn\u00e9es manifestement incorrectes ?<\/p>\n<p>De plus, une mise en \u0153uvre de qualit\u00e9 des contrats eux-m\u00eames, ainsi que des outils de visualisation des annotations, permet de simplifier le travail avec le microservice. Autrement dit, si l'architecte a d\u00e9crit le contrat de mani\u00e8re ad\u00e9quate, sur cette base, les designers et les d\u00e9veloppeurs pourront int\u00e9grer le service dans d'autres produits sans co\u00fbts de temps suppl\u00e9mentaires.<\/p>\n<p>Pour le fonctionnement d'outils suppl\u00e9mentaires, RAML et OAS ont la possibilit\u00e9 d'ajouter des m\u00e9tadonn\u00e9es non pr\u00e9vues par la norme (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">par exemple, c'est ainsi que cela se fait dans OAS<\/a><\/noindex>).<\/p>\n<p>En g\u00e9n\u00e9ral, le champ pour la cr\u00e9ativit\u00e9 dans l'application des contrats pour les microservices est immense\u2026 du moins th\u00e9oriquement<\/p>\n<h3>Comparaison d'un h\u00e9risson avec une couleuvre<\/h3>\n<p>\nActuellement, la priorit\u00e9 de d\u00e9veloppement chez Acronis est l'\u00e9volution de la plateforme Acronis Cyber. Acronis Cyber Platform est un nouvel ensemble de points d'int\u00e9gration pour les services tiers avec Acronis Cyber Cloud et la partie agent. Bien que nos API internes, d\u00e9crites dans RAML, nous satisfaisaient, la n\u00e9cessit\u00e9 de publier une API a de nouveau relanc\u00e9 la question : quelle norme d'annotations devrions-nous utiliser pour notre travail ?<\/p>\n<p>Au d\u00e9part, il semblait qu'il y avait deux solutions \u2014 les d\u00e9veloppements les plus r\u00e9pandus, RAML et Swagger (ou OAS). Mais en fait, il s'est av\u00e9r\u00e9 qu'il y a au minimum trois alternatives ou plus.<\/p>\n<p>D'une part, il y a RAML \u2013 un langage puissant et efficace. Il r\u00e9alise bien la hi\u00e9rarchie et l'h\u00e9ritage, ce qui fait que ce format est plus adapt\u00e9 aux grandes entreprises ayant besoin de nombreuses descriptions \u2014 c'est-\u00e0-dire pas d'un seul produit, mais de nombreux microservices ayant des parties communes dans leurs contrats \u2014 sch\u00e9mas d'authentification, types de donn\u00e9es identiques, corps d'erreur.<\/p>\n<p>Mais le d\u00e9veloppeur de RAML, la soci\u00e9t\u00e9 Mulesoft, a rejoint le consortium Open API, qui s'occupe du d\u00e9veloppement <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>. Par cons\u00e9quent, RAML a suspendu son d\u00e9veloppement. Pour imaginer le format \u00e9v\u00e9nement, imaginez que les mainteneurs des composants principaux de Linux vont travailler chez Microsoft. Une telle situation cr\u00e9e les conditions n\u00e9cessaires pour adopter Swagger, qui \u00e9volue dynamiquement et qui, dans sa derni\u00e8re \u2014 troisi\u00e8me version \u2014 rattrape pratiquement RAML en flexibilit\u00e9 et en fonctionnalit\u00e9.<\/p>\n<h3>S'il n'y avait pas un mais\u2026<\/h3>\n<p>\nIl s'est av\u00e9r\u00e9 que toutes les utilitaires open-source ne se sont pas mises \u00e0 jour vers la version OAS 3.0. Pour les microservices en Go, le manque d'adaptation <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> \u00e0 la derni\u00e8re version de la norme s'av\u00e8re critique. Cependant, la diff\u00e9rence entre Swagger 2 et Swagger 3 \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">est \u00e9norme<\/a><\/noindex>. Par exemple, dans la troisi\u00e8me version, les d\u00e9veloppeurs :<\/p>\n<ul>\n<li>ont am\u00e9lior\u00e9 la description des sch\u00e9mas d'authentification<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">ont finalis\u00e9<\/a><\/noindex> le support du JSON Schema<\/li>\n<li>ont renforc\u00e9 la possibilit\u00e9 d'ajouter des exemples<\/li>\n<\/ul>\n<p>\nLa situation devient amusante : lors du choix d'une norme, il est n\u00e9cessaire de consid\u00e9rer RAML, Swagger 2 et Swagger 3 comme des alternatives distinctes. Dans ce cas, seul Swagger 2 b\u00e9n\u00e9ficie d'un bon soutien des outils Open Source. RAML est tr\u00e8s flexible\u2026 et complexe, tandis que Swagger 3 est faiblement soutenu par la communaut\u00e9, vous devrez donc utiliser des outils de d\u00e9veloppement interne ou des solutions commerciales qui, en g\u00e9n\u00e9ral, co\u00fbtent tr\u00e8s cher. <\/p>\n<p>Il convient de noter que si Swagger propose de nombreuses fonctionnalit\u00e9s int\u00e9ressantes, telles qu'un portail pr\u00eat \u00e0 l'emploi <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, o\u00f9 vous pouvez t\u00e9l\u00e9charger une annotation et obtenir sa visualisation avec une description d\u00e9taill\u00e9e, des liens et des relations, alors que pour le RAML plus fondamental et moins convivial, cette possibilit\u00e9 n'existe pas. Oui, il est possible de rechercher quelque chose parmi les projets sur GitHub, d'y trouver un \u00e9quivalent et de le d\u00e9ployer vous-m\u00eame. Cependant, dans tous les cas, quelqu'un devra maintenir le portail, ce qui n'est pas si pratique pour un usage de base ou des besoins de test. De plus, Swagger est plus \u00ab libre \u00bb ou \u00ab lib\u00e9ral \u00bb \u2014 il peut \u00eatre g\u00e9n\u00e9r\u00e9 \u00e0 partir de commentaires dans le code, ce qui, bien s\u00fbr, va \u00e0 l'encontre du principe de l'API first et n'est support\u00e9 par aucun des outils RAML.<\/p>\n<p>Nous avons commenc\u00e9 \u00e0 travailler avec RAML \u00e0 l'\u00e9poque, \u00e9tant un langage plus flexible, et finalement, nous avons d\u00fb faire beaucoup de choses nous-m\u00eames. Par exemple, dans l'un des projets, nous utilisons un outil <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> dans les tests unitaires, qui ne supporte que RAML 0.8. Il a donc fallu ajouter des rustines pour que l'outil puisse \u00ab dig\u00e9rer \u00bb les versions RAML 1.0.<\/p>\n<h3>Et faut-il choisir ?<\/h3>\n<p>\nApr\u00e8s avoir gal\u00e9r\u00e9 \u00e0 ajouter des solutions \u00e0 l'\u00e9cosyst\u00e8me autour de RAML, nous sommes arriv\u00e9s \u00e0 la conclusion qu'il \u00e9tait n\u00e9cessaire de convertir RAML en Swagger 2 et de faire toute l'automatisation, la v\u00e9rification, le test et l'optimisation dans ce dernier. C'est un bon moyen d'utiliser \u00e0 la fois la flexibilit\u00e9 de RAML et le soutien des outils de la communaut\u00e9 Swagger. <\/p>\n<p>Pour r\u00e9soudre ce probl\u00e8me, il existe deux outils OpenSource qui devraient permettre la conversion des contrats :<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 un outil actuellement non support\u00e9. Au cours de notre travail avec, nous avons d\u00e9couvert qu'il avait un certain nombre de probl\u00e8mes avec des RAML complexes, qui sont \u00ab \u00e9tal\u00e9s \u00bb sur un grand nombre de fichiers. Ce programme est \u00e9crit en JavaScript et effectue un parcours r\u00e9cursif de l'arbre syntaxique. En raison de la typage dynamique, il devient difficile de comprendre ce code, donc nous avons d\u00e9cid\u00e9 de ne pas perdre de temps \u00e0 \u00e9crire des patchs pour un outil moribond.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 un outil de la m\u00eame entreprise, qui pr\u00e9tend \u00eatre capable de convertir tout et n'importe quoi, et ce dans les deux sens. \u00c0 ce jour, il supporte RAML 0.8, RAML 1.0 et Swagger 2.0. Cependant, au moment de notre recherche, l'outil \u00e9tait encore <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">EXTR\u00caMEMENT<\/a><\/noindex> brut et inutilisable. Les d\u00e9veloppeurs cr\u00e9ent une sorte de <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, ce qui leur permettra d'ajouter rapidement de nouvelles normes \u00e0 l'avenir. Mais pour l'instant, tout cela ne fonctionne tout simplement pas.<\/li>\n<\/ol>\n<p>\nEt ce n'est pas tout, les difficult\u00e9s auxquelles nous avons \u00e9t\u00e9 confront\u00e9s. L'une des \u00e9tapes de notre pipeline consiste \u00e0 v\u00e9rifier que le RAML du d\u00e9p\u00f4t est correct par rapport \u00e0 la sp\u00e9cification. Nous avons essay\u00e9 plusieurs outils. \u00c9tonnamment, tous ont critiqu\u00e9 nos annotations \u00e0 diff\u00e9rents endroits avec des mots totalement d\u00e9plac\u00e9s. Et ce n'\u00e9tait pas toujours justifi\u00e9 :).<\/p>\n<p>Finalement, nous nous sommes arr\u00eat\u00e9s sur un projet d\u00e9sormais obsol\u00e8te, qui pr\u00e9sente \u00e9galement un certain nombre de probl\u00e8mes (il plante parfois sans raison, a des probl\u00e8mes avec les expressions r\u00e9guli\u00e8res). Ainsi, nous n'avons pas trouv\u00e9 de moyen de r\u00e9soudre les t\u00e2ches de validation et de conversion \u00e0 l'aide d'outils gratuits, et avons d\u00e9cid\u00e9 d'utiliser un outil commercial. \u00c0 l'avenir, lorsque les outils OpenSource seront plus avanc\u00e9s, r\u00e9soudre cette t\u00e2che pourrait devenir plus facile. Mais pour l'instant, le co\u00fbt en temps et en efforts pour le 'peaufiner' nous a sembl\u00e9 plus important que le prix du service commercial.<\/p>\n<h3>Conclusion<\/h3>\n<p>\nApr\u00e8s tout cela, nous avons ressenti le besoin de partager notre exp\u00e9rience et de souligner qu'avant de choisir un outil pour d\u00e9crire les contrats, il est essentiel de d\u00e9finir clairement ce que vous en attendez et quel budget vous \u00eates pr\u00eat \u00e0 investir. Si l'on ignore l'OpenSource, il existe d\u00e9j\u00e0 de nombreux services et produits qui peuvent aider \u00e0 v\u00e9rifier, convertir, valider. Mais ils sont chers, parfois tr\u00e8s chers. Pour une grande entreprise, de telles d\u00e9penses sont acceptables, mais pour une startup, cela peut repr\u00e9senter un fardeau important.<\/p>\n<p>D\u00e9terminez l'ensemble des outils que vous allez utiliser par la suite. Par exemple, si vous avez simplement besoin d'afficher un contrat, il sera plus facile d'utiliser Swagger 2, qui dispose d'une API \u00e9l\u00e9gante, alors qu'avec le RAML, vous devrez mettre en place et maintenir le service vous-m\u00eame.<br \/>\nPlus vous aurez de t\u00e2ches, plus vos besoins en outils s'\u00e9largiront, et ils varient selon les plateformes. Il est donc pr\u00e9f\u00e9rable de se familiariser d\u00e8s le d\u00e9part avec les versions disponibles pour faire un choix qui minimisera vos co\u00fbts \u00e0 l'avenir.<\/p>\n<p>Il convient de reconna\u00eetre que tous les \u00e9cosyst\u00e8mes existants aujourd'hui ne sont pas parfaits. Donc, s'il y a des fans dans l'entreprise qui aiment travailler avec RAML parce qu'il \"permet d'exprimer les id\u00e9es de mani\u00e8re plus flexible\", ou au contraire, pr\u00e9f\u00e8rent Swagger parce qu'il \"est plus compr\u00e9hensible\", il est pr\u00e9f\u00e9rable de les laisser travailler avec ce qu'ils connaissent et pr\u00e9f\u00e8rent, car les outils de chaque format n\u00e9cessitent des ajustements. <\/p>\n<p>En ce qui concerne notre exp\u00e9rience, dans les prochains posts, nous parlerons des v\u00e9rifications \u2014 statiques et dynamiques \u2014 que nous effectuons sur notre architecture RAML-Swagger, ainsi que de la documentation que nous g\u00e9n\u00e9rons \u00e0 partir des contrats et de la mani\u00e8re dont tout cela fonctionne.<\/p>\n<p class=\"for_users_only_msg\">Seuls les utilisateurs enregistr\u00e9s peuvent participer au sondage. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Connectez-vous<\/a><\/noindex>, s'il vous pla\u00eet.<\/p>\n<h2 class=\"default-block__polling-title\">Quel langage utilisez-vous pour annoter les contrats des 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 (aussi connu sous le nom 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>                    Autre<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Je n'utilise pas<\/p>\n<\/li>\n<\/ul>\n<p>    100 utilisateurs ont vot\u00e9. 24 utilisateurs se sont abstenus.<br \/>\n<br \/>Source : <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\/fr\/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=\"fr_FR\" \/>\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\/fr\/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\udd47Alors, RAML ou OAS (Swagger) ? | ProHoster","description":"Dans le monde dynamique des microservices, tout peut changer \u2014 n'importe quel composant peut \u00eatre r\u00e9\u00e9crit dans un autre langage, en utilisant d'autres frameworks et architectures.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}