{"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\/nl\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","title":{"rendered":"Ondersteuning voor monorepo en multirepo in werf en wat Docker Registry hiermee te maken heeft","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ondersteuning voor monorepo en multirepo in werf en wat Docker Registry hiermee te maken heeft\" src=\"\/wp-content\/uploads\/2019\/09\/7bd2036d8e53b04965212698a209d4c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet onderwerp van monorepositories is al meerdere keren besproken en roept doorgaans zeer actieve discussies op. Wanneer we cre\u00ebren <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> als een Open Source-tool, bedoeld om de bouwprocessen van applicatiecode uit Git in Docker-images (en hun daaropvolgende levering in Kubernetes) te verbeteren, denken we weinig na over welke keuze het beste is. Voor ons is het primair om alles te bieden wat nodig is voor aanhangers van verschillende meningen (tenzij het natuurlijk in strijd is met gezond verstand).<\/p>\n<p>De recent ge\u00efntroduceerde ondersteuning voor mono-repo in werf is daar een goed voorbeeld van. Maar laten we eerst bekijken hoe deze ondersteuning eigenlijk verband houdt met het gebruik van werf en wat Docker Registry hiermee te maken heeft\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Problemen<\/h2>\n<p>\nStel je de volgende situatie voor. In het bedrijf zijn er veel ontwikkelteams die aan onafhankelijke projecten werken. De meeste applicaties draaien in Kubernetes en zijn daarom gecontaineriseerd. Voor het opslaan van containers, images, is er een registry nodig. In het bedrijf wordt Docker Hub gebruikt met \u00e9\u00e9n enkel account <code>COMPANY<\/code>. In lijn met de meeste systemen voor het opslaan van broncode, <b>stelt Docker Hub niet in staat om een geneste hi\u00ebrarchie van repositories te cre\u00ebren<\/b>, zoals <code>COMPANY\/PROJECT\/IMAGE<\/code>. In dit geval\u2026 hoe moeten we met deze beperking niet-monolithische applicaties in de registry opslaan zonder een apart account voor elk project te cre\u00ebren? <\/p>\n<p><img decoding=\"async\" alt=\"Ondersteuning voor monorepo en multirepo in werf en wat Docker Registry hiermee te maken heeft\" src=\"\/wp-content\/uploads\/2019\/09\/b7905fab48723a123bee536e1fe56c5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMisschien komt de beschreven situatie iemand bekend voor, maar laten we de kwestie van het organiseren van de opslag van applicaties in het algemeen bekijken, dus zonder verwijzing naar het eerdere voorbeeld en Docker Hub.<\/p>\n<h3>Oplossingsmethoden<\/h3>\n<p>\nAls de applicatie <b>monolithisch<\/b>, wordt geleverd in \u00e9\u00e9n image, zijn er geen vragen en slaan we gewoon de images op in de containerregistry van het project.<\/p>\n<p>Wanneer de applicatie bestaat uit meerdere componenten, <b>microservices<\/b>, is het nodig om een bepaalde aanpak te kiezen. Aan de hand van een typisch webapplicatie, bestaande uit twee images: <code>frontend<\/code> en <code>backend<\/code> \u2014 mogelijke opties zijn:<\/p>\n<ol>\n<li> Sla de images op in aparte geneste repositories:\n<p><img decoding=\"async\" alt=\"Ondersteuning voor monorepo en multirepo in werf en wat Docker Registry hiermee te maken heeft\" src=\"\/wp-content\/uploads\/2019\/09\/a05bfdaec10ea7b4542200c6a2bb4939.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Sla alles in \u00e9\u00e9n repository op en neem de naam van de image mee in de tag, bijvoorbeeld als volgt:\n<p><img decoding=\"async\" alt=\"Ondersteuning voor monorepo en multirepo in werf en wat Docker Registry hiermee te maken heeft\" src=\"\/wp-content\/uploads\/2019\/09\/83498b5bcdf7a57dfe933295e78fc785.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\n<i><b>NB<\/b>: Er is eigenlijk ook een optie om op te slaan in verschillende repositories, <code>PROJECT-frontend<\/code> en <code>PROJECT-backend<\/code>, maar die zullen we niet bespreken vanwege de complexiteit van ondersteuning, organisatie en verdeling van rechten tussen gebruikers.<\/i><\/p>\n<h2>Ondersteuning in werf<\/h2>\n<p>\nAanvankelijk beperkte werf zich tot geneste repositories - gelukkig ondersteunt het merendeel van de registries deze mogelijkheid. Vanaf versie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/releases\/tag\/v1.0.4-alpha.3\">v1.0.4-alpha.3<\/a><\/noindex>, is de ondersteuning voor registries toegevoegd waarin <b>nesten niet wordt ondersteund<\/b>, waaronder Docker Hub. Vanaf dat moment had de gebruiker de keuze hoe applicatie-afbeeldingen op te slaan.<\/p>\n<p>De implementatie is beschikbaar binnen de optie <code>--images-repo-mode=multirepo|monorepo<\/code> (standaard <code>multirepo<\/code>, d.w.z. opslag in geneste repositories). Het definieert de sjablonen volgens welke afbeeldingen in de registry worden opgeslagen. Het is voldoende om de gewenste modus te kiezen bij het gebruik van de basiscommando's, en de rest blijft ongewijzigd.<\/p>\n<p>Aangezien de meeste opties van werf kunnen worden ingesteld via <b>omgeving variabelen<\/b>, is de opslagmodus in CI\/CD-systemen doorgaans makkelijk globaal voor het hele project in te stellen. Bijvoorbeeld, <b>in het geval van GitLab<\/b> is het voldoende om een omgevingsvariabele toe te voegen in de projectinstellingen: <i>Instellingen -&gt; CI \/ CD -&gt; Variabelen: <code>WERF_IMAGES_REPO_MODE: multirepo|monorepo<\/code><\/i>.<\/p>\n<p>Als we het hebben over het publiceren van afbeeldingen en het uitrollen van applicaties (over deze processen is meer te lezen in de relevante documenten: <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/publish_process.html\">Publiceerproces<\/a><\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/deploy_into_kubernetes.html\">Uitrolproces<\/a><\/noindex>), dan bepaalt de modus uitsluitend het sjabloon waarmee kan worden gewerkt met de afbeelding.<\/p>\n<h3>Het zit hem in de details<\/h3>\n<p>\nHet verschil en de belangrijkste uitdaging bij het toevoegen van een nieuwe opslagmethode is het opschonen van de registry <i>(de opschoonmogelijkheden ondersteund in werf, zie in <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/cleaning_process.html\">Opschoonproces<\/a><\/noindex>)<\/i>.<\/p>\n<p>Bij het opschonen houdt werf rekening met de in Kubernetes-clusters gebruikte afbeeldingen, evenals met de door de gebruiker ingestelde beleidsregels. De basis van de beleidsregels ligt in de opsplitsing van tags in strategie\u00ebn. Momenteel ondersteunde strategie\u00ebn zijn:<\/p>\n<ol>\n<li> 3 strategie\u00ebn gerelateerd aan Git-primitieven, zoals tag, branch en commit;<\/li>\n<li> 1 strategie voor willekeurige door de gebruiker gedefinieerde tags.<\/li>\n<\/ol>\n<p>\nInformatie over de tagstrategie wordt opgeslagen bij het publiceren van de afbeelding in de labels van de eindafbeelding. De waarde zelf - de zogenaamde <b>metatag<\/b> - is nodig voor de toepassing van een deel van de beleidsregels. Bijvoorbeeld, bij het verwijderen van een branch of tag uit de Git-repository is het logisch om ook de bijbehorende <i>ongebruikte<\/i> afbeeldingen uit de registry te verwijderen, wat dekt een deel van onze beleidsregels.<\/p>\n<p>Bij opslag in \u00e9\u00e9n repository (<code>monorepo<\/code>), kan naast de metatag ook de naam van de afbeelding worden opgeslagen in de tag van de afbeelding: <code>PROJECT:<b>frontend<\/b>-META-TAG<\/code>. Voor hun scheiding hebben we geen specifieke scheidingstekens ge\u00efntroduceerd, maar gewoon de nodige waarde aan het label van de uiteindelijke afbeelding toegevoegd bij publicatie.<\/p>\n<p><i><b>NB<\/b>: Als je ge\u00efnteresseerd bent in alles wat in de broncode van werf is beschreven, kan het startpunt zijn <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/pull\/1684\/files\">PR 1684<\/a><\/noindex>.<\/i><\/p>\n<p>In dit artikel zullen we niet verder ingaan op de problematiek en het onderbouwen van onze aanpak: over taggingstrategie\u00ebn, gegevensopslag in labels en het publicatieproces in het algemeen \u2014 hierover is uitgebreid gesproken in het recente verslag van Dmitry Stolyarov: \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf - onze tool voor CI\/CD in Kubernetes<\/a><\/noindex>\u00bb.<\/p>\n<h2>Samenvattend<\/h2>\n<p>\nHet gebrek aan ondersteuning voor register zonder genestelde structuren was geen blokkade voor ons of de bekende gebruikers van werf \u2014 het is immers altijd mogelijk om een afzonderlijk image-register op te zetten (of over te stappen op een zogeheten Container Registry in Google Cloud)... Echter, het verwijderen van zo'n beperking leek logisch om het gereedschap gebruiksvriendelijker te maken voor een breder DevOps-gemeenschap. Bij de implementatie ervan stuitten we op de grootste uitdaging in het herzien van het mechanisme voor het opruimen van het containerregister. Nu alles klaar is, is het fijn om te beseffen dat het voor iemand gemakkelijker is geworden, en voor ons (als de belangrijkste ontwikkelaars van het project) zijn er geen noemenswaardige moeilijkheden te verwachten bij de verdere ondersteuning van deze functie.<\/p>\n<p>Blijf bij ons en binnenkort vertellen we je over andere innovaties in de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Docker-images kunnen nu ook met werf worden gebouwd met een gewone Dockerfile.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 onze tool voor CI\/CD in Kubernetes (overzicht en video van de presentatie)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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\/nl\/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\udd47Ondersteuning voor monorepo en multirepo in werf en wat Docker Registry hier mee te maken heeft | ProHoster","description":"Het onderwerp monorepo.","canonical_url":"https:\/\/prohoster.info\/nl\/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":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/37667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=37667"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/37667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/28270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=37667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=37667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=37667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}