{"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\/es\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"\u00bfRAML o OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>En el din\u00e1mico mundo de los microservicios, todo puede cambiar: cualquier componente puede reescribirse en otro lenguaje, utilizando diferentes frameworks y arquitecturas. Lo \u00fanico que debe permanecer inalterado son los contratos, de modo que se pueda interactuar con el microservicio de manera constante, independientemente de las metamorfosis internas. Hoy hablaremos sobre nuestro dilema en la elecci\u00f3n del formato de descripci\u00f3n de contratos y compartiremos los artefactos que hemos encontrado. <\/p>\n<p><img decoding=\"async\" alt=\"\u00bfRAML o 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 \/>\nPublicaci\u00f3n preparada por <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekhova<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Vladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Microservicios.<\/b> Al desarrollar Acronis Cyber Cloud, nos dimos cuenta de que no pod\u00edamos escapar de ellos. El dise\u00f1o de un microservicio es imposible sin la formalizaci\u00f3n de un contrato, que representa la interfaz del microservicio.<\/p>\n<p>Pero cuando hay m\u00e1s de un componente en el producto y el desarrollo de contratos se convierte en una actividad regular, inevitablemente comienzas a pensar en la optimizaci\u00f3n del proceso. Se hace evidente que la interfaz (contrato) y la implementaci\u00f3n (microservicio) deben coincidir entre s\u00ed, que diferentes componentes deben hacer las mismas cosas de la misma manera, y que sin una toma de decisiones centralizada, cada equipo se ver\u00e1 obligado a gastar tiempo una y otra vez en obtenerlas. <\/p>\n<p><img decoding=\"async\" alt=\"\u00bfRAML o OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Esquema de microservicios de Amazon de <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">un tuit<\/a><\/noindex> de Werner Vogels, CTO de Amazon<\/i><br \/>\n\u00bfCu\u00e1l es, entonces, el dilema? De facto, existen dos formas de interacci\u00f3n entre microservicios: HTTP Rest y gRPC de Google. No queriendo ser parte del stack tecnol\u00f3gico de Google, elegimos HTTP Rest. Las anotaciones de los contratos HTTP REST a menudo se describen en uno de dos formatos: RAML y OAS, anteriormente conocido como Swagger. Por lo tanto, cada equipo de desarrolladores se enfrenta a la necesidad de elegir uno de los est\u00e1ndares. Pero, como se ha descubierto, hacer esta elecci\u00f3n puede ser muy complicado.<\/p>\n<h3>\u00bfPor qu\u00e9 son necesarias las anotaciones?<\/h3>\n<p>\nLa anotaci\u00f3n es necesaria para que un usuario externo pueda entender f\u00e1cilmente qu\u00e9 se puede hacer con su servicio a trav\u00e9s de su interfaz HTTP. Es decir, a nivel b\u00e1sico, la anotaci\u00f3n debe contener al menos una lista de los recursos disponibles, sus m\u00e9todos HTTP, cuerpos de las solicitudes, enumeraci\u00f3n de par\u00e1metros, indicaci\u00f3n de encabezados necesarios y admitidos, as\u00ed como c\u00f3digos de respuesta y formatos de respuestas. Un elemento extremadamente importante de la anotaci\u00f3n del contrato es su descripci\u00f3n verbal ('\u00bfqu\u00e9 suceder\u00e1 si se agrega este par\u00e1metro de consulta a la solicitud?', '\u00bfen qu\u00e9 caso se devolver\u00e1 el c\u00f3digo 400?')<\/p>\n<p>Sin embargo, cuando se trata del desarrollo de una gran cantidad de microservicios, se desea obtener un beneficio adicional de las anotaciones escritas. Por ejemplo, de RAML\/Swagger se puede generar tanto c\u00f3digo de cliente como de servidor en una gran cantidad de lenguajes de programaci\u00f3n. Adem\u00e1s, se puede obtener documentaci\u00f3n autom\u00e1ticamente sobre el microservicio y cargarla en su portal de desarrolladores :)<\/p>\n<p><img decoding=\"async\" alt=\"\u00bfRAML o OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ejemplo de descripci\u00f3n estructurada del contrato<\/i><\/p>\n<p>Es menos com\u00fan la pr\u00e1ctica de probar microservicios bas\u00e1ndose en descripciones de contratos. Si ha escrito tanto la anotaci\u00f3n como el componente, se puede crear una prueba autom\u00e1tica que verifique la adecuaci\u00f3n del funcionamiento del servicio con diversos tipos de datos como entrada. \u00bfEl servicio devuelve alg\u00fan c\u00f3digo de respuesta que no est\u00e9 descrito en la anotaci\u00f3n? \u00bfPodr\u00e1 manejar correctamente datos manifiestamente incorrectos?<\/p>\n<p>Adem\u00e1s, una implementaci\u00f3n de calidad no solo de los contratos, sino tambi\u00e9n de las herramientas para visualizar las anotaciones facilita el trabajo con el microservicio. Es decir, si el arquitecto describi\u00f3 el contrato de manera adecuada, con base en eso, los dise\u00f1adores y desarrolladores podr\u00e1n implementar el servicio en otros productos sin costos de tiempo adicionales.<\/p>\n<p>Para trabajar con herramientas adicionales, tanto RAML como OAS tienen la posibilidad de agregar metadatos no previstos por el est\u00e1ndar (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">por ejemplo, as\u00ed es como se hace en OAS<\/a><\/noindex>).<\/p>\n<p>En general, el campo para la creatividad en la aplicaci\u00f3n de contratos para microservicios es enorme... al menos te\u00f3ricamente<\/p>\n<h3>Comparaci\u00f3n entre un erizo y una culebra<\/h3>\n<p>\nActualmente, la direcci\u00f3n prioritaria de desarrollo en Acronis es el desarrollo de Acronis Cyber Platform. Acronis Cyber Platform son nuevos puntos de integraci\u00f3n de servicios externos con Acronis Cyber Cloud y la parte de agente. Aunque nuestras API internas, descritas en RAML, nos satisfac\u00edan, la necesidad de publicar la API volvi\u00f3 a plantear la cuesti\u00f3n de elecci\u00f3n: \u00bfqu\u00e9 est\u00e1ndar de anotaciones es mejor utilizar para nuestro trabajo?<\/p>\n<p>Inicialmente parec\u00eda que hab\u00eda dos soluciones: las implementaciones m\u00e1s comunes de RAML y Swagger (o OAS). Pero en realidad result\u00f3 que hay al menos 3 o m\u00e1s alternativas.<\/p>\n<p>Por un lado est\u00e1 RAML, un lenguaje poderoso y efectivo. Tiene bien desarrollada la jerarqu\u00eda y herencia, por lo que este formato es m\u00e1s adecuado para grandes empresas que necesitan muchas descripciones, es decir, no un solo producto, sino muchos microservicios que tienen partes comunes de contratos: esquemas de autenticaci\u00f3n, tipos de datos similares, cuerpos de errores.<\/p>\n<p>Sin embargo, el desarrollador de RAML, la empresa Mulesoft, se uni\u00f3 al consorcio Open API, que se ocupa del desarrollo <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>. Por lo tanto, el desarrollo de RAML se detuvo. Para imaginar el formato del evento, imagina que los mantenedores de los componentes principales de Linux se fueron a trabajar a Microsoft. Tal situaci\u00f3n crea las condiciones para utilizar Swagger, que se est\u00e1 desarrollando din\u00e1micamente y en la \u00faltima \u2014 tercera versi\u00f3n \u2014 pr\u00e1cticamente alcanza a RAML en flexibilidad y funcionalidad.<\/p>\n<h3>Si no fuera por un pero...<\/h3>\n<p>\nResulta que no todas las utilidades de c\u00f3digo abierto se actualizaron a la versi\u00f3n OAS 3.0. Para los microservicios en Go, la falta de adaptaci\u00f3n de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> a la nueva versi\u00f3n del est\u00e1ndar ser\u00e1 lo m\u00e1s cr\u00edtico. Sin embargo, la diferencia entre Swagger 2 y Swagger 3 es <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">enorme<\/a><\/noindex>. Por ejemplo, en la tercera versi\u00f3n, los desarrolladores:<\/p>\n<ul>\n<li>mejoraron la descripci\u00f3n de los esquemas de autenticaci\u00f3n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">terminaron<\/a><\/noindex> el soporte para JSON Schema<\/li>\n<li>mejoraron la capacidad de agregar ejemplos<\/li>\n<\/ul>\n<p>\nLa situaci\u00f3n resulta curiosa: al elegir un est\u00e1ndar, se deben considerar RAML, Swagger 2 y Swagger 3 como alternativas separadas. Solo Swagger 2 tiene un buen soporte de herramientas de OpenSource. RAML es muy flexible... y complicado, mientras que Swagger 3 tiene un d\u00e9bil apoyo de la comunidad, as\u00ed que tendr\u00e1s que utilizar herramientas de desarrollo propio o soluciones comerciales, que por lo general son bastante caras. <\/p>\n<p>Sin embargo, si en Swagger hay muchas caracter\u00edsticas agradables, como un portal listo <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, donde se puede cargar una anotaci\u00f3n y obtener su visualizaci\u00f3n con una descripci\u00f3n detallada, enlaces y relaciones, mientras que para la m\u00e1s fundamental y menos amigable RAML no hay tal posibilidad. S\u00ed, se puede buscar algo entre proyectos en GitHub, encontrar un equivalente y desplegarlo por cuenta propia. Sin embargo, de todos modos, alguien tiene que mantener el portal, lo que no es tan conveniente para un uso b\u00e1sico o necesidades de prueba. Adem\u00e1s, swagger es m\u00e1s \"pragm\u00e1tico\", o liberal \u2014 se puede generar a partir de comentarios en el c\u00f3digo, lo cual, por supuesto, va en contra del principio de API first y no es compatible con ninguna de las herramientas de RAML.<\/p>\n<p>En su momento comenzamos a trabajar con RAML, como un lenguaje m\u00e1s flexible, y al final tuvimos que hacer muchas cosas manualmente. Por ejemplo, en uno de los proyectos se utiliza la herramienta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> en pruebas unitarias, que solo admite RAML 0.8. As\u00ed que tuvimos que a\u00f1adir parches para que la herramienta pudiera \"aguantar\" RAML versiones 1.0.<\/p>\n<h3>\u00bfEs necesario elegir?<\/h3>\n<p>\nDespu\u00e9s de experimentar escribiendo sobre el ecosistema de soluciones para RAML, llegamos a la conclusi\u00f3n de que necesitamos convertir RAML a Swagger 2 y en \u00e9l llevar a cabo toda la automatizaci\u00f3n, verificaci\u00f3n, pruebas y posterior optimizaci\u00f3n. Es una buena manera de usar simult\u00e1neamente la flexibilidad de RAML y el soporte de las herramientas de la comunidad de Swagger. <\/p>\n<p>Para resolver esta tarea existen dos herramientas OpenSource, que deber\u00edan proporcionar la conversi\u00f3n de contratos:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 una herramienta actualmente no mantenida. Durante el trabajo con ella, descubrimos que ten\u00eda varios problemas con RAML complejos que estaban \"dispersos\" en una gran cantidad de archivos. Este programa est\u00e1 escrito en JavaScript y realiza un recorrido recursivo por el \u00e1rbol sint\u00e1ctico. Debido a la tipificaci\u00f3n din\u00e1mica, resulta complicado entender este c\u00f3digo, as\u00ed que decidimos no perder tiempo escribiendo parches para una herramienta en declive.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 una herramienta de la misma compa\u00f1\u00eda, que pretende estar lista para convertir todo y en cualquier direcci\u00f3n. Hasta la fecha, se declare que soporta RAML 0.8, RAML 1.0 y Swagger 2.0. Sin embargo, en el momento de nuestra investigaci\u00f3n, la herramienta a\u00fan estaba <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">EXTREMADAMENTE<\/a><\/noindex> inmadura e impropia para su uso. Los desarrolladores est\u00e1n creando una especie de <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, lo que les permitir\u00e1 agregar nuevos est\u00e1ndares r\u00e1pidamente en el futuro. Pero por ahora, todo esto simplemente no funciona.<\/li>\n<\/ol>\n<p>\nY eso no es todo, con lo que nos hemos encontrado. Uno de los pasos en nuestro pipeline es verificar que el RAML del repositorio es correcto con respecto a la especificaci\u00f3n. Hemos probado varias herramientas. Sorprendentemente, todas se quejaron de nuestras anotaciones en diferentes lugares y con palabras totalmente inesperadas. Adem\u00e1s, no siempre ten\u00edan sentido :).<\/p>\n<p>Al final, nos quedamos con un proyecto obsoleto que tambi\u00e9n tiene una serie de problemas (a veces falla sin motivo, tiene problemas al trabajar con expresiones regulares). As\u00ed que no encontramos una manera de resolver las tareas de validaci\u00f3n y conversi\u00f3n con herramientas gratuitas, y decidimos utilizar una herramienta comercial. En el futuro, cuando las herramientas de OpenSource se desarrollen m\u00e1s, puede que resolver esta tarea sea m\u00e1s sencillo. Pero por ahora, el esfuerzo y tiempo invertido en \"pulir\" la soluci\u00f3n nos parecieron m\u00e1s significativos que el costo del servicio comercial.<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>\nDespu\u00e9s de todo esto, quisimos compartir nuestra experiencia y se\u00f1alar que antes de elegir una herramienta para describir contratos, es necesario tener claro lo que desean de ella y qu\u00e9 presupuesto est\u00e1n dispuestos a invertir. Si olvidamos el OpenSource, ya hay una gran cantidad de servicios y productos disponibles que pueden ayudar a hacer verificaciones, convertir y validar. Pero son caros, y a veces \u2014 muy caros. Para una gran empresa, estos gastos son tolerables, pero para una startup pueden convertirse en una carga significativa.<\/p>\n<p>Definir el conjunto de herramientas que utilizar\u00e1n m\u00e1s adelante. Por ejemplo, si solo necesitan mostrar un contrato, ser\u00e1 m\u00e1s f\u00e1cil usar Swagger 2, que tiene una API atractiva, ya que en RAML tendr\u00e1n que levantar y mantener el servicio por su cuenta.<br \/>\nCuantas m\u00e1s tareas tengan, mayor ser\u00e1 la necesidad de herramientas, y estas var\u00edan seg\u00fan las plataformas; es mejor familiarizarse con las versiones disponibles desde el principio para tomar una decisi\u00f3n que minimice sus costos en el futuro.<\/p>\n<p>Pero es justo reconocer que todos los ecosistemas existentes hoy en d\u00eda son imperfectos. Por lo tanto, si hay entusiastas en la empresa que aman trabajar con RAML porque \"permite expresar pensamientos de manera m\u00e1s flexible\", o, por el contrario, prefieren Swagger porque \"es m\u00e1s claro\", lo mejor es dejarlos trabajar en aquello con lo que est\u00e1n acostumbrados y quieren, ya que la herramienta de cualquiera de los formatos requiere ajustes finos. <\/p>\n<p>En cuanto a nuestra experiencia, en las siguientes publicaciones hablaremos sobre qu\u00e9 chequeos est\u00e1ticos y din\u00e1micos realizamos basados en nuestra arquitectura RAML-Swagger, as\u00ed como sobre la documentaci\u00f3n que generamos a partir de los contratos y c\u00f3mo todo esto funciona.<\/p>\n<p class=\"for_users_only_msg\">Solo los usuarios registrados pueden participar en la encuesta. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Inicie sesi\u00f3n<\/a><\/noindex>, por favor.<\/p>\n<h2 class=\"default-block__polling-title\">\u00bfQu\u00e9 lenguaje utilizas para las anotaciones de contratos de microservicios?<\/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 (tambi\u00e9n conocido como )<\/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>                    Otro<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No utilizo<\/p>\n<\/li>\n<\/ul>\n<p>    Votaron 100 usuarios. 24 usuarios se abstuvieron.<br \/>\n<br \/>Fuente: <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 - 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\/es\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Entonces, \u00bfRAML o OAS (Swagger)? | ProHoster","description":"En el din\u00e1mico mundo de los microservicios, todo puede cambiar: cualquier componente se puede reescribir en otro lenguaje, utilizando diferentes frameworks y arquitecturas.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}