{"id":53442,"date":"2019-12-02T00:00:00","date_gmt":"2019-12-01T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/legacy-servisy-v-vashej-infrastrukture"},"modified":"2020-02-18T14:01:20","modified_gmt":"2020-02-18T11:01:20","slug":"legacy-servisy-v-vashej-infrastrukture","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture","title":{"rendered":"Legacy-diensten in uw infrastructuur","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo! Mijn naam is Pasha Chernyak, ik ben de hoofduitvoerder bij QIWI, en vandaag wil ik het hebben over het onvermijdelijke. Over Legacy.<\/p>\n<p>Laten we beginnen met de vraag: wat is een Legacy-service? Is een Legacy-service een service waar de ontwikkelaar al een week\/maand\/jaar niet naar heeft gekeken? Of is het een service die is geschreven door een minder ervaren programmeur, bijvoorbeeld door jou, maar dan een jaar geleden? Maar nu ben je beter en ervaren. Of is een Legacy-service een service die je hebt besloten nooit meer te committen en waar je stilletjes een vervanging voor aan het voorbereiden bent? Hoe dan ook, zo'n service onbeheerd en niet bij te werken laten, is een tijdbom die later kan ontploffen.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/477682\/\"><img decoding=\"async\" alt=\"Legacy-diensten in uw infrastructuur\" src=\"\/wp-content\/uploads\/2019\/12\/d33a4a7983d1c440570bc0ff8da0f1d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Voordat we ingaan op hoe we bij QIWI omgaan met onze Legacy-services, zal ik vertellen hoe we orde op zaken hebben gesteld met de services in de Portemonnee. Ik ben al twee jaar verantwoordelijk voor de werking ervan. Als er een probleem is, bellen ze altijd in de eerste plaats mij. Ik heb meestal niet het lef om om 11 uur 's avonds iemand anders te bellen, dus moest ik altijd zelf aan de slag met alle services in ons domein. <\/p>\n<p>Maar ik, net als elke andere persoon, hou ervan om 's nachts te slapen, dus probeerde ik uit te zoeken wat er misging: \"Jongens, waarom bellen jullie mij?\" Waarop ik een vrij beknopt antwoord kreeg: \"Wie anders?\" Omdat ik de services repareer, maar de mensen weten simpelweg niet wie ze anders moeten bellen.<\/p>\n<p>Daarom hebben we tijdens een van de retro-sessies van het backend-team van de Portemonnee besloten dat we een tabel moesten opstellen met daarop een lijst van onze services, microservices en monolieten van de portemonnee, en de verantwoordelijken daarvoor. Tabellen zijn over het algemeen nuttig, binnen redelijke grenzen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNaast de informatie over wie waarvoor verantwoordelijk is, stonden er antwoorden op vragen: wie de eigenaar van de service is, wie verantwoordelijk is voor de ontwikkeling, de architectuur en de levenscyclus. Mensen die verantwoordelijk zijn voor deze service, zijn de mensen die deze in geval van problemen kunnen repareren. De eigenaar van de service heeft het recht om +2 in de commits achter te laten; de verantwoordelijken moeten ook verplicht aanwezig zijn bij de review voordat deze service een nieuwe commit accepteert.<\/p>\n<p>De tijd verstreek en nieuwe praktijken werden toegepast, zoals migratie naar Kubernetes, verschillende checkstyle, spotbugs, ktlint, het hebben van logs in Kibana, autodiscovery van services in plaats van direct adressen op te geven en andere nuttige zaken. En overal stelde onze tabel ons in staat om de actualiteit van onze services te waarborgen. Voor ons is dit een soort checklist die aangeeft dat deze service dit kan doen, maar dat nog niet. Maar we gingen verder, ons realiserend dat we informatie misten over onze services, waarvoor we toezicht houden, waar de bronbestanden van de service zich bevinden, waar de taken voor de build draaien in TeamCity, hoe ze worden gedeployed, waar de bronbestanden van end2end tests zijn opgeslagen, foto's van de architectuur, over genomen beslissingen. Idealiter wilden we dat al deze informatie ergens beschikbaar was en binnen handbereik wanneer nodig. Daarom werd onze tabel het vertrekpunt voor het zoeken naar informatie.<\/p>\n<p>Maar QIWI, hoewel het de geest van een startup behoudt, is een groot bedrijf. We zijn al 12 jaar actief, en de teams veranderen: mensen gaan weg, mensen komen, nieuwe teams worden gevormd. En we ontdekten op ons domein verschillende services die we als erfgoed hadden gekregen. Sommige kwamen van ontwikkelaars uit andere teams, andere waren gewoon op een indirecte manier verbonden met de Portemonnee, dus nu is die service op onze balans. Waarom zouden we ons verdiepen in wat waar en hoe werkt? De service werkt immers en we hebben productfeatures die we absoluut moeten implementeren.<\/p>\n<h2>Hoe het soms gaat<\/h2>\n<p>\nMaar op een gegeven moment ontdekken we dat de service zijn functie niet meer vervult, dat er iets kapot is \u2014 wat te doen in zo'n situatie? De service werkt gewoon niet meer. Helemaal niet. En we ontdekten dit, ten eerste, per ongeluk, en ten tweede, pas na zes maanden. Dat gebeurt. Het enige wat we wisten, was op welke virtuele machines de service draaide, waar de bronbestanden lagen, en dat was het. We doen een git clone en duiken in de gedachten van de persoon die dit enkele jaren geleden heeft geschreven, maar wat zien we? Geen gebruikelijke Spring Boot, hoewel we eraan gewend zijn, want we hebben full stack en dat soort dingen. Misschien is er een Spring Framework? Maar dat is het niet.<\/p>\n<p>De jongen die dit allemaal schreef, was streng en schreef alles in pure Java. Er zijn geen gangbare tools voor de ontwikkelaar, en het idee komt op \u2014 we moeten dit alles herschrijven. We hebben immers microservices, en uit elke toaster klinkt het vertrouwde: \"Jongens, microservices zijn wat jullie nodig hebben!\". Als er iets misgaat, kun je rustig iedere taal pakken en alles komt goed.<\/p>\n<p>Het probleem is dat we op dit moment geen klant hebben die verantwoordelijk is voor deze service. Wat waren zijn zakelijke vereisten, wat zou deze service \u00fcberhaupt moeten doen? En de service is nauw ge\u00efntegreerd in jullie bedrijfsprocessen. <\/p>\n<p>En nu vraag ik je, hoe eenvoudig is het om een service te herschrijven zonder de zakelijke vereisten te kennen? De service logt op een onduidelijke manier, of er metrics zijn \u2014 dat is onbekend. Wat ze zijn, als ze er zijn \u2014 dat is des te onbekender. En daarbij zijn er in de service een enorm aantal klassen met onduidelijke bedrijfslogica. Iets gaat naar een bepaalde database waarvan we ook nog niks weten. <\/p>\n<h2>Waar te beginnen?<\/h2>\n<p>\nMet het meest logische \u2014 de aanwezigheid van tests. Daarin staat meestal enige logica en kun je conclusies trekken over wat er aan de hand is. Tegenwoordig is TDD trendy, maar we zien dat het vijf jaar geleden vrijwel hetzelfde was als nu: vrijwel geen unit tests, en ze vertellen ons eigenlijk helemaal niets. Behalve misschien een controle, hoe een bepaalde xml wordt ondertekend met een of ander speciaal certificaat.<\/p>\n<p>We couldn't make sense of the code, so we decided to check what's happening on the virtual machine. We opened the service logs and found an error related to the HTTP client\u2014a self-signed certificate embedded in the application's resources had expired. We contacted our analysts, and they requested a new certificate, which was issued, and the service is up and running again. One would think that would be the end of it. But is it? The service is operational, fulfilling a function essential to our business. We have certain application development standards, which I'm sure you have as well. For instance, not storing logs on the node in a folder, but in a storage solution like Elasticsearch, and viewing them in Kibana. We can also remember the golden metrics\u2014meaning the load on the service, the number of requests, whether it's alive or not, and how the HealthCheck is performing. At the very least, these metrics will help us know when we can safely decommission it and forget it like a bad dream.<\/p>\n<h2>Wat te doen<\/h2>\n<p>\nThat's why we add this old service to the table and then look for volunteer developers who will take over the service and tidy it up: they'll write some information about the service, add links to Grafana dashboards, assembly tasks, and understand how to deploy the application, rather than just dropping files onto it via FTP. <\/p>\n<p>The main question is\u2014how much time will this useful volunteer activity take? One sprint for a more or less experienced developer, for example, during the 20% technical debt time. But how long did it take to grasp the entrenched logic of interacting with a certain governmental system and upgrade it to newer technologies? I can't guarantee, it could take a month or even two for the team to complete. I'm speaking from experience with current integration efforts involving some new service.<\/p>\n<p>Nevertheless, there is no business value output whatsoever. None. Taking the service under support and investing a little time in it is perfectly reasonable. However, after our usual rigmarole with the service, we added it to the table, provided some information about it, and maybe one day we'll rewrite it. But right now it meets our service operation standards.<\/p>\n<p>In conclusion, I would like to propose a plan for dealing with Legacy services. <\/p>\n<p><b>Rewriting legacy from scratch is a bad idea.<\/b><br \/>\nNeem het gerust af, daar hoeft je niet over te twijfelen. Het is begrijpelijk dat je bepaalde voordelen ziet, maar meestal heeft niemand er behoefte aan, ook jij niet.<\/p>\n<p><b>Handleiding<\/b><br \/>\nHaal de broncode van je applicaties naar boven, maak een handleiding waarin staat wat waar ligt en hoe het werkt, vermeld ook een projectbeschrijving (bijvoorbeeld readme.md), zodat je snel kunt begrijpen waar de logs en metrics te vinden zijn. De ontwikkelaar die na jou hieraan werkt, zal je dankbaar zijn.<\/p>\n<p><b>Verstaan van het domein<\/b><br \/>\nAls je een domein bezit, probeer dan nauwlettend te volgen. Het klinkt clich\u00e9, maar niet iedereen houdt in de gaten of de services consistent zijn. Werken volgens \u00e9\u00e9n standaard is daadwerkelijk veel eenvoudiger.<\/p>\n<p class=\"for_users_only_msg\">Alleen geregistreerde gebruikers kunnen deelnemen aan de enqu\u00eate. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Log in<\/a><\/noindex>, alstublieft.<\/p>\n<h2 class=\"default-block__polling-title\">Wat doe je met je legacy?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">31.5%<\/strong>Ik herschrijf het vanaf nul, dat is de juiste manier12<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">52.6%<\/strong>Bijna hetzelfde als jij20<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10.5%<\/strong>Wij hebben geen legacy, we zijn goed bezig4<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">5.2%<\/strong>Ik schrijf het in de reacties2<\/p>\n<\/li>\n<\/ul>\n<p>    38 gebruikers hebben gestemd. 20 gebruikers hebben zich onthouden.<br \/>\n<br \/>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/477682\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441? Legacy-\u0441\u0435\u0440\u0432\u0438\u0441 \u2014 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0435 \u043a\u0430\u0441\u0430\u043b\u0441\u044f \u0443\u0436\u0435 \u043d\u0435\u0434\u0435\u043b\u044e\/\u043c\u0435\u0441\u044f\u0446\/\u0433\u043e\u0434? \u0418\u043b\u0438 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043c\u0435\u043d\u0435\u0435 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432\u0430\u043c\u0438, \u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434? \u0410 \u0442\u0435\u043f\u0435\u0440\u044c-\u0442\u043e \u0432\u044b \u043a\u0440\u0443\u0447\u0435 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":53443,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53442","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=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441?\" \/>\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\/legacy-servisy-v-vashej-infrastrukture\" \/>\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\udd47Legacy-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture\" \/>\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-12-01T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:20+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\udd47Legacy-services in uw infrastructuur | ProHoster","description":"Hallo! Mijn naam is Pasha Chernyak, ik ben leidende ontwikkelaar bij QIWI, en vandaag wil ik het hebben over het onvermijdelijke. Over Legacy. Laten we beginnen met de vraag: wat is een Legacy-service?","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture","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\udd47Legacy-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441?","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture","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-12-01T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53442","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-24 07:23:42","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:25:27","updated":"2026-01-24 07:23:42","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\/53442","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=53442"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/53442\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/53443"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=53442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=53442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=53442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}