{"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\/pt\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","title":{"rendered":"ViennaNET: um conjunto de bibliotecas para backend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1 a todos!<\/p>\n<p><\/p>\n<p>N\u00f3s somos uma comunidade de desenvolvedores .NET do Raiffeisenbank e queremos apresentar um conjunto de bibliotecas de infraestrutura em .NET Core para a cria\u00e7\u00e3o r\u00e1pida de microsservi\u00e7os com um ecossistema unificado. Tornamos isso 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: um conjunto de bibliotecas para 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>Um pouco de hist\u00f3ria<\/h3>\n<p><\/p>\n<p>Um dia, tivemos um grande projeto monol\u00edtico que gradualmente se transformou em um conjunto de microsservi\u00e7os (sobre os detalhes desse processo, voc\u00ea pode ler em <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">este artigo<\/a><\/noindex>). Durante esse processo, enfrentamos o problema de que, ao criar novos microsservi\u00e7os, frequentemente precis\u00e1vamos copiar v\u00e1rias solu\u00e7\u00f5es de infraestrutura - como configura\u00e7\u00f5es de logging, intera\u00e7\u00e3o com o banco de dados, WCF, etc. Uma \u00fanica equipe trabalhou neste projeto, e todos j\u00e1 estavam acostumados a uma abordagem estabelecida de trabalho com infraestrutura. Portanto, destacamos o c\u00f3digo comum em um reposit\u00f3rio separado, empacotamos as bibliotecas em pacotes Nuget e as colocamos em nosso reposit\u00f3rio Nuget interno.<\/p>\n<p><\/p>\n<p>O tempo passou, o projeto foi se fragmentando, surgiu o desejo de criar novos m\u00f3dulos para a parte cliente usando um framework Js moderno e execut\u00e1-los no navegador. Come\u00e7amos a transitar de WCF\/SOAP para REST\/HTTP, portanto precis\u00e1vamos de novas bibliotecas para o lan\u00e7amento r\u00e1pido de servi\u00e7os baseados em AspNet WebApi. A primeira vers\u00e3o no .Net Framework 4.5 foi feita pelo nosso arquiteto praticamente em seu tempo livre, mas j\u00e1 permitia iniciar um servi\u00e7o com tr\u00eas linhas no Program.cs, contendo autentica\u00e7\u00e3o (NTLM), logging, Swagger, IoC\/DI baseado em Castle Windsor, clientes HTTP configurados que passavam v\u00e1rios cabe\u00e7alhos para garantir o logging abrangente em todo o projeto. E tudo isso podia ser configurado adicionalmente diretamente no arquivo de configura\u00e7\u00e3o do servi\u00e7o.<\/p>\n<p><\/p>\n<p>No entanto, nem tudo foi tranquilo: essa biblioteca resultou ser extremamente inflex\u00edvel em termos de incorpora\u00e7\u00e3o de novos m\u00f3dulos. Por exemplo, se era necess\u00e1rio adicionar algum middleware especial, era preciso criar um novoassembly e herdar da classe base que iniciava o servi\u00e7o, o que era bastante inconveniente. Felizmente, tais casos n\u00e3o foram muitos.<\/p>\n<p><\/p>\n<h3>A era do Docker e Kubernetes<\/h3>\n<p><\/p>\n<p>Chegou a hora em que tamb\u00e9m fomos impactados pela onda do Docker e Kubernetes, que acompanhamos de perto: era uma \u00f3tima oportunidade para avan\u00e7ar nas tecnologias, adotando o .Net Core. Isso significa que precisaremos de uma nova infraestrutura para o lan\u00e7amento de servi\u00e7os: algumas bibliotecas foram migradas do .Net Framework para o .Net Standard e .Net Core praticamente sem altera\u00e7\u00f5es, enquanto outras com pequenas melhorias. Mas o que mais quer\u00edamos era reformular a funcionalidade relacionada ao lan\u00e7amento de servi\u00e7os no AspNet Core.<\/p>\n<p><\/p>\n<p>O primeiro passo foi considerar um conceito que eliminasse a principal desvantagem da vers\u00e3o anterior: a falta de flexibilidade. Por isso, decidimos tornar todo o sistema de bibliotecas o mais independente e modular poss\u00edvel, e montar os servi\u00e7os necess\u00e1rios como se fosse um quebra-cabe\u00e7a.<\/p>\n<p><\/p>\n<p>O objetivo principal \u00e9 criar uma abordagem unificada que descreva como interagir com bancos de dados, barramentos e outros servi\u00e7os. Nos esfor\u00e7amos para que as integra\u00e7\u00f5es fossem r\u00e1pidas e indolores, permitindo que os desenvolvedores se concentrassem na escrita da l\u00f3gica de neg\u00f3cios, em vez da infraestrutura \u2013 esta j\u00e1 est\u00e1 pronta. O reposit\u00f3rio comum ajuda a melhorar a experi\u00eancia de intera\u00e7\u00e3o dentro das equipes: quando estruturas internas muito semelhantes s\u00e3o usadas, \u00e9 mais f\u00e1cil se incorporar ao processo de desenvolvimento de outra equipe e trocar experi\u00eancias.<\/p>\n<p><\/p>\n<h3>E por que precisamos de Open Source?<\/h3>\n<p><\/p>\n<p>Queremos demonstrar a maturidade da nossa expertise e obter feedback de qualidade: uma pessoa fora do banco poder\u00e1 trazer novas contribui\u00e7\u00f5es. Tamb\u00e9m nos interessa o desenvolvimento de pr\u00e1ticas de trabalho com microsservi\u00e7os e DDD no .NET na ind\u00fastria, pois talvez algu\u00e9m queira levar certas partes do framework consigo. <\/p>\n<p><\/p>\n<h3>A prop\u00f3sito, ViennaNET<\/h3>\n<p><\/p>\n<p>Agora vamos analisar tudo em detalhes. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">O c\u00f3digo-fonte completo est\u00e1 aqui<\/a><\/noindex>. <\/p>\n<p><\/p>\n<h4>ViennaNET.WebApi.*<\/h4>\n<p><\/p>\n<p>Esse conjunto de bibliotecas consiste na \"raiz\" ViennaNET.WebApi, que cont\u00e9m a classe construtora para o servi\u00e7o CompanyHostBuilder, e um conjunto de configuradores ViennaNET.WebApi.Configurators.*, cada um permitindo adicionar e configurar uma determinada funcionalidade no servi\u00e7o criado. Entre os configuradores, pode-se encontrar integra\u00e7\u00e3o de logging, diagn\u00f3sticos, tipos de autentica\u00e7\u00e3o e autoriza\u00e7\u00e3o, swagger, etc.<\/p>\n<p><\/p>\n<p>Aqui, ViennaNET.WebApi.Runners.* cont\u00e9m construtores de servi\u00e7os pr\u00e9-configurados. Esses pacotes permitem que voc\u00ea n\u00e3o precise se lembrar sempre, ao criar um novo servi\u00e7o, quais configuradores devem ser conectados. Ao mesmo tempo, eles n\u00e3o limitam a funcionalidade do construtor de servi\u00e7os.<\/p>\n<p><\/p>\n<h4>ViennaNET.Mediator.*<\/h4>\n<p><\/p>\n<p>Bibliotecas que permitem criar um barramento interno para comandos e consultas dentro do servi\u00e7o. Essa abordagem reduz o n\u00famero de inje\u00e7\u00f5es de DI para uma \u00fanica, por exemplo, nos controladores. Com isso, \u00e9 poss\u00edvel adicionar diferentes decoradores \u00e0s consultas, o que uniformiza seu processamento e reduz a quantidade de c\u00f3digo. <\/p>\n<p><\/p>\n<h4>ViennaNET.Validation<\/h4>\n<p><\/p>\n<p>Uma assembly que cont\u00e9m um conjunto de classes para criar regras de valida\u00e7\u00e3o e sequ\u00eancias a partir delas. Muito conveniente para a implementa\u00e7\u00e3o de valida\u00e7\u00f5es de dom\u00ednio, pois permite descrever cada condi\u00e7\u00e3o de neg\u00f3cio como uma regra simples e separada. <\/p>\n<p><\/p>\n<h4>ViennaNET.Redis<\/h4>\n<p><\/p>\n<p>Uma biblioteca com wrappers para facilitar o trabalho com Redis como cache em mem\u00f3ria.<\/p>\n<p><\/p>\n<h4>ViennaNET.Specifications<\/h4>\n<p><\/p>\n<p>Uma assembly que cont\u00e9m classes que implementam o padr\u00e3o 'Especifica\u00e7\u00e3o'.<\/p>\n<p><\/p>\n<p>Isso n\u00e3o \u00e9 tudo o que temos em nosso conjunto. O restante pode ser visto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">no reposit\u00f3rio no GitHub<\/a><\/noindex>. Em breve, planejamos lan\u00e7ar nossas bibliotecas para trabalhar com bancos de dados como OpenSource.<\/p>\n<p><\/p>\n<p>Obrigado pela aten\u00e7\u00e3o, aguardamos seus coment\u00e1rios e pull requests.<\/p>\n<p>Fonte: <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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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: conjunto de bibliotecas para backend | ProHoster","description":"Ol\u00e1 a todos! Somos a comunidade de desenvolvedores .NET do Raiffeisen Bank e queremos apresentar um conjunto de bibliotecas de infraestrutura em .NET Core para a cria\u00e7\u00e3o r\u00e1pida de microsservi\u00e7os com um ecossistema unificado.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/92433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=92433"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/92433\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/92434"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=92433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=92433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=92433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}