{"id":92433,"date":"2020-08-27T07:42:01","date_gmt":"2020-08-27T05:42:01","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda"},"modified":"2020-08-27T07:42:01","modified_gmt":"2020-08-27T05:42:01","slug":"viennanet-nabor-bibliotek-dlya-backenda","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","title":{"rendered":"ViennaNET: et bibliotekss\u00e6t til backend\u2019en","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej alle sammen!<\/p>\n<p><\/p>\n<p>Vi er et f\u00e6llesskab af .NET-udviklere fra Raiffeisenbanken, og vi \u00f8nsker at fort\u00e6lle om et s\u00e6t infrastrukturbiblioteker i .NET Core til hurtig oprettelse af mikrotjenester med en f\u00e6lles \u00f8kosystem. Vi har gjort det til Open Source! <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/494830\/\"><img decoding=\"async\" alt=\"ViennaNET: et bibliotekss\u00e6t til backend\u2019en\" src=\"\/wp-content\/uploads\/2020\/08\/eb063b3083da2c39f7f3c40a560c30ab.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Lidt historie<\/h3>\n<p><\/p>\n<p>Engang havde vi et stort monolitisk projekt, som langsomt blev til et s\u00e6t mikrotjenester (om de s\u00e6rpr\u00e6g ved denne proces kan l\u00e6ses i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">denne artikel<\/a><\/noindex>). I processen st\u00f8dte vi p\u00e5 problemet med, at vi ofte m\u00e5tte kopiere forskellige infrastrukturl\u00f8sninger - s\u00e5som ops\u00e6tning af logging, arbejde med databaser, WCF osv. Et hold arbejdede p\u00e5 dette projekt, og alle var allerede blevet vant til en vis etableret tilgang til infrastrukturarbejdet. Derfor isolerede vi den f\u00e6lles kode i et separat repository, pakkede de samlede biblioteker ind som NuGet-pakker og placerede dem i vores interne NuGet-arkiv.<\/p>\n<p><\/p>\n<p>Tiden gik, projektet blev gradvist opdelt, og der blev et \u00f8nske om at oprette nye moduler af frontend-delen med et moderne JS-rammev\u00e6rk og lancerede dem i browseren. Vi begyndte at skifte fra WCF\/SOAP til REST\/HTTP, s\u00e5 vi havde brug for nye biblioteker til hurtigt at kunne starte tjenester baseret p\u00e5 AspNet WebApi. Den f\u00f8rste version p\u00e5 .Net Framework 4.5 blev lavet af vores arkitekt n\u00e6sten i fritiden, men den kunne allerede out-of-the-box aktivere en tjeneste med tre linjer i Program.cs, som indeholdt godkendelse (NTLM), logging, Swagger, IoC\/DI baseret p\u00e5 Castle Windsor, konfigurerede HTTP-klienter, der videresender forskellige overskrifter for at sikre end-to-end logging i hele projektet. Og det hele kunne yderligere konfigureres direkte i tjenestens konfigurationsfil.<\/p>\n<p><\/p>\n<p>Men alt var ikke problemfrit: dette bibliotek viste sig at v\u00e6re ekstremt ufleksibelt med hensyn til implementering af nye moduler. For eksempel, hvis der var behov for at tilf\u00f8je et specielt middleware, m\u00e5tte man oprette en ny samling og arve fra basis klassen der driver tjenesten, hvilket var uhandy. Heldigvis var s\u00e5danne tilf\u00e6lde ikke s\u00e5 mange.<\/p>\n<p><\/p>\n<h3>Docker- og Kubernetes-\u00e6raen<\/h3>\n<p><\/p>\n<p>Tiden er kommet, hvor b\u00f8lgen af Docker og Kubernetes ogs\u00e5 har n\u00e5et os, som vi har fulgt n\u00f8je: det er en fantastisk mulighed for at tage skridt videre med teknologierne i .Net Core. Det betyder, at vi f\u00e5r brug for en ny infrastruktur til at k\u00f8re tjenester: nogle biblioteker er blevet overf\u00f8rt fra .Net Framework til .Net Standard og .Net Core stort set uden \u00e6ndringer, mens andre er blevet forbedret en smule. Men det, vi helst ville have, var at redesigne funktionaliteten, der er relateret til k\u00f8rsel af tjenester p\u00e5 AspNet Core.<\/p>\n<p><\/p>\n<p>F\u00f8rst og fremmest blev der overvejet et koncept, der kunne fjerne hovedproblemet fra den tidligere version: mangel p\u00e5 fleksibilitet. Derfor blev det besluttet at g\u00f8re hele systemet af biblioteker s\u00e5 uafh\u00e6ngigt og modul\u00e6rt som muligt og samle de n\u00f8dvendige funktionaliteter til tjenester som en byggeklods.<\/p>\n<p><\/p>\n<p>Hovedm\u00e5let er at skabe en ensartet tilgang, der beskriver, hvordan man interagerer med databaser, busser og andre tjenester. Vi har str\u00e6bt efter, at integrationerne skulle v\u00e6re hurtige og smertefri, s\u00e5 udviklerne kunne koncentrere sig om at skrive forretningslogik, ikke infrastruktur \u2013 den er allerede klar. Det f\u00e6lles repository hj\u00e6lper med at forbedre oplevelsen af samarbejde inden for teamene: n\u00e5r meget lignende interne infrastrukturer anvendes, er det lettere at deltage i udviklingsprocessen af et andet team og udveksle ekspertise.<\/p>\n<p><\/p>\n<h3>Og hvorfor har vi brug for Open Source?<\/h3>\n<p><\/p>\n<p>Vi \u00f8nsker at vise modenhed i vores ekspertise og f\u00e5 kvalitetsfeedback: en person uden for banken kan tilf\u00f8re noget unikt. Vi er ogs\u00e5 interesserede i udviklingen af praksisser relateret til mikrotjenester og DDD p\u00e5 .NET i branchen, muligvis \u00f8nsker nogen at tage visse dele af rammev\u00e6rket med sig. <\/p>\n<p><\/p>\n<h3>Egentlig, ViennaNET<\/h3>\n<p><\/p>\n<p>Lad os nu se n\u00e6rmere p\u00e5 alt dette. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">Den komplette kildekode er lagt her<\/a><\/noindex>. <\/p>\n<p><\/p>\n<h4>ViennaNET.WebApi.*<\/h4>\n<p><\/p>\n<p>Dette bibliotekss\u00e6t best\u00e5r af 'roden' ViennaNET.WebApi, der indeholder en builder-klasse for tjenesten CompanyHostBuilder, samt et s\u00e6t konfigureringsv\u00e6rkt\u00f8jer ViennaNET.WebApi.Configurators.*, som hver is\u00e6r muligg\u00f8r tilf\u00f8jelse og konfiguration af en bestemt funktionalitet i den oprettede tjeneste. Blandt konfigureringsv\u00e6rkt\u00f8jerne kan man finde tilslutning til logging, diagnosticering, autenticering og autorisering, swagger mm.<\/p>\n<p><\/p>\n<p>Her indeholder ViennaNET.WebApi.Runners.* forudindstillede service-builders. Disse pakker g\u00f8r det muligt ikke at skulle huske, hvilke konfigureringsindstillinger der skal tilsluttes, hver gang man opretter en ny service. De begr\u00e6nser dog ikke funktionaliteten af service-builders.<\/p>\n<p><\/p>\n<h4>ViennaNET.Mediator.*<\/h4>\n<p><\/p>\n<p>Biblioteker, der g\u00f8r det muligt at oprette en intern bus-mediator til kommandoer og foresp\u00f8rgsler inden for servicen. Denne tilgang reducerer antallet af DI-injektioner til \u00e9n, for eksempel i controllere. Derved kan man tilf\u00f8je forskellige dekorat\u00f8rer til foresp\u00f8rgslerne, hvilket ensarter deres behandling og reducerer m\u00e6ngden af kode. <\/p>\n<p><\/p>\n<h4>ViennaNET.Validation<\/h4>\n<p><\/p>\n<p>En samling, der indeholder et s\u00e6t klasser til oprettelse af valideringsregler og sekvenser af dem. Meget praktisk til implementering af dom\u00e6nevalidering, da den g\u00f8r det muligt at beskrive hver forretningsbetingelse som en enkelt og simpel regel. <\/p>\n<p><\/p>\n<h4>ViennaNET.Redis<\/h4>\n<p><\/p>\n<p>Et bibliotek med wrappers for nem h\u00e5ndtering af Redis som in-memory cache.<\/p>\n<p><\/p>\n<h4>ViennaNET.Specifications<\/h4>\n<p><\/p>\n<p>En samling, der indeholder klasser, der implementerer m\u00f8nsteret 'Specification'.<\/p>\n<p><\/p>\n<p>Dette er langt fra alt, hvad der er i vores samling. Det resterende kan ses <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">i repository\u2019et p\u00e5 GitHub<\/a><\/noindex>. Snart planl\u00e6gges vores biblioteker til databasestyring at blive open source.<\/p>\n<p><\/p>\n<p>Tak for opm\u00e6rksomheden, vi ser frem til jeres kommentarer og pull requests.<\/p>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/494830\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e .NET-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0420\u0430\u0439\u0444\u0444\u0430\u0439\u0437\u0435\u043d\u0431\u0430\u043d\u043a\u0430 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 .NET Core \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0412\u044b\u0432\u0435\u043b\u0438 \u0435\u0433\u043e \u0432 Open Source! \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 (\u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435). \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92434,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92433","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e .NET-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0420\u0430\u0439\u0444\u0444\u0430\u0439\u0437\u0435\u043d\u0431\u0430\u043d\u043a\u0430 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 .NET Core \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.\" \/>\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\/da\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\udd47ViennaNET: \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f backend\u2019\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e .NET-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0420\u0430\u0439\u0444\u0444\u0430\u0439\u0437\u0435\u043d\u0431\u0430\u043d\u043a\u0430 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 .NET Core \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda\" \/>\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-08-27T05:42:01+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-27T05:42:01+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\udd47ViennaNET: et s\u00e6t biblioteker til backend | ProHoster","description":"Hej alle sammen! Vi er et .NET-udviklerf\u00e6llesskab fra Raiffeisen Bank, og vi vil gerne fort\u00e6lle om en samling af infrastrukturbiblioteker i .NET Core til hurtig oprettelse af mikrotjenester med et ensartet \u00f8kosystem.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\udd47ViennaNET: \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f backend\u2019\u0430 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e .NET-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0420\u0430\u0439\u0444\u0444\u0430\u0439\u0437\u0435\u043d\u0431\u0430\u043d\u043a\u0430 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 .NET Core \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","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-08-27T05:42:01+00:00","article:modified_time":"2020-08-27T05:42:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92433","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 12:08:24","updated":"2022-10-03 07:52:44","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/92433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=92433"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/92433\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/92434"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=92433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=92433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=92433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}