{"id":80224,"date":"2020-05-04T13:42:20","date_gmt":"2020-05-04T11:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov"},"modified":"2020-05-04T13:42:20","modified_gmt":"2020-05-04T11:42:20","slug":"storacle-deczentralizovannoe-hranilishhe-fajlov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2014 een decentraal bestandsopslag systeem","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2014 een decentraal bestandsopslag systeem\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voordat ik begin, moet ik <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">een link naar het vorige artikel<\/a><\/noindex>, om duidelijk te maken waar het precies over gaat.<\/p>\n<p><\/p>\n<p>In dit artikel wil ik de laag bespreken die verantwoordelijk is voor het opslaan van bestanden, en hoe dit door iedereen kan worden gebruikt. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle is een zelfstandige bibliotheek<\/a><\/noindex>, die geen directe verbinding met muziek heeft. Het is mogelijk om verschillende bestanden op te slaan.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>In het voorgaande artikel heb ik wat kritiek geuit op <strong>ipfs<\/strong>, maar dat gebeurde precies in de context van het probleem dat ik aan het oplossen was. Over het algemeen vind ik dit project geweldig. Ik hou gewoon meer van de mogelijkheid om verschillende netwerken voor verschillende taken te cre\u00ebren. Dit maakt het mogelijk om de structuur beter te organiseren en de belasting op afzonderlijke knooppunten en het netwerk als geheel te verminderen. Zelfs binnen \u00e9\u00e9n project kan het nodig zijn om het netwerk op te splitsen in stukken op basis van bepaalde criteria, waardoor de totale belasting wordt verminderd.<\/p>\n<p><\/p>\n<p>Dus, storacle gebruikt een mechanisme <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> voor het organiseren van het netwerk. Belangrijkste kenmerken:<\/p>\n<p><\/p>\n<ul>\n<li>Bestanden kunnen via elk knooppunt aan de opslag worden toegevoegd.<\/li>\n<li>Bestanden worden in hun geheel opgeslagen, niet in blokken.<\/li>\n<li>Elk bestand heeft zijn eigen unieke hash op basis van de inhoud voor verder gebruik.<\/li>\n<li>Bestanden kunnen worden gedupliceerd voor meer betrouwbaarheid<\/li>\n<li>Het aantal bestanden op \u00e9\u00e9n knooppunt is alleen beperkt door het bestandssysteem (er is een uitzondering, daarover verderop meer)<\/li>\n<li>Het aantal bestanden in het netwerk is beperkt door de mogelijkheden van spreadable wat betreft het aantal toegestane knooppunten in het netwerk, die in de tweede versie in staat zullen zijn om met een oneindig aantal knooppunten te werken (hierover in een ander artikel)<\/li>\n<\/ul>\n<p><\/p>\n<p>Een eenvoudig voorbeeld van hoe dit eigenlijk werkt vanuit het programma:<\/p>\n<p><\/p>\n<p>Server:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const Node = require('storacle').Node;\n\n(async () =&gt; {\n  try {\n    const node = new Node({\n      port: 4000,\n      hostname: 'localhost'\n    });\n    await node.init();\n  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p>Klant:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const Client = require('storacle').Client;\n\n(async () =&gt; {\n  try {\n    const client = new Client({\n      address: 'localhost:4000'\n    });\n    await client.init();\n    const hash = await client.storeFile('.\/my-file');\n    const link = await client.getFileLink(hash);\n    await client.removeFile(hash);\n  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>Een blik van binnenuit<\/strong><\/p>\n<p><\/p>\n<p>Er is niets bovennatuurlijks onder de motorkap. Informatie over het aantal bestanden, de totale omvang en andere aspecten worden opgeslagen in een in-memory database en worden bijgewerkt bij het verwijderen en toevoegen van bestanden. Daarom is het niet nodig om vaak de bestandssysteem aan te roepen. De enige uitzondering is wanneer de garbage collector wordt ingeschakeld, wat nodig is voor de circulatie van bestanden wanneer een bepaalde opslaggrootte is bereikt, en niet om de toevoeging van nieuwe bestanden te verhinderen. In dat geval moet je de opslag doorzoeken, en het werken met een groot aantal bestanden (&gt; een miljoen, zeg maar) kan aanzienlijke belasting veroorzaken. Het is beter om minder bestanden op te slaan en meer nodes te draaien. Als de 'opruimer' is uitgeschakeld, is dat probleem er niet.<\/p>\n<p><\/p>\n<p>Het bestandsopslag bestaat uit 256 mappen en 2 niveaus van diepte. Bestanden worden opgeslagen in de mappen van de tweede laag. Dus bij 1 miljoen bestanden zal er in elke dergelijke map ongeveer 62500 zitten (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>De namen van de mappen zijn gevormd uit de hash van het bestand, zodat men snel toegang kan krijgen, als men de hash kent.<\/p>\n<p><\/p>\n<p>Deze structuur is gekozen op basis van de vele verschillende eisen aan de opslag: ondersteuning van zwakke bestandssystemen, waar het niet wenselijk is om veel bestanden in \u00e9\u00e9n map te hebben, snelle doorloop van alle mappen indien nodig, enzovoorts. Een soort gouden middenweg.<\/p>\n<p><\/p>\n<p><strong>Caching<\/strong><\/p>\n<p><\/p>\n<p>Bij het toevoegen van bestanden, evenals bij het ophalen ervan, worden links naar bestanden in de cache opgeslagen.<br \/>\nHierdoor is het vaak niet nodig om het hele netwerk door te zoeken naar een bestand. Dit versnelt het verkrijgen van links en vermindert de belasting op het netwerk. Ook vindt caching plaats via http-headers.<\/p>\n<p><\/p>\n<p><strong>Isomorfisme<\/strong><\/p>\n<p><\/p>\n<p>De client is geschreven in JavaScript en is isomorfisch, hij kan rechtstreeks vanuit de browser worden gebruikt.\u00a0<br \/>\nEen bestand kan worden ge\u00fcpload <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js<\/a><\/noindex> als script en toegang krijgen tot <strong>window.ClientStoracle <\/strong>of ge\u00efmporteerd worden via een build-systeem, enzovoort.<\/p>\n<p><\/p>\n<p><strong>Uitgestelde links<\/strong><\/p>\n<p><\/p>\n<p>Een interessante functie is ook de 'uitgestelde link'. Dit is een link naar een bestand die je synchronisch kunt krijgen, hier en nu, en het bestand wordt later opgehaald wanneer het al in de opslag is gevonden. Dit is erg handig wanneer je bijvoorbeeld bepaalde afbeeldingen op een website wilt tonen. Je plaatst eenvoudig de uitgestelde link in de src en dat is het. Er zijn vele scenario's te bedenken.<\/p>\n<p><\/p>\n<p><strong>Client API<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 bestand opslaan<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 verkrijg directe link naar bestand<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 het verkrijgen van een lijst met directe links naar het bestand vanaf alle knooppunten waar het aanwezig is<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 om het bestand in de buffer te krijgen<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 om het bestand in het bestandssysteem te krijgen<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 om het bestand in een blob (voor de browserversie) te krijgen<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 bestand verwijderen<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 een uitgestelde link maken<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Bestanden naar een andere server exporteren<\/strong><\/p>\n<p><\/p>\n<p>Om bestanden naar een ander knooppunt te verplaatsen, kun je:<\/p>\n<p><\/p>\n<ul>\n<li>Gewoon de hele opslagmap kopi\u00ebren, samen met de instellingen. (dit kan in de toekomst niet werken)<\/li>\n<li>Alleen de map met bestanden kopi\u00ebren. Maar in dit geval moet je de functie <strong>node.normalizeFilesInfo()<\/strong>, \u00e9\u00e9n keer uitvoeren om alle gegevens te herberekenen en in de database op te nemen.<\/li>\n<li>Gebruik de functie <strong>node.exportFiles()<\/strong>, die met het kopi\u00ebren van bestanden begint.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Belangrijkste knooppuntinstellingen<\/strong><br \/>\nBij het starten van het opslagknooppunt kun je alle benodigde instellingen opgeven.<br \/>\nIk zal de belangrijkste beschrijven, de rest is te vinden op GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 de grootte van de map met bestanden<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 de grootte van de tijdelijke map<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 de minimale opslaggrootte die moet worden behouden. Als je deze parameter opgeeft, zullen de minst gebruikte bestanden worden verwijderd zodra de ruimte begint op te raken.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 de maximale bestandsgrootte<\/li>\n<li><strong>file.minSize<\/strong> \u2014 de minimale bestandsgrootte<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 het gewenste aantal duplicaten van het bestand in het netwerk<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 toegestane bestandstypen<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 niet-toegestane bestandstypen<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 toegestane bestandovergangen<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 niet-toegestane bestandovergangen<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 verschillende instellingen voor linkcache<\/li>\n<\/ul>\n<p><\/p>\n<p>Bijna alle parameters met betrekking tot afmetingen kunnen zowel in absolute als in relatieve eenheden worden ingesteld.<\/p>\n<p><\/p>\n<p><strong>Werken via de opdrachtregel<\/strong><br \/>\nDe bibliotheek kan worden gebruikt via de opdrachtregel. Om dit te doen, moet je het globaal installeren: <strong>npm i -g storacle<\/strong>. Daarna kun je de benodigde acties uitvoeren vanuit de projectdirectory, waar het knooppunt zich bevindt. Bijvoorbeeld, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, om een bestand toe te voegen. Alle acties zijn te vinden in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js<\/a><\/noindex><\/p>\n<p><\/p>\n<p><strong>Waarom heb je dit nodig<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Als je een gedecentraliseerd project wilt cre\u00ebren waarin bestandshantering op handige manieren is gepland. Bijvoorbeeld, het muziekproject, beschreven in de link aan het begin van het artikel, gebruikt <strong>storacle<\/strong>.<\/li>\n<li>Als je aan andere projecten werkt waarbij je bestanden gedistribueerd moet opslaan, kun je eenvoudig je eigen gesloten netwerk opzetten, met flexibele knooppunten die je kunt aanpassen en nieuwe kunt toevoegen wanneer dat nodig is.<\/li>\n<li>Als je gewoon ergens de bestanden van je website wilt opslaan en je hebt geen zin om alles zelf te schrijven, dan is deze bibliotheek misschien geschikter dan andere in jouw geval.<\/li>\n<li>Als je een project hebt waarbij je met bestanden werkt, maar je wilt alle handelingen vanuit de browser uitvoeren, kun je servercode vermijden.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mijn contactgegevens:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ortex\">@ortex<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"mailto:mywebstreet@gmail.com\">mywebstreet@gmail.com<\/a><\/noindex><\/li>\n<\/ul>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/499954\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80225,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80224","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\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.\" \/>\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\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\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\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\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=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42: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\udd47Storacle \u2014 gedecentraliseerde opslag van bestanden | ProHoster","description":"Voordat ik begin, moet ik achterlaten.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","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\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","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":"2020-05-04T11:42:20+00:00","article:modified_time":"2020-05-04T11:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80224","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-09-27 20:25:26","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\/80224","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=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}