{"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\/ro\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","title":{"rendered":"ViennaNET: un set de biblioteci pentru backend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salut tuturor!<\/p>\n<p><\/p>\n<p>Noi suntem o comunitate de dezvoltatori .NET de la Raiffeisen Bank \u0219i dorim s\u0103 v\u0103 prezent\u0103m un set de biblioteci infrastructurale pe .NET Core pentru crearea rapid\u0103 a microserviciilor cu un ecosistem unificat. L-am lansat ca 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: un set de biblioteci pentru 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>Pu\u021bin istorie<\/h3>\n<p><\/p>\n<p>Odat\u0103, aveam un mare proiect monolit, care s-a transformat treptat \u00eentr-un set de microservicii (despre particularit\u0103\u021bile acestui proces pute\u021bi citi \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">aceast\u0103 articole<\/a><\/noindex>). \u00cen timpul procesului, ne-am confruntat cu problema c\u0103, la crearea de noi microservicii, adesea era necesar s\u0103 copiem diverse solu\u021bii infrastructurale - cum ar fi configurarea jurnaliz\u0103rii, interac\u021biunea cu baza de date, WCF etc. La acest proiect a lucrat o singur\u0103 echip\u0103, iar to\u021bi s-au obi\u0219nuit cu o anumit\u0103 abordare stabilit\u0103 a lucrului cu infrastructura. De aceea, am extras codul comun \u00eentr-un depozit separat, bibliotecile construite fiind ambalate \u00een pachete NuGet \u0219i plasate \u00een depozitul nostru intern de NuGet.<\/p>\n<p><\/p>\n<p>Timpul a trecut, proiectul s-a fragmentat treptat, iar dorin\u021ba de a crea noi module pentru partea client a ap\u0103rut, utiliz\u00e2nd un framework JS modern \u0219i rul\u00e2ndu-le \u00een browser. Am \u00eenceput s\u0103 trecem de la WCF\/SOAP la REST\/HTTP, astfel c\u0103 aveam nevoie de noi biblioteci pentru a lansa rapid servicii pe baza AspNet WebApi. Prima versiune pe .Net Framework 4.5 a fost realizat\u0103 de arhitectul nostru aproape din mers, \u00een timpul liber, dar permitea deja din cutie, cu doar trei linii \u00een Program.cs, s\u0103 lans\u0103m un serviciu care con\u021binea autorizare (NTLM), jurnalizare, Swagger, IoC\/DI pe baza Castle Windsor, clien\u021bi HTTP configura\u021bi care transmit diverse antete pentru a asigura jurnalizarea end-to-end \u00een \u00eentregul proiect. \u0218i toate acestea puteau fi configurate suplimentar direct \u00een fi\u0219ierul de configurare al serviciului.<\/p>\n<p><\/p>\n<p>Totu\u0219i, lucrurile nu au mers chiar at\u00e2t de lin: aceast\u0103 bibliotec\u0103 s-a dovedit a fi extrem de inflexibil\u0103 \u00een ceea ce prive\u0219te integrarea noilor module. De exemplu, dac\u0103 era necesar s\u0103 ad\u0103ug\u0103m un anumit middleware special, era necesar s\u0103 cre\u0103m un nou assembly \u0219i s\u0103 mo\u0219tenim de la clasa de baz\u0103 care lansa serviciul, ceea ce era extrem de incomod. Din fericire, astfel de cazuri nu au fost foarte multe.<\/p>\n<p><\/p>\n<h3>Epoca Docker \u0219i Kubernetes<\/h3>\n<p><\/p>\n<p>A venit momentul c\u00e2nd \u0219i noi am fost atin\u0219i de valul Docker \u0219i Kubernetes, la care am privit cu aten\u021bie: deoarece acesta a fost o ocazie excelent\u0103 de a continua s\u0103 avans\u0103m \u00een tehnologii, \u00een .Net Core. \u0218i \u00eenseamn\u0103 c\u0103 avem nevoie de o nou\u0103 infrastructur\u0103 pentru a lansa servicii: o parte din biblioteci au fost transferate de la .Net Framework la .Net Standard \u0219i .Net Core practic f\u0103r\u0103 modific\u0103ri, o parte cu \u00eembun\u0103t\u0103\u021biri minore. Dar cel mai mult ne-am dorit s\u0103 reorganiz\u0103m func\u021bionalitatea legat\u0103 de lansarea serviciilor pe AspNet Core.<\/p>\n<p><\/p>\n<p>Primul pas a fost s\u0103 examin\u0103m un concept care s\u0103 elimine principalul dezavantaj al versiunii anterioare: lipsa de flexibilitate. A\u0219a c\u0103 am decis s\u0103 facem \u00eentreaga sistem\u0103 de biblioteci c\u00e2t mai independent\u0103 \u0219i modular\u0103, \u0219i s\u0103 construim serviciile necesare ca un constructor.<\/p>\n<p><\/p>\n<p>Obiectivul principal este de a crea o abordare unificat\u0103 care s\u0103 descrie cum s\u0103 interac\u021bion\u0103m cu bazele de date, bus-urile \u0219i alte servicii. Ne-am str\u0103duit s\u0103 facem integr\u0103rile rapide \u0219i f\u0103r\u0103 dureri, astfel \u00eenc\u00e2t dezvoltatorii s\u0103 se poat\u0103 concentra pe scrierea logicii de afaceri, \u0219i nu pe infrastructur\u0103 \u2013 aceasta este deja preg\u0103tit\u0103. Un depozit comun ajut\u0103 la \u00eembun\u0103t\u0103\u021birea experien\u021bei de colaborare \u00eentre echipe: atunci c\u00e2nd se folosesc infrastructuri interne foarte asem\u0103n\u0103toare, este mai u\u0219or s\u0103 te integrezi \u00een procesul de dezvoltare al altei echipe \u0219i s\u0103 \u00eemp\u0103rt\u0103\u0219e\u0219ti expertiza.<\/p>\n<p><\/p>\n<h3>\u0218i de ce avem nevoie de Open Source?<\/h3>\n<p><\/p>\n<p>Vrem s\u0103 demonstr\u0103m maturitatea expertizei \u0219i s\u0103 ob\u021binem un feedback de calitate: o persoan\u0103 din afara b\u0103ncii poate aduce ceva nou. De asemenea, ne intereseaz\u0103 dezvoltarea practicilor de lucru cu microservicii \u0219i DDD pe .NET \u00een industrie, poate cineva va dori s\u0103 preia anumite p\u0103r\u021bi ale framework-ului. <\/p>\n<p><\/p>\n<h3>Practic, ViennaNET<\/h3>\n<p><\/p>\n<p>Acum s\u0103 examin\u0103m totul mai \u00een detaliu. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">Codul surs\u0103 complet l-am pus aici<\/a><\/noindex>. <\/p>\n<p><\/p>\n<h4>ViennaNET.WebApi.*<\/h4>\n<p><\/p>\n<p>Acest set de biblioteci const\u0103 din \u201er\u0103d\u0103cina\u201d ViennaNET.WebApi, care con\u021bine clasa constructor pentru serviciul CompanyHostBuilder, \u0219i un set de configuratoare ViennaNET.WebApi.Configurators.*, fiecare dintre ele permi\u021b\u00e2nd ad\u0103ugarea \u0219i configurarea unor func\u021bionalit\u0103\u021bi \u00een serviciul creat. Printre configuratoare se pot g\u0103si conexiuni pentru logging, diagnosticare, tipuri de autentificare \u0219i autorizare, swagger etc.<\/p>\n<p><\/p>\n<p>Aici, ViennaNET.WebApi.Runners.* con\u021bine constructori de servicii preconfigura\u021bi. Aceste pachete permit s\u0103 nu-\u021bi reaminte\u0219ti de fiecare dat\u0103, atunci c\u00e2nd creezi un nou serviciu, ce configuratori trebuie s\u0103 fie conecta\u021bi. Acestea nu limiteaz\u0103 \u00een niciun fel func\u021bionalitatea constructorului de servicii.<\/p>\n<p><\/p>\n<h4>ViennaNET.Mediator.*<\/h4>\n<p><\/p>\n<p>Biblioteci care permit crearea unei structuri interne de mediere pentru comenzi \u0219i cereri \u00een cadrul serviciului. Aceast\u0103 abordare reduce num\u0103rul de injec\u021bii DI la una, de exemplu, \u00een controllere. Astfel, se pot ad\u0103uga diverse decoratoare la cereri, ceea ce le unific\u0103 procesarea \u0219i reduce cantitatea de cod. <\/p>\n<p><\/p>\n<h4>ViennaNET.Validation<\/h4>\n<p><\/p>\n<p>O asamblare care con\u021bine un set de clase pentru a crea reguli \u0219i secven\u021be de validare. Este foarte convenabil\u0103 pentru implementarea valid\u0103rii de domeniu, deoarece permite descrierea fiec\u0103rei condi\u021bii de afaceri sub form\u0103 de reguli simple \u0219i separate. <\/p>\n<p><\/p>\n<h4>ViennaNET.Redis<\/h4>\n<p><\/p>\n<p>O bibliotec\u0103 cu wrapperi pentru a lucra u\u0219or cu Redis ca \u0219i cache in-memory.<\/p>\n<p><\/p>\n<h4>ViennaNET.Specifications<\/h4>\n<p><\/p>\n<p>O asamblare care con\u021bine clase ce implementeaz\u0103 modelul \u201eSpecifica\u021bie\u201d.<\/p>\n<p><\/p>\n<p>Acestea nu sunt toate resursele din setul nostru. Restul pot fi consultate <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">\u00een repository-ul de pe GitHub<\/a><\/noindex>. \u00cen cur\u00e2nd vom lansa bibliotecile noastre pentru lucrul cu baze de date \u00een OpenSource.<\/p>\n<p><\/p>\n<p>Mul\u021bumim pentru aten\u021bie, a\u0219tept\u0103m comentariile \u0219i pull request-urile dumneavoastr\u0103.<\/p>\n<p>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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: set de biblioteci pentru backend | ProHoster","description":"Salut tuturor! Suntem comunitatea dezvoltatorilor .NET de la Raiffeisen Bank \u0219i dorim s\u0103 v\u0103 povestim despre un set de biblioteci infrastructurale pe .NET Core pentru crearea rapid\u0103 de microservicii cu un ecosistem unitar.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/92433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=92433"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/92433\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/92434"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=92433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=92433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=92433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}