{"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\/sv\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","title":{"rendered":"ViennaNET: en upps\u00e4ttning bibliotek f\u00f6r backend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej alla!<\/p>\n<p><\/p>\n<p>Vi \u00e4r en gemenskap av .NET-utvecklare fr\u00e5n Raiffeisenbank och vi vill ber\u00e4tta om en upps\u00e4ttning infrastrukturbibliotek byggda med .NET Core f\u00f6r snabb skapande av mikrotj\u00e4nster med en enhetlig ekosystem. Vi har sl\u00e4ppt det som 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: en upps\u00e4ttning bibliotek f\u00f6r backend\" 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>Lite historia<\/h3>\n<p><\/p>\n<p>En g\u00e5ng hade vi ett stort monolitiskt projekt som gradvis f\u00f6rvandlades till en upps\u00e4ttning mikrotj\u00e4nster (om denna process kan du l\u00e4sa i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">denna artikel<\/a><\/noindex>). Under processen st\u00f6tte vi p\u00e5 problemet att skapa nya mikrotj\u00e4nster ofta innebar att vi beh\u00f6vde kopiera olika infrastrukturl\u00f6sningar \u2013 som inst\u00e4llningar f\u00f6r loggning, arbete med databaser, WCF osv. Detta projekt jobbades av ett team, och alla var redan vana vid en etablerad metod f\u00f6r arbete med infrastrukturen. D\u00e4rf\u00f6r isolerade vi den gemensamma koden i ett separat repository, paketerade de insamlade biblioteken som Nuget-paket och placerade dem i v\u00e5rt interna Nuget-lager.<\/p>\n<p><\/p>\n<p>Tiden gick, projektet splittrades sakta, och vi fick en \u00f6nskan att skapa nya moduler av klientdelen med moderna JS-ramverk och k\u00f6ra dem i webbl\u00e4saren. Vi b\u00f6rjade \u00f6verg\u00e5 fr\u00e5n WCF\/SOAP till REST\/HTTP, s\u00e5 vi beh\u00f6vde nya bibliotek f\u00f6r snabb lansering av tj\u00e4nster baserade p\u00e5 AspNet WebApi. Den f\u00f6rsta versionen p\u00e5 .Net Framework 4.5 gjordes av v\u00e5r arkitekt knappt p\u00e5 fritiden, men den till\u00e4t redan fr\u00e5n b\u00f6rjan att med tre rader i Program.cs starta en tj\u00e4nst som inneh\u00f6ll autentisering (NTLM), loggning, Swagger, IoC\/DI baserat p\u00e5 Castle Windsor, konfigurerade HTTP-klienter som vidarebefordrade olika huvuden f\u00f6r att s\u00e4kerst\u00e4lla sp\u00e5rbar loggning genom hela projektet. Allt detta kunde dessutom konfigureras direkt i konfigurationsfilen f\u00f6r tj\u00e4nsten.<\/p>\n<p><\/p>\n<p>Men allt var inte helt smidigt: detta bibliotek visade sig vara extremt oflexibelt n\u00e4r det g\u00e4llde att inf\u00f6ra nya moduler. Till exempel, om det var n\u00f6dv\u00e4ndigt att l\u00e4gga till ett s\u00e4rskilt middleware, var man tvungen att skapa en ny samling och \u00e4rva fr\u00e5n basklassen som startade tj\u00e4nsten, vilket var oerh\u00f6rt obekv\u00e4mt. Lyckligtvis var s\u00e5dana fall inte s\u00e5 m\u00e5nga.<\/p>\n<p><\/p>\n<h3>Docker- och Kubernetes-eran<\/h3>\n<p><\/p>\n<p>Det har kommit en tid d\u00e5 \u00e4ven vi har blivit p\u00e5verkade av v\u00e5gen av Docker och Kubernetes, som vi har f\u00f6ljt noggrant: det har varit ett utm\u00e4rkt tillf\u00e4lle att g\u00e5 vidare med teknologier i .Net Core. Det betyder att vi beh\u00f6ver en ny infrastruktur f\u00f6r att lansera tj\u00e4nster: en del bibliotek har \u00f6verf\u00f6rts fr\u00e5n .Net Framework till .Net Standard och .Net Core praktiskt taget utan f\u00f6r\u00e4ndringar, medan andra har f\u00e5tt n\u00e5gra f\u00f6rb\u00e4ttringar. Men vi ville framf\u00f6r allt omarbeta funktionaliteten kopplad till lansering av tj\u00e4nster p\u00e5 AspNet Core.<\/p>\n<p><\/p>\n<p>Det f\u00f6rsta steget var att \u00f6verv\u00e4ga ett koncept som skulle eliminera den st\u00f6rsta nackdelen med den tidigare versionen: bristen p\u00e5 flexibilitet. D\u00e4rf\u00f6r beslutades det att g\u00f6ra hela systemet av bibliotek s\u00e5 oberoende och modul\u00e4rt som m\u00f6jligt, och bygga de funktionella tj\u00e4nsterna som en konstruktor.<\/p>\n<p><\/p>\n<p>Det prim\u00e4ra m\u00e5let \u00e4r att skapa en enhetlig metod f\u00f6r hur man interagerar med databaser, bussar och andra tj\u00e4nster. Vi har f\u00f6rs\u00f6kt g\u00f6ra integrationerna snabba och sm\u00e4rtfri s\u00e5 att utvecklarna kan fokusera p\u00e5 att skriva aff\u00e4rslogik snarare \u00e4n infrastruktur \u2013 den \u00e4r redan klar. Det gemensamma arkivet hj\u00e4lper till att f\u00f6rb\u00e4ttra interaktionen inom teamen: n\u00e4r mycket liknande interna infrastrukturer anv\u00e4nds blir det l\u00e4ttare att delta i en annan teams utvecklingsprocess och dela kunskap.<\/p>\n<p><\/p>\n<h3>Och varf\u00f6r beh\u00f6ver vi Open Source?<\/h3>\n<p><\/p>\n<p>Vi vill visa mognad i v\u00e5r expertis och f\u00e5 kvalitativ feedback: en person utanf\u00f6r banken kan bidra med egna insikter. Vi \u00e4r ocks\u00e5 intresserade av att utveckla arbetsmetoder med mikrotj\u00e4nster och DDD p\u00e5 .NET inom industrin, kanske finns det n\u00e5gon som vill ta vissa delar av ramverket f\u00f6r sig sj\u00e4lv. <\/p>\n<p><\/p>\n<h3>Faktiskt, ViennaNET<\/h3>\n<p><\/p>\n<p>Nu l\u00e5t oss g\u00e5 igenom allt mer i detalj. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">Den fullst\u00e4ndiga k\u00e4llkoden finns h\u00e4r<\/a><\/noindex>. <\/p>\n<p><\/p>\n<h4>ViennaNET.WebApi.*<\/h4>\n<p><\/p>\n<p>Detta bibliotekspaket best\u00e5r av \"roten\" ViennaNET.WebApi, som inneh\u00e5ller en klassbyggare f\u00f6r tj\u00e4nsten CompanyHostBuilder, och flera konfigurerare ViennaNET.WebApi.Configurators.*, d\u00e4r varje enskild m\u00f6jligg\u00f6r till\u00e4gg och konfiguration av viss funktionalitet i den skapade tj\u00e4nsten. Bland konfigurerarna finns funktioner f\u00f6r loggning, diagnostik, autentisering och auktorisering, swagger etc.<\/p>\n<p><\/p>\n<p>H\u00e4r finns ViennaNET.WebApi.Runners.* som inneh\u00e5ller f\u00f6rkonfigurerade byggare f\u00f6r tj\u00e4nster. Dessa paket g\u00f6r det m\u00f6jligt att slippa t\u00e4nka p\u00e5 vilka konfigurerare som m\u00e5ste kopplas varje g\u00e5ng du skapar en ny tj\u00e4nst. Samtidigt begr\u00e4nsar de inte funktionaliteten hos tj\u00e4nstebyggen.<\/p>\n<p><\/p>\n<h4>ViennaNET.Mediator.*<\/h4>\n<p><\/p>\n<p>Bibliotek som m\u00f6jligg\u00f6r skapandet av en intern meddelandebuss f\u00f6r kommandon och f\u00f6rfr\u00e5gningar inom tj\u00e4nsten. Detta tillv\u00e4gag\u00e5ngss\u00e4tt minskar antalet DI-injektioner till en, till exempel i kontroller. Genom detta kan olika dekorerare l\u00e4ggas till f\u00f6rfr\u00e5gningar, vilket f\u00f6renar deras bearbetning och minskar m\u00e4ngden kod. <\/p>\n<p><\/p>\n<h4>ViennaNET.Validation<\/h4>\n<p><\/p>\n<p>En samling som inneh\u00e5ller en upps\u00e4ttning klasser f\u00f6r att skapa valideringsregler och sekvenser av dem. Mycket praktiskt f\u00f6r att genomf\u00f6ra dom\u00e4nvalidering, eftersom det g\u00f6r det m\u00f6jligt att beskriva varje aff\u00e4rsvillkor i form av en enkel och separat regel. <\/p>\n<p><\/p>\n<h4>ViennaNET.Redis<\/h4>\n<p><\/p>\n<p>Ett bibliotek med omslag f\u00f6r att enkelt arbeta med Redis som in-memory cache.<\/p>\n<p><\/p>\n<h4>ViennaNET.Specifications<\/h4>\n<p><\/p>\n<p>En samling som inneh\u00e5ller klasser som implementerar m\u00f6nstret \"Specifikation\".<\/p>\n<p><\/p>\n<p>Detta \u00e4r l\u00e5ngt ifr\u00e5n allt som finns i v\u00e5rt paket. Du kan se resten <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">i repositoryt p\u00e5 GitHub<\/a><\/noindex>. Snart planeras det att v\u00e5ra bibliotek f\u00f6r databashantering ska bli OpenSource.<\/p>\n<p><\/p>\n<p>Tack f\u00f6r uppm\u00e4rksamheten, vi ser fram emot dina kommentarer och pull requests.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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: paket av bibliotek f\u00f6r backend | ProHoster","description":"Hej alla! Vi \u00e4r ett .NET-utvecklarcommunity fr\u00e5n Raiffeisenbank och vi vill ber\u00e4tta om v\u00e5rt paket av infrastrukturbibliotek p\u00e5 .NET Core f\u00f6r snabb skapelse av mikrotj\u00e4nster med ett enhetligt ekosystem.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/92433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=92433"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/92433\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/92434"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=92433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=92433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=92433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}