{"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\/it\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","title":{"rendered":"Supporto monorepo e multirepo in werf e cosa c'entra Docker Registry","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Supporto monorepo e multirepo in werf e cosa c&#039;entra Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/7bd2036d8e53b04965212698a209d4c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl tema del monorepo \u00e8 stato gi\u00e0 discusso molte volte e, di solito, solleva vivaci dibattiti. Creando <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> uno strumento Open Source, destinato a migliorare i processi di compilazione del codice delle applicazioni da Git in immagini Docker (e la loro successiva consegna in Kubernetes), riflettiamo poco sulla questione di quale scelta sia la migliore. Per noi, \u00e8 fondamentale garantire tutto il necessario per i sostenitori di opinioni diverse (se ci\u00f2 non contraddice il buon senso, ovviamente).<\/p>\n<p>Il recente supporto per mono-repo in werf \u00e8 un buon esempio in tal senso. Ma prima, cerchiamo di capire come questo supporto sia effettivamente collegato all'uso di werf e quale sia il ruolo di Docker Registry...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Problematica<\/h2>\n<p>\nImmaginiamo una situazione del genere. In un'azienda ci sono numerosi team di sviluppatori che lavorano su progetti indipendenti. La maggior parte delle applicazioni funziona in Kubernetes e, di conseguenza, vengono containerizzate. Per memorizzare i contenitori e le immagini, \u00e8 necessario un registro (registry). L'azienda utilizza Docker Hub con un unico account <code>COMPANY<\/code>. Analogamente alla maggior parte dei sistemi di archiviazione del codice sorgente, <b>Docker Hub non consente di creare una gerarchia di repository annidata<\/b>, come <code>COMPANY\/PROJECT\/IMAGE<\/code>. In tal caso... come possiamo memorizzare applicazioni non monolitiche nel registro senza creare un account separato per ogni progetto? <\/p>\n<p><img decoding=\"async\" alt=\"Supporto monorepo e multirepo in werf e cosa c&#039;entra Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/b7905fab48723a123bee536e1fe56c5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 possibile che la situazione descritta sia nota a qualcuno, ma analizziamo la questione dell'organizzazione della memorizzazione delle applicazioni in generale, ossia senza fare riferimento all'esempio sopra descritto e a Docker Hub.<\/p>\n<h3>Vie di soluzione<\/h3>\n<p>\nSe l'applicazione <b>\u00e8 monolitica<\/b>, viene fornita in un'unica immagine, quindi non ci sono problemi e semplicemente memorizziamo le immagini nel registro dei contenitori del progetto.<\/p>\n<p>Quando l'applicazione \u00e8 rappresentata da pi\u00f9 componenti, <b>microservizi<\/b>, \u00e8 necessario scegliere un approccio specifico. Per esempio, prendiamo un'applicazione web tipica, composta da due immagini: <code>frontend<\/code> e <code>backend<\/code> \u2014 le possibili opzioni sono:<\/p>\n<ol>\n<li> Memorizzare le immagini in repository annidati separati:\n<p><img decoding=\"async\" alt=\"Supporto monorepo e multirepo in werf e cosa c&#039;entra Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/a05bfdaec10ea7b4542200c6a2bb4939.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Memorizzare tutto in un unico repository, considerando il nome dell'immagine nel tag, ad esempio, nel modo seguente:\n<p><img decoding=\"async\" alt=\"Supporto monorepo e multirepo in werf e cosa c&#039;entra 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>: In realt\u00e0, c'\u00e8 anche l'opzione di salvare in vari repository, <code>PROJECT-frontend<\/code> e <code>PROJECT-backend<\/code>, ma non la esamineremo a causa della difficolt\u00e0 nel supportarla, nel gestire e distribuire i diritti tra gli utenti.<\/i><\/p>\n<h2>Supporto in werf<\/h2>\n<p>\nInizialmente werf si era limitato ai repository annidati, poich\u00e9 la maggior parte dei registri supporta questa possibilit\u00e0. A partire dalla versione <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/releases\/tag\/v1.0.4-alpha.3\">v1.0.4-alpha.3<\/a><\/noindex>, \u00e8 stata aggiunta la gestione dei registri che <b>non supportano l'annidamento<\/b>, incluso Docker Hub. Da questo momento, l'utente ha la possibilit\u00e0 di scegliere come memorizzare le immagini dell'applicazione.<\/p>\n<p>L'implementazione \u00e8 disponibile attraverso l'opzione <code>--images-repo-mode=multirepo|monorepo<\/code> (predefinito <code>multirepo<\/code>, ovvero memorizzazione in repository annidati). Essa definisce i modelli secondo cui le immagini sono memorizzate nel registro. \u00c8 sufficiente selezionare la modalit\u00e0 desiderata durante l'uso dei comandi principali, e tutto il resto rimarr\u00e0 invariato.<\/p>\n<p>Poich\u00e9 la maggior parte delle opzioni di werf possono essere impostate <b>tramite variabili d'ambiente<\/b>, nelle piattaforme CI\/CD, la modalit\u00e0 di memorizzazione pu\u00f2 generalmente essere impostata globalmente per l'intero progetto. Ad esempio, <b>nel caso di GitLab<\/b> , \u00e8 sufficiente aggiungere una variabile d'ambiente nelle impostazioni del progetto: <i>Impostazioni -&gt; CI \/ CD -&gt; Variabili: <code>WERF_IMAGES_REPO_MODE: multirepo|monorepo<\/code><\/i>.<\/p>\n<p>Parlando della pubblicazione delle immagini e del deployment delle applicazioni (su questi processi \u00e8 possibile leggere in dettaglio negli articoli pertinenti della documentazione: <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/publish_process.html\">Processo di pubblicazione<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/deploy_into_kubernetes.html\">Processo di deploy<\/a><\/noindex>), la modalit\u00e0 definisce esclusivamente il modello secondo cui si pu\u00f2 lavorare con l'immagine.<\/p>\n<h3>Il diavolo \u00e8 nei dettagli<\/h3>\n<p>\nLa differenza e la principale difficolt\u00e0 nell'aggiungere un nuovo metodo di memorizzazione sono nel processo di pulizia del registry <i>(le possibilit\u00e0 di pulizia, supportate in werf, sono descritte in <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/cleaning_process.html\">Processo di pulizia<\/a><\/noindex>)<\/i>.<\/p>\n<p>) Quando si pulisce, werf considera le immagini utilizzate nei cluster Kubernetes, cos\u00ec come le politiche impostate dall'utente. Alla base delle politiche c'\u00e8 la suddivisione dei tag in strategie. Le strategie attualmente supportate sono:<\/p>\n<ol>\n<li> 3 strategie legate ai primitivi Git, come tag, branch e commit;<\/li>\n<li> 1 strategia per tag utente arbitrari.<\/li>\n<\/ol>\n<p>\nLe informazioni sulla strategia del tag sono conservate quando si pubblica l'immagine nelle etichette dell'immagine finale. Il valore stesso \u2014 il cosiddetto <b>metatags<\/b> \u2014 \u00e8 necessario per applicare parte delle politiche. Ad esempio, quando si elimina un branch o un tag da un repository Git, \u00e8 logico rimuovere anche le immagini <i>non utilizzate<\/i> dal registro, cosa coperta parte delle nostre politiche.<\/p>\n<p>Quando si salva in un unico repository (<code>monorepo<\/code>), nel tag dell'immagine, oltre al metatag, \u00e8 possibile memorizzare anche il nome dell'immagine: <code>PROGETTO:<b>frontend<\/b>-META-TAG<\/code>. Per separare, non abbiamo introdotto un delimitatore specifico, ma abbiamo semplicemente aggiunto il valore necessario all'etichetta dell'immagine finale al momento della pubblicazione.<\/p>\n<p><i><b>NB<\/b>: Se sei interessato a vedere tutto ci\u00f2 che \u00e8 descritto nel codice sorgente di werf, il punto di partenza potrebbe essere <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/pull\/1684\/files\">PR 1684<\/a><\/noindex>.<\/i><\/p>\n<p>In questo articolo non approfondiremo ulteriormente la problematica e la giustificazione del nostro approccio: sulle strategie di tagging, sulla conservazione dei dati nelle etichette e sul processo di pubblicazione in generale \u2014 tutto questo \u00e8 stato ampiamente trattato nel recente rapporto di Dmitrij Stoljarev: \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 il nostro strumento per CI\/CD in Kubernetes<\/a><\/noindex>\u00bb.<\/p>\n<h2>In sintesi<\/h2>\n<p>\nL'assenza di supporto per registri senza nidificazione non \u00e8 stata un fattore bloccante per noi o per i comuni utenti di werf \u2014 infatti \u00e8 sempre possibile avviare un registro separato di immagini (o passare a un Container Registry in Google Cloud)\u2026 Tuttavia, rimuovere tale restrizione appariva logico affinch\u00e9 lo strumento fosse pi\u00f9 utile a una community DevOps pi\u00f9 ampia. Implementandolo, ci siamo scontrati con la principale difficolt\u00e0 nel ripensare il meccanismo di pulizia del registro dei container. Ora che tutto \u00e8 pronto, \u00e8 piacevole sapere che per qualcuno \u00e8 diventato pi\u00f9 facile, e per noi (come sviluppatori principali del progetto) non prevediamo difficolt\u00e0 significative nel mantenere questa funzionalit\u00e0 in futuro.<\/p>\n<p>Resta con noi e presto ti parleremo di altre novit\u00e0 in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggi anche nel nostro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Ora puoi costruire immagini Docker in werf anche usando un normale Dockerfile<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 il nostro strumento per CI\/CD in Kubernetes (panoramica e video della presentazione)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fonte: <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.1.1 - 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\/it\/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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Supporto per monorepo e multirepo in werf e qual \u00e8 il rapporto con Docker Registry | ProHoster","description":"Il tema del monorepo.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/37667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37667"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}