{"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\/fr\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","title":{"rendered":"ViennaNET : ensemble de biblioth\u00e8ques pour le backend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour \u00e0 tous !<\/p>\n<p><\/p>\n<p>Nous sommes une communaut\u00e9 de d\u00e9veloppeurs .NET de Raiffeisenbank et nous souhaitons parler d'un ensemble de biblioth\u00e8ques d'infrastructure sur .NET Core pour la cr\u00e9ation rapide de microservices avec un \u00e9cosyst\u00e8me unifi\u00e9. Nous l'avons rendu 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 : ensemble de biblioth\u00e8ques pour le 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>Un peu d'histoire<\/h3>\n<p><\/p>\n<p>Nous avions autrefois un grand projet monolithique, qui se transformait progressivement en un ensemble de microservices (vous pouvez lire sur les particularit\u00e9s de ce processus dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">cet article<\/a><\/noindex>). Au cours du processus, nous avons \u00e9t\u00e9 confront\u00e9s au probl\u00e8me selon lequel, lors de la cr\u00e9ation de nouveaux microservices, nous devions souvent copier diff\u00e9rentes solutions d'infrastructure \u2013 comme la configuration du logging, la gestion des bases de donn\u00e9es, WCF, etc. Une seule \u00e9quipe a travaill\u00e9 sur ce projet, et tout le monde s'\u00e9tait d\u00e9j\u00e0 habitu\u00e9 \u00e0 une certaine approche \u00e9tablie pour travailler avec l'infrastructure. C'est pourquoi nous avons extrait le code commun dans un d\u00e9p\u00f4t s\u00e9par\u00e9, avons emball\u00e9 les biblioth\u00e8ques en packages NuGet et les avons plac\u00e9es dans notre d\u00e9p\u00f4t NuGet interne.<\/p>\n<p><\/p>\n<p>Le temps passait, le projet se fragmentait lentement, et il y avait un d\u00e9sir de cr\u00e9er de nouveaux modules pour la partie client sur un framework JS moderne et de les lancer dans le navigateur. Nous avons commenc\u00e9 \u00e0 passer de WCF\/SOAP \u00e0 REST\/HTTP, il nous fallait donc de nouvelles biblioth\u00e8ques pour un d\u00e9ploiement rapide de services bas\u00e9s sur AspNet WebApi. La premi\u00e8re version sur .Net Framework 4.5 a \u00e9t\u00e9 r\u00e9alis\u00e9e par notre architecte presque \u00e0 la h\u00e2te pendant son temps libre, mais elle permettait d\u00e9j\u00e0, en quelques lignes dans Program.cs, de lancer un service int\u00e9grant l'authentification (NTLM), le logging, Swagger, IoC\/DI bas\u00e9 sur Castle Windsor, ainsi que des clients HTTP configur\u00e9s pour transmettre divers en-t\u00eates afin d'assurer un logging transversal sur l'ensemble du projet. Et tout cela pouvait \u00eatre en outre configur\u00e9 directement dans le fichier de configuration du service.<\/p>\n<p><\/p>\n<p>Cependant, tout n'\u00e9tait pas rose : cette biblioth\u00e8que s'est av\u00e9r\u00e9e extr\u00eamement rigide en termes d'int\u00e9gration de nouveaux modules. Par exemple, si l'ajout d'un middleware particulier \u00e9tait n\u00e9cessaire, il fallait cr\u00e9er un nouvel assemblage et h\u00e9riter de la classe de base lan\u00e7ant le service, ce qui \u00e9tait extr\u00eamement peu pratique. Heureusement, de tels cas \u00e9taient plut\u00f4t rares.<\/p>\n<p><\/p>\n<h3>L'\u00e8re de Docker et Kubernetes<\/h3>\n<p><\/p>\n<p>Le moment est venu o\u00f9 la vague de Docker et Kubernetes nous a \u00e9galement atteint, que nous avons regard\u00e9e de pr\u00e8s : c'\u00e9tait une excellente occasion de progresser avec les technologies vers .Net Core. Cela signifie que nous aurons besoin d'une nouvelle infrastructure pour d\u00e9ployer des services : une partie des biblioth\u00e8ques a migr\u00e9 de .Net Framework \u00e0 .Net Standard et .Net Core presque sans changements, tandis qu'une autre a b\u00e9n\u00e9fici\u00e9 de petites am\u00e9liorations. Mais le plus important \u00e9tait de repenser la fonctionnalit\u00e9 li\u00e9e au d\u00e9ploiement des services sur AspNet Core.<\/p>\n<p><\/p>\n<p>La premi\u00e8re \u00e9tape a \u00e9t\u00e9 de consid\u00e9rer un concept permettant d'\u00e9liminer le principal inconv\u00e9nient de la version pr\u00e9c\u00e9dente : le manque de flexibilit\u00e9. Il a donc \u00e9t\u00e9 d\u00e9cid\u00e9 de rendre tout le syst\u00e8me de biblioth\u00e8ques aussi ind\u00e9pendant et modulaire que possible, en assemblant les services n\u00e9cessaires comme un constructeur.<\/p>\n<p><\/p>\n<p>L'objectif principal est de cr\u00e9er une approche unifi\u00e9e d\u00e9crivant comment interagir avec les bases de donn\u00e9es, les bus et d'autres services. Nous avons fait en sorte que les int\u00e9grations soient rapides et sans douleur, permettant aux d\u00e9veloppeurs de se concentrer sur l'\u00e9criture de la logique m\u00e9tier plut\u00f4t que sur l'infrastructure \u2013 elle est d\u00e9j\u00e0 pr\u00eate. Le d\u00e9p\u00f4t commun contribue \u00e0 am\u00e9liorer l'exp\u00e9rience d'interaction au sein des \u00e9quipes : lorsque des infrastructures internes tr\u00e8s similaires sont utilis\u00e9es, il est plus facile de s'investir dans le processus de d\u00e9veloppement d'une autre \u00e9quipe et d'\u00e9changer des expertises.<\/p>\n<p><\/p>\n<h3>Et pourquoi avons-nous besoin d'Open Source ?<\/h3>\n<p><\/p>\n<p>Nous voulons montrer la maturit\u00e9 de notre expertise et obtenir des retours de qualit\u00e9 : une personne ext\u00e9rieure \u00e0 la banque pourra y apporter sa contribution. Nous sommes \u00e9galement int\u00e9ress\u00e9s par le d\u00e9veloppement des pratiques li\u00e9es aux microservices et DDD sur .NET dans l'industrie, peut-\u00eatre que certaines personnes souhaiteront r\u00e9cup\u00e9rer certaines parties du framework. <\/p>\n<p><\/p>\n<h3>En fait, ViennaNET<\/h3>\n<p><\/p>\n<p>Examinons tout cela plus en d\u00e9tail. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">Nous avons d\u00e9pos\u00e9 le code source complet ici<\/a><\/noindex>. <\/p>\n<p><\/p>\n<h4>ViennaNET.WebApi.*<\/h4>\n<p><\/p>\n<p>Cet ensemble de biblioth\u00e8ques est compos\u00e9 de la \u00ab racine \u00bb ViennaNET.WebApi, contenant la classe constructeur pour le service CompanyHostBuilder, ainsi qu'un ensemble de configurateurs ViennaNET.WebApi.Configurators.*, chacun permettant d'ajouter et de configurer certaines fonctionnalit\u00e9s dans le service cr\u00e9\u00e9. Parmi les configurateurs, on trouve des connexions pour la journalisation, le diagnostic, les types d'authentification et d'autorisation, swagger, etc.<\/p>\n<p><\/p>\n<p>ViennaNET.WebApi.Runners.* contient des b\u00e2tisseurs de services pr\u00e9configur\u00e9s. Ces paquets permettent de ne pas avoir \u00e0 se souvenir \u00e0 chaque fois des configurateurs \u00e0 connecter lors de la cr\u00e9ation d'un nouveau service. Cela n'entrave en rien la fonctionnalit\u00e9 du b\u00e2tisseur de services.<\/p>\n<p><\/p>\n<h4>ViennaNET.Mediator.*<\/h4>\n<p><\/p>\n<p>Des biblioth\u00e8ques permettant de cr\u00e9er un bus interm\u00e9diaire interne pour les commandes et les requ\u00eates au sein du service. Cette approche permet de r\u00e9duire le nombre d'injections DI \u00e0 une seule, par exemple, dans les contr\u00f4leurs. Gr\u00e2ce \u00e0 cela, il est possible d'ajouter diff\u00e9rents d\u00e9corateurs aux requ\u00eates, ce qui unifie leur traitement et r\u00e9duit le code. <\/p>\n<p><\/p>\n<h4>ViennaNET.Validation<\/h4>\n<p><\/p>\n<p>Une assembl\u00e9e contenant un ensemble de classes pour cr\u00e9er des r\u00e8gles de validation et des s\u00e9quences \u00e0 partir de celles-ci. Tr\u00e8s utile pour mettre en \u0153uvre la validation de domaine, car elle permet de d\u00e9crire chaque condition commerciale sous forme de r\u00e8gle simple et distincte. <\/p>\n<p><\/p>\n<h4>ViennaNET.Redis<\/h4>\n<p><\/p>\n<p>Une biblioth\u00e8que avec des wrappers pour un travail pratique avec Redis en tant que cache in-memory.<\/p>\n<p><\/p>\n<h4>ViennaNET.Specifications<\/h4>\n<p><\/p>\n<p>Une assembl\u00e9e contenant des classes qui impl\u00e9mentent le patron \"Sp\u00e9cification\".<\/p>\n<p><\/p>\n<p>Ce n'est pas tout ce que nous avons dans notre ensemble. Vous pouvez voir le reste <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Raiffeisen-DGTL\/ViennaNET\">dans le d\u00e9p\u00f4t GitHub<\/a><\/noindex>. La sortie de nos biblioth\u00e8ques pour le travail avec les bases de donn\u00e9es en open source est pr\u00e9vue prochainement.<\/p>\n<p><\/p>\n<p>Merci pour votre attention, nous attendons vos commentaires et vos pull requests.<\/p>\n<p>Source : <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 - 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\/fr\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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 : ensemble de biblioth\u00e8ques pour le backend | ProHoster","description":"Bonjour \u00e0 tous ! Nous sommes une communaut\u00e9 de d\u00e9veloppeurs .NET de Raiffeisenbank et nous voulons parler d'un ensemble de biblioth\u00e8ques d'infrastructure sur .NET Core pour la cr\u00e9ation rapide de microservices avec un \u00e9cosyst\u00e8me unifi\u00e9.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/viennanet-nabor-bibliotek-dlya-backenda","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/92433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=92433"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/92433\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/92434"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=92433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=92433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=92433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}