{"id":796,"date":"2021-12-08T17:48:00","date_gmt":"2021-12-08T16:48:00","guid":{"rendered":"https:\/\/affluences.com\/blog\/?p=796"},"modified":"2022-06-24T14:59:04","modified_gmt":"2022-06-24T12:59:04","slug":"optimiser-architecture-micro-services","status":"publish","type":"post","link":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/","title":{"rendered":"Comment optimiser son architecture micro-services avec des requ\u00eates GraphQL ?"},"content":{"rendered":"\n<p>L\u2019architecture micro-services d\u2019Affluences permet de d\u00e9l\u00e9guer la responsabilit\u00e9 de chaque fonctionnalit\u00e9 \u00e0 un composant d\u00e9di\u00e9 et d\u2019\u00e9taler la charge plus facilement. Il est donc n\u00e9cessaire d\u2019utiliser une interface de communication pour que ces services dialoguent avec les applications consommatrices. Nous utilisons soit une <strong>interface REST ou Graphql<\/strong> en fonction des cas d\u2019usage. C\u2019est cette derni\u00e8re qui nous int\u00e9resse plus particuli\u00e8rement dans ce billet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u2019est-ce que le langage GraphQL ?<\/h2>\n\n\n\n<p><a href=\"https:\/\/graphql.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Graphql<\/a> est un langage de requ\u00eate d\u00e9velopp\u00e9 et maintenu par Facebook. Celui-ci permet notamment aux consommateurs de l\u2019API de <strong>demander seulement les champs n\u00e9cessaires \u00e0 l\u2019inverse d\u2019une API REST<\/strong> qui expose un sch\u00e9ma pr\u00e9d\u00e9fini. Il est par exemple possible avec cette technologie d\u2019effectuer une <strong>seule requ\u00eate HTTP avec diff\u00e9rentes entit\u00e9s<\/strong> l\u00e0 o\u00f9 il est g\u00e9n\u00e9ralement n\u00e9cessaire de faire plusieurs appels lorsqu\u2019il s\u2019agit d\u2019une API REST. Pour autant, cette souplesse peut \u00e9galement engendrer certains d\u00e9fis techniques comme le probl\u00e8me n + 1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u2019est-ce que le probl\u00e8me N + 1 ?<\/h2>\n\n\n\n<p>Le risque de l\u2019impl\u00e9mentation de Graphql r\u00e9side dans le fait qu\u2019<strong>une demande peut g\u00e9n\u00e9rer N requ\u00eates pour chaque relation enfant + 1 requ\u00eate principale<\/strong>. Prenons un exemple : nous avons une biblioth\u00e8que avec plusieurs r\u00e9f\u00e9rences de livres. Ces livres ont \u00e9t\u00e9 not\u00e9s par leurs acqu\u00e9reurs. Nous voulons r\u00e9cup\u00e9rer tous les livres de notre biblioth\u00e8que avec les notes attribu\u00e9es \u00e0 chacun d\u2019entre eux.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query {\n  AllBooks {\n      id\n      title\n      note {\n          value\n      }\n  }\n}<\/code><\/pre>\n\n\n\n<p><em>Requ\u00eate GraphQL pour r\u00e9cup\u00e9rer tous les livres de notre biblioth\u00e8que avec les notes attribu\u00e9es<\/em><\/p>\n\n\n\n<p><br>Imaginons que nous ayons 10 livres dans notre biblioth\u00e8que, on r\u00e9cup\u00e8rera les dix livres en une requ\u00eate. Pour les notes, comme il s\u2019agit d\u2019un sous champ des livres, il faudra faire un appel \u00e0 la source de donn\u00e9es par livre. Cela nous donne donc 11 appels pour r\u00e9cup\u00e9rer le r\u00e9sultat de notre recherche.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u200b<\/td><td>\u200bNombre d&rsquo;\u00e9l\u00e9ments<\/td><td>Appels \u00e0 la source de donn\u00e9es<\/td><\/tr><tr><td>Livres<\/td><td>10<\/td><td>1<\/td><\/tr><tr><td>Notes<\/td><td>4\/livres = 40<\/td><td>10<\/td><\/tr><tr><td>Total<\/td><td>50<\/td><td>11<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Imaginons d\u00e9sormais que nous souhaitons r\u00e9cup\u00e9rer le nom de chaque personne qui a attribu\u00e9 chaque note avec la requ\u00eate suivante :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>query {\n  AllBooks {\n      id\n      title\n      notes {\n          value\n          buyers {\n              name\n          }\n      }\n  }\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u200b<\/td><td>\u200bNombre d&rsquo;\u00e9l\u00e9ments<\/td><td>\u200bAppels \u00e0 la source de donn\u00e9es<\/td><\/tr><tr><td>\u200bLivres<\/td><td>10<\/td><td>1<\/td><\/tr><tr><td>Notes<\/td><td>4\/livres = 40<\/td><td>10<\/td><\/tr><tr><td>Acheteurs<\/td><td>40<\/td><td>40<\/td><\/tr><tr><td>Total<\/td><td>90<\/td><td>51<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>On peut rapidement voir que ce probl\u00e8me est de l\u2019ordre de xn : plus nous aurons de relation multiple, plus nous aurons un arbre d\u2019appels grandissant.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-1.png\" alt=\"\" class=\"wp-image-799\" width=\"645\" height=\"324\" srcset=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-1.png 577w, https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-1-300x151.png 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Impl\u00e9menter un dataloader<\/h2>\n\n\n\n<p>Nous avons choisi d\u2019impl\u00e9menter la librairie <a href=\"https:\/\/www.npmjs.com\/package\/dataloader\" target=\"_blank\" rel=\"noreferrer noopener\">dataloader<\/a> pour r\u00e9pondre \u00e0 ce probl\u00e8me. Le principe est de collecter tous les \u00e9l\u00e9ments n\u00e9cessaires \u00e0 tous les appels potentiels dans un cache temporaire afin de les combiner en un seul appel.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-2.png\" alt=\"\" class=\"wp-image-800\" width=\"681\" height=\"357\" srcset=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-2.png 657w, https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-2-300x157.png 300w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><figcaption>Sch\u00e9ma d&rsquo;impl\u00e9mentation d&rsquo;un dataloader<\/figcaption><\/figure><\/div>\n\n\n\n<p>Cette premi\u00e8re impl\u00e9mentation nous permet de r\u00e9gler le probl\u00e8me N + 1 puisque les appels sont <strong>group\u00e9s par field resolver<\/strong>. En revanche, les appels pour r\u00e9cup\u00e9rer les acheteurs qui ont attribu\u00e9 une note ne sont toujours pas group\u00e9s, g\u00e9n\u00e9rant un volume toujours trop important d\u2019appels \u00e0 la source de donn\u00e9es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Surcharger le dataloader avec les requ\u00eates GraphQL<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<p>Pour compl\u00e9ter la premi\u00e8re solution, nous avons mis en place un syst\u00e8me d\u2019\u00e9v\u00e8nement pour <strong>d\u00e9clencher le chargement du cache du dataloader<\/strong>.<br>Lorsque l\u2019on re\u00e7oit une requ\u00eate, nous faisons le premier appel \u00e0 la source de donn\u00e9e. Au fur et \u00e0 mesure que les r\u00e9sultats sont re\u00e7us, nous incr\u00e9mentons un compteur permettant de conna\u00eetre le nombre d\u2019\u00e9l\u00e9ments qui devront \u00eatre ajout\u00e9s au cache lors de l\u2019appel au dataloader. Lorsque nous recevons l\u2019\u00e9v\u00e9nement indiquant que toutes les informations n\u00e9cessaires \u00e0 la requ\u00eate ont \u00e9t\u00e9 ajout\u00e9es, nous d\u00e9clenchons le chargement du cache du dataloader. Cette op\u00e9ration \u00e9tant faite pour chaque sous entit\u00e9, cela nous garantit un nombre d\u2019acc\u00e8s \u00e0 la source de donn\u00e9es \u00e9gal \u00e0 la profondeur de la requ\u00eate + 1, soit dans notre exemple 3 acc\u00e8s au lieu de 51 ! Dans les faits, nous impl\u00e9mentons cette approche \u00e0 l\u2019aide d\u2019une annotation que nous r\u00e9f\u00e9ren\u00e7ons sur chaque field resolver, permettant ainsi \u00e0 nos d\u00e9veloppeurs de l\u2019ajouter facilement.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-3.png\" alt=\"\" class=\"wp-image-801\" width=\"679\" height=\"409\" srcset=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-3.png 673w, https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/schema-requete-graphql-3-300x181.png 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure><\/div>\n\n\n\n<p>Cette approche nous permet de tirer partie au mieux des fonctionnalit\u00e9s apport\u00e9es par le dataloader afin de soulager la charge sur notre infrastructure en limitant les acc\u00e8s aux sources de donn\u00e9es au strict minimum pour accro\u00eetre les performances de nos applications et supporter l\u2019ajout permanent de nouveaux lieux \u00e0 notre plateforme !<\/p>\n\n\n\n<div class=\"wp-block-buttons aligncenter is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link\" href=\"https:\/\/affluences.welcomekit.co\/\" target=\"_blank\" rel=\"noreferrer noopener\">Rejoignez l&rsquo;\u00e9quipe technique Affluences<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>L\u2019architecture micro-services d\u2019Affluences permet de d\u00e9l\u00e9guer la responsabilit\u00e9 de chaque fonctionnalit\u00e9 \u00e0 un composant d\u00e9di\u00e9 et d\u2019\u00e9taler la charge plus facilement. Il est donc n\u00e9cessaire d\u2019utiliser une interface de communication pour que ces services dialoguent avec les applications consommatrices. Nous utilisons soit une interface REST ou Graphql en fonction des cas d\u2019usage. C\u2019est cette derni\u00e8re [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":802,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[353],"tags":[],"class_list":["post-796","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-les-dessous-de-la-tech"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Optimiser son architecture micro-services avec des requ\u00eates GraphQL<\/title>\n<meta name=\"description\" content=\"Retour d&#039;exp\u00e9rience \ud83d\udca1: Affluences utilise une architecture micro-services qui communique gr\u00e2ce \u00e0 des requ\u00eates GraphQL pour solidifier nos services !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optimiser son architecture micro-services avec des requ\u00eates GraphQL\" \/>\n<meta property=\"og:description\" content=\"Retour d&#039;exp\u00e9rience \ud83d\udca1: Affluences utilise une architecture micro-services qui communique gr\u00e2ce \u00e0 des requ\u00eates GraphQL pour solidifier nos services !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/\" \/>\n<meta property=\"og:site_name\" content=\"Le blog Affluences\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Affluencesapp\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-08T16:48:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-24T12:59:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/optimiser-architecture-micro-services.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"1365\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Communication\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Affluences_App\" \/>\n<meta name=\"twitter:site\" content=\"@Affluences_App\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Communication\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/\"},\"author\":{\"name\":\"Communication\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/person\\\/4791a989685bb628373b2af9f99550f3\"},\"headline\":\"Comment optimiser son architecture micro-services avec des requ\u00eates GraphQL ?\",\"datePublished\":\"2021-12-08T16:48:00+00:00\",\"dateModified\":\"2022-06-24T12:59:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/\"},\"wordCount\":797,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/optimiser-architecture-micro-services.jpeg\",\"articleSection\":[\"Dessous de la tech\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/\",\"name\":\"Optimiser son architecture micro-services avec des requ\u00eates GraphQL\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/optimiser-architecture-micro-services.jpeg\",\"datePublished\":\"2021-12-08T16:48:00+00:00\",\"dateModified\":\"2022-06-24T12:59:04+00:00\",\"description\":\"Retour d'exp\u00e9rience \ud83d\udca1: Affluences utilise une architecture micro-services qui communique gr\u00e2ce \u00e0 des requ\u00eates GraphQL pour solidifier nos services !\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#primaryimage\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/optimiser-architecture-micro-services.jpeg\",\"contentUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/optimiser-architecture-micro-services.jpeg\",\"width\":2048,\"height\":1365},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/optimiser-architecture-micro-services\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/affluences.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Comment optimiser son architecture micro-services avec des requ\u00eates GraphQL ?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/\",\"name\":\"Le blog d Affluences\",\"description\":\"Tous nos conseils et astuces\",\"publisher\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/affluences.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\",\"name\":\"Affluences\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.affluences.com\\\/wp-content\\\/uploads\\\/2017\\\/08\\\/logo_affluences-e1531737183907.png\",\"contentUrl\":\"https:\\\/\\\/blog.affluences.com\\\/wp-content\\\/uploads\\\/2017\\\/08\\\/logo_affluences-e1531737183907.png\",\"width\":512,\"height\":512,\"caption\":\"Affluences\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Affluencesapp\",\"https:\\\/\\\/x.com\\\/Affluences_App\",\"https:\\\/\\\/www.instagram.com\\\/affluences_app\\\/?hl=fr\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/affluences-app\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCwPTgo4QaCais3IytxOjh0w\",\"https:\\\/\\\/fr.wikipedia.org\\\/wiki\\\/Affluences\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/person\\\/4791a989685bb628373b2af9f99550f3\",\"name\":\"Communication\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"caption\":\"Communication\"},\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/author\\\/melisande-vialard\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optimiser son architecture micro-services avec des requ\u00eates GraphQL","description":"Retour d'exp\u00e9rience \ud83d\udca1: Affluences utilise une architecture micro-services qui communique gr\u00e2ce \u00e0 des requ\u00eates GraphQL pour solidifier nos services !","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/","og_locale":"fr_FR","og_type":"article","og_title":"Optimiser son architecture micro-services avec des requ\u00eates GraphQL","og_description":"Retour d'exp\u00e9rience \ud83d\udca1: Affluences utilise une architecture micro-services qui communique gr\u00e2ce \u00e0 des requ\u00eates GraphQL pour solidifier nos services !","og_url":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/","og_site_name":"Le blog Affluences","article_publisher":"https:\/\/www.facebook.com\/Affluencesapp","article_published_time":"2021-12-08T16:48:00+00:00","article_modified_time":"2022-06-24T12:59:04+00:00","og_image":[{"width":2048,"height":1365,"url":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/optimiser-architecture-micro-services.jpeg","type":"image\/jpeg"}],"author":"Communication","twitter_card":"summary_large_image","twitter_creator":"@Affluences_App","twitter_site":"@Affluences_App","twitter_misc":{"\u00c9crit par":"Communication","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#article","isPartOf":{"@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/"},"author":{"name":"Communication","@id":"https:\/\/affluences.com\/blog\/#\/schema\/person\/4791a989685bb628373b2af9f99550f3"},"headline":"Comment optimiser son architecture micro-services avec des requ\u00eates GraphQL ?","datePublished":"2021-12-08T16:48:00+00:00","dateModified":"2022-06-24T12:59:04+00:00","mainEntityOfPage":{"@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/"},"wordCount":797,"commentCount":0,"publisher":{"@id":"https:\/\/affluences.com\/blog\/#organization"},"image":{"@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#primaryimage"},"thumbnailUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/optimiser-architecture-micro-services.jpeg","articleSection":["Dessous de la tech"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/","url":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/","name":"Optimiser son architecture micro-services avec des requ\u00eates GraphQL","isPartOf":{"@id":"https:\/\/affluences.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#primaryimage"},"image":{"@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#primaryimage"},"thumbnailUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/optimiser-architecture-micro-services.jpeg","datePublished":"2021-12-08T16:48:00+00:00","dateModified":"2022-06-24T12:59:04+00:00","description":"Retour d'exp\u00e9rience \ud83d\udca1: Affluences utilise une architecture micro-services qui communique gr\u00e2ce \u00e0 des requ\u00eates GraphQL pour solidifier nos services !","breadcrumb":{"@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#primaryimage","url":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/optimiser-architecture-micro-services.jpeg","contentUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/06\/optimiser-architecture-micro-services.jpeg","width":2048,"height":1365},{"@type":"BreadcrumbList","@id":"https:\/\/affluences.com\/blog\/optimiser-architecture-micro-services\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/affluences.com\/"},{"@type":"ListItem","position":2,"name":"Comment optimiser son architecture micro-services avec des requ\u00eates GraphQL ?"}]},{"@type":"WebSite","@id":"https:\/\/affluences.com\/blog\/#website","url":"https:\/\/affluences.com\/blog\/","name":"Le blog d Affluences","description":"Tous nos conseils et astuces","publisher":{"@id":"https:\/\/affluences.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/affluences.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/affluences.com\/blog\/#organization","name":"Affluences","url":"https:\/\/affluences.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/affluences.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/blog.affluences.com\/wp-content\/uploads\/2017\/08\/logo_affluences-e1531737183907.png","contentUrl":"https:\/\/blog.affluences.com\/wp-content\/uploads\/2017\/08\/logo_affluences-e1531737183907.png","width":512,"height":512,"caption":"Affluences"},"image":{"@id":"https:\/\/affluences.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Affluencesapp","https:\/\/x.com\/Affluences_App","https:\/\/www.instagram.com\/affluences_app\/?hl=fr","https:\/\/www.linkedin.com\/company\/affluences-app\/","https:\/\/www.youtube.com\/channel\/UCwPTgo4QaCais3IytxOjh0w","https:\/\/fr.wikipedia.org\/wiki\/Affluences"]},{"@type":"Person","@id":"https:\/\/affluences.com\/blog\/#\/schema\/person\/4791a989685bb628373b2af9f99550f3","name":"Communication","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","caption":"Communication"},"url":"https:\/\/affluences.com\/blog\/author\/melisande-vialard\/"}]}},"_links":{"self":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/comments?post=796"}],"version-history":[{"count":4,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/796\/revisions"}],"predecessor-version":[{"id":810,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/796\/revisions\/810"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/media\/802"}],"wp:attachment":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/media?parent=796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/categories?post=796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/tags?post=796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}