{"id":37667,"date":"2019-10-31T22:18:58","date_gmt":"2019-10-31T19:18:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\/"},"modified":"2019-10-31T22:18:58","modified_gmt":"2019-10-31T19:18:58","slug":"podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","title":{"rendered":"Soporte para monorepos y multirepos en werf y qu\u00e9 tiene que ver Docker Registry","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Soporte para monorepos y multirepos en werf y qu\u00e9 tiene que ver Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/7bd2036d8e53b04965212698a209d4c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl tema del monorepositorio ya se ha discutido en varias ocasiones y, por lo general, provoca debates bastante activos. Al crear <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> una herramienta de c\u00f3digo abierto destinada a mejorar los procesos de compilaci\u00f3n de aplicaciones desde Git a im\u00e1genes Docker (y su posterior entrega en Kubernetes), rara vez reflexionamos sobre cu\u00e1l es la mejor opci\u00f3n. Para nosotros, lo primordial es garantizar todo lo necesario para los partidarios de diferentes opiniones (siempre que no contravenga el sentido com\u00fan, por supuesto).<\/p>\n<p>El reciente soporte para mono-repo en werf es un buen ejemplo de esto. Pero primero, aclaremos c\u00f3mo este soporte se relaciona con el uso de werf y qu\u00e9 tiene que ver con el Docker Registry...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Problem\u00e1tica<\/h2>\n<p>\nImaginemos una situaci\u00f3n. En la empresa hay numerosos equipos de desarrolladores que trabajan en proyectos independientes. La mayor\u00eda de las aplicaciones funcionan en Kubernetes, y, por lo tanto, est\u00e1n contenerizadas. Para almacenar los contenedores y las im\u00e1genes, se necesita un registro. Como registro, la empresa utiliza Docker Hub con una \u00fanica cuenta <code>COMPANY<\/code>. Siguiendo la analog\u00eda de la mayor\u00eda de los sistemas de almacenamiento de c\u00f3digo fuente, <b>Docker Hub no permite crear una jerarqu\u00eda de repositorios anidada<\/b>, como <code>COMPANY\/PROJECT\/IMAGE<\/code>. En este caso... \u00bfc\u00f3mo almacenar en el registro aplicaciones no monol\u00edticas sin crear una cuenta separada para cada proyecto? <\/p>\n<p><img decoding=\"async\" alt=\"Soporte para monorepos y multirepos en werf y qu\u00e9 tiene que ver Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/b7905fab48723a123bee536e1fe56c5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs posible que esta situaci\u00f3n sea familiar para algunos, pero consideremos la cuesti\u00f3n de la organizaci\u00f3n del almacenamiento de aplicaciones en general, es decir, sin atenernos al ejemplo descrito anteriormente y a Docker Hub.<\/p>\n<h3>Opciones de soluci\u00f3n<\/h3>\n<p>\nSi la aplicaci\u00f3n <b>es monol\u00edtica<\/b>, no hay preguntas y simplemente almacenamos las im\u00e1genes en el registro de contenedores del proyecto.<\/p>\n<p>Cuando la aplicaci\u00f3n se presenta en forma de varios componentes, <b>microservicios<\/b>, se requiere elegir un enfoque espec\u00edfico. Tomando como ejemplo una aplicaci\u00f3n web t\u00edpica, que consta de dos im\u00e1genes: <code>frontend<\/code> y <code>backend<\/code> \u2014 las posibles opciones son las siguientes:<\/p>\n<ol>\n<li> Almacenar im\u00e1genes en repositorios anidados separados:\n<p><img decoding=\"async\" alt=\"Soporte para monorepos y multirepos en werf y qu\u00e9 tiene que ver Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/a05bfdaec10ea7b4542200c6a2bb4939.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Almacenar todo en un solo repositorio y considerar el nombre de la imagen en la etiqueta, por ejemplo, de la siguiente manera:\n<p><img decoding=\"async\" alt=\"Soporte para monorepos y multirepos en werf y qu\u00e9 tiene que ver Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/83498b5bcdf7a57dfe933295e78fc785.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\n<i><b>NB<\/b>: En realidad, hay otra opci\u00f3n que consiste en guardar en diferentes repositorios, <code>PROJECT-frontend<\/code> y <code>PROJECT-backend<\/code>, pero no la consideraremos debido a la complejidad de soporte, organizaci\u00f3n y distribuci\u00f3n de derechos entre los usuarios.<\/i><\/p>\n<h2>Soporte en werf<\/h2>\n<p>\nInicialmente, werf se limit\u00f3 a repositorios anidados, ya que la mayor\u00eda de los registros soportan esta funcionalidad. A partir de la versi\u00f3n <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/releases\/tag\/v1.0.4-alpha.3\">v1.0.4-alpha.3<\/a><\/noindex>, se a\u00f1adi\u00f3 compatibilidad con registros que <b>no soportan anidamiento<\/b>, siendo Docker Hub uno de ellos. A partir de este momento, los usuarios tienen la opci\u00f3n de c\u00f3mo almacenar las im\u00e1genes de la aplicaci\u00f3n.<\/p>\n<p>La implementaci\u00f3n est\u00e1 disponible en el marco de la opci\u00f3n <code>--images-repo-mode=multirepo|monorepo<\/code> (por defecto, <code>multirepo<\/code>, es decir, almacenamiento en repositorios anidados). Esta opci\u00f3n define las plantillas seg\u00fan las cuales se almacenan las im\u00e1genes en el registro. Basta con seleccionar el modo deseado al utilizar los comandos b\u00e1sicos, y el resto permanecer\u00e1 sin cambios.<\/p>\n<p>Dado que la mayor\u00eda de las opciones de werf se pueden establecer mediante <b>variables de entorno<\/b>, en sistemas CI\/CD, el modo de almacenamiento suele establecerse globalmente para todo el proyecto. Por ejemplo, <b>en el caso de GitLab<\/b> , es suficiente con agregar una variable de entorno en la configuraci\u00f3n del proyecto: <i>Settings -&gt; CI \/ CD -&gt; Variables: <code>WERF_IMAGES_REPO_MODE: multirepo|monorepo<\/code><\/i>.<\/p>\n<p>En t\u00e9rminos de publicaci\u00f3n de im\u00e1genes y despliegue de aplicaciones (se puede leer m\u00e1s sobre estos procesos en los art\u00edculos correspondientes de la documentaci\u00f3n: <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/publish_process.html\">Proceso de publicaci\u00f3n<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/deploy_into_kubernetes.html\">Proceso de despliegue<\/a><\/noindex>), el modo \u00fanicamente determina la plantilla seg\u00fan la cual se puede trabajar con la imagen.<\/p>\n<h3>El diablo est\u00e1 en los detalles<\/h3>\n<p>\nLa diferencia y la principal dificultad al agregar un nuevo m\u00e9todo de almacenamiento radica en el proceso de limpieza del registro <i>(las capacidades de limpieza soportadas en werf se pueden ver en <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/cleaning_process.html\">Proceso de limpieza<\/a><\/noindex>)<\/i>.<\/p>\n<p>Al limpiar, werf tiene en cuenta las im\u00e1genes utilizadas en los cl\u00fasteres de Kubernetes, as\u00ed como las pol\u00edticas configuradas por el usuario. La base de las pol\u00edticas reside en la divisi\u00f3n de etiquetas en estrategias. Las estrategias actualmente soportadas son:<\/p>\n<ol>\n<li> 3 estrategias relacionadas con primitivas de Git, como etiquetas, ramas y confirmaciones;<\/li>\n<li> 1 estrategia para etiquetas de usuario arbitrarias.<\/li>\n<\/ol>\n<p>\nLa informaci\u00f3n sobre la estrategia de etiquetas se guarda al publicar la imagen en las etiquetas de la imagen final. El propio valor, el llamado <b>metatag<\/b> , es necesario para aplicar parte de las pol\u00edticas. Por ejemplo, al eliminar una rama o etiqueta del repositorio de Git, es l\u00f3gico eliminar tambi\u00e9n las im\u00e1genes <i>no utilizadas<\/i> del registro, lo cual est\u00e1 cubierto por parte de nuestras pol\u00edticas.<\/p>\n<p>Al guardar en un solo repositorio (<code>monorepo<\/code>), en la etiqueta de la imagen, adem\u00e1s del metatag, tambi\u00e9n puede almacenarse el nombre de la imagen: <code>PROYECTO:<b>frontend<\/b>-META-TAG<\/code>. Para separarlos, no introdujimos un separador espec\u00edfico, sino que simplemente a\u00f1adimos el valor necesario en la etiqueta de la imagen final al publicarla.<\/p>\n<p><i><b>NB<\/b>: Si te interesa ver todo lo descrito en el c\u00f3digo fuente de werf, el punto de partida puede ser <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/pull\/1684\/files\">PR 1684<\/a><\/noindex>.<\/i><\/p>\n<p>En este art\u00edculo no abordaremos m\u00e1s el problema y la justificaci\u00f3n de nuestro enfoque: sobre las estrategias de etiquetado, el almacenamiento de datos en etiquetas y el proceso de publicaci\u00f3n en general \u2014 todo esto se detalla en un reciente informe de Dmitry Stolyarov: \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 nuestra herramienta para CI\/CD en Kubernetes<\/a><\/noindex>\u00bb.<\/p>\n<h2>Resumiendo<\/h2>\n<p>\nLa falta de soporte para registros sin anidaci\u00f3n no fue un factor bloqueante para nosotros o para los usuarios conocidos de werf \u2014 siempre se puede levantar un registro separado de im\u00e1genes (o pasar a un Container Registry en Google Cloud)\u2026 Sin embargo, eliminar tal restricci\u00f3n parec\u00eda l\u00f3gico para que la herramienta fuera m\u00e1s conveniente para una comunidad DevOps m\u00e1s amplia. Al implementarlo, nos encontramos con la principal dificultad en la reestructuraci\u00f3n del mecanismo de limpieza del registro de contenedores. Ahora que todo est\u00e1 preparado, es gratificante saber que a alguien le resulta m\u00e1s f\u00e1cil, y para nosotros (como principales desarrolladores del proyecto) no se prev\u00e9n dificultades significativas en el soporte futuro de esta funci\u00f3n.<\/p>\n<p>Mantente con nosotros y muy pronto te contaremos sobre otras novedades en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>!<\/p>\n<h2>P.D.<\/h2>\n<p>\nTambi\u00e9n puedes leer en nuestro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Ahora se pueden construir im\u00e1genes de Docker en werf utilizando un Dockerfile est\u00e1ndar<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf: nuestra herramienta para CI\/CD en Kubernetes (rese\u00f1a y video de la presentaci\u00f3n)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0440\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f werf \u043a\u0430\u043a Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 Git \u0432 Docker-\u043e\u0431\u0440\u0430\u0437\u044b (\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 Kubernetes), \u043c\u044b \u043c\u0430\u043b\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435. \u0414\u043b\u044f \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043d\u0435\u043d\u0438\u0439 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28270,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37667","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=\"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.\" \/>\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\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\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\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 monorepo \u0438 multirepo \u0432 werf \u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c Docker Registry | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\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:18:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:58+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 Soporte para monorepo y multirepo en werf y qu\u00e9 tiene que ver Docker Registry | ProHoster","description":"El tema del monorepositorio.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","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\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 monorepo \u0438 multirepo \u0432 werf \u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c Docker Registry | ProHoster","og:description":"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","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:18:58+00:00","article:modified_time":"2019-10-31T19:18:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37667","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 18:48:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:22:29","updated":"2026-01-23 18:48: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\/37667","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=37667"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/28270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=37667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=37667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=37667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}