{"id":993,"date":"2023-08-30T12:00:00","date_gmt":"2023-08-30T10:00:00","guid":{"rendered":"https:\/\/www.lena-it.fr\/?p=993"},"modified":"2023-08-28T10:01:33","modified_gmt":"2023-08-28T08:01:33","slug":"utilite-des-conteneurs-dans-les-equipes-de-developpement","status":"publish","type":"post","link":"https:\/\/www.lena-it.fr\/index.php\/2023\/08\/30\/utilite-des-conteneurs-dans-les-equipes-de-developpement\/","title":{"rendered":"Utilit\u00e9 des conteneurs dans les \u00e9quipes de d\u00e9veloppement"},"content":{"rendered":"\n[et_pb_section fb_built=\u00a0\u00bb1&Prime; _builder_version=\u00a0\u00bb4.21.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb da_disable_devices=\u00a0\u00bboff|off|off\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb da_is_popup=\u00a0\u00bboff\u00a0\u00bb da_exit_intent=\u00a0\u00bboff\u00a0\u00bb da_has_close=\u00a0\u00bbon\u00a0\u00bb da_alt_close=\u00a0\u00bboff\u00a0\u00bb da_dark_close=\u00a0\u00bboff\u00a0\u00bb da_not_modal=\u00a0\u00bbon\u00a0\u00bb da_is_singular=\u00a0\u00bboff\u00a0\u00bb da_with_loader=\u00a0\u00bboff\u00a0\u00bb da_has_shadow=\u00a0\u00bbon\u00a0\u00bb][et_pb_row _builder_version=\u00a0\u00bb4.20.2&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb width=\u00a0\u00bb100%\u00a0\u00bb max_width=\u00a0\u00bb100%\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb][et_pb_column type=\u00a0\u00bb4_4&Prime; _builder_version=\u00a0\u00bb4.20.2&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb][et_pb_text _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb text_font_size=\u00a0\u00bb16px\u00a0\u00bb header_2_text_color=\u00a0\u00bb#386759&Prime; header_2_font_size=\u00a0\u00bb22px\u00a0\u00bb header_2_line_height=\u00a0\u00bb1.6em\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime; ol_item_indent=\u00a0\u00bb30px\u00a0\u00bb ol_position=\u00a0\u00bboutside\u00a0\u00bb ul_item_indent=\u00a0\u00bb30px\u00a0\u00bb]<h3>Introduction<\/h3>\n<p>Quand on g\u00e8re une \u00e9quipe de d\u00e9veloppement, ind\u00e9pendamment de la probl\u00e9matique humaine, se pose la probl\u00e9matique des outils et des environnements de travail.<\/p>\n<p>Selon la stack technique du projet, Java, Python, TS, .NET, \u2026 les outils de d\u00e9veloppements (les IDE\u2019s) ne sont pas les m\u00eames. En outre, si notre projet a besoin de processus tiers comme une base de donn\u00e9es, un annuaire, un serveur JMS, un Keycloak, \u2026 il faut pr\u00e9voir son installation et sa mise \u00e0 disposition pour les \u00e9quipes de d\u00e9veloppement.<\/p>\n<p>Vient s\u2019ajouter \u00e0 cette complexit\u00e9 de mise en place les probl\u00e9matiques li\u00e9es aux versioning des \u00e9l\u00e9ments pr\u00e9c\u00e9dents, la version du Java, du NPM, du .NET core, de l\u2019IDE, de la base de donn\u00e9es \u2026<\/p>\n<p>&nbsp;<\/p>\n<h3>L\u2019historique<\/h3>\n<p>Dans un lointain pass\u00e9, chaque d\u00e9veloppeur installait l\u2019ensemble de ses outils et processus tiers sur son ordinateur de travail en local. Nonobstant les probl\u00e8mes lors de ses installations se posait assez rapidement le probl\u00e8me de configuration et de version de ses outils. En effet, si le projet se fait sur une version Java 17 avec un PostgreSQL 14.1 chacun des d\u00e9veloppeurs devaient s\u2019astreindre \u00e0 utiliser ses versions et \u00e0 ne pas faire usage d\u2019autres versions pour ce projet sous peine de se retrouver avec des incoh\u00e9rences entre d\u00e9veloppeurs et des probl\u00e9matiques de chargement de donn\u00e9es.<\/p>\n<p>Mais que doit-on faire lorsqu\u2019une version change\u00a0? ou plus classiquement comment faire pour g\u00e9rer les d\u00e9veloppeurs qui travaillent sur plusieurs projets avec des stacks techniques tr\u00e8s diff\u00e9rentes.<\/p>\n<p>A cette \u00e9poque, plusieurs solutions\u00a0existaient :<\/p>\n<ol>\n<li>Chaque d\u00e9veloppeur installait tout sur sa machine de travail et le plus souvent il avait 6 versions de Java, 4 versions de postgreSQL, 3 versions de NPM \u2026<\/li>\n<li>Une machine virtuelle \u00e9tait r\u00e9alis\u00e9e par une \u00e9quipe technique sp\u00e9cialis\u00e9e. On faisait usage de logiciels de virtualisation tels que VMWare ou VirtualBox. Il fallait r\u00e9aliser une VM par stack technique et tr\u00e8s souvent une par projet. Les machines virtuelles \u00e9taient ensuite laiss\u00e9es \u00e0 disposition des d\u00e9veloppeurs qui pouvaient les lancer sur leur machine de travails.<\/li>\n<li>Une partition virtuelle (VHD\/VHDX) \u00e9tait r\u00e9alis\u00e9e par un techlead. Il installait tous les outils\/programmes n\u00e9cessaires sur cette partition. Elles \u00e9taient ensuite laiss\u00e9es \u00e0 disposition des d\u00e9veloppeurs qui pouvaient les utiliser sur leurs machines de travail (Windows uniquement dans ce cas-l\u00e0).<\/li>\n<\/ol>\n<p>Malheureusement, toutes ses solutions \u00e9taient trop contraignantes et chronophage \u00e0 g\u00e9rer d\u00e8s qu\u2019un changement survenait. En effet, si l\u2019on image le cas simple de changement de version d\u2019une base de donn\u00e9es, il fallait<\/p>\n<ol>\n<li>Dans notre cas 1, que chaque d\u00e9veloppeur installe la nouvelle version sur sa machine et r\u00e9alise les changements appropri\u00e9s de configurations dans leur code. Il ne fallait pas pour autant d\u00e9sinstaller la version pr\u00e9c\u00e9dente afin de pouvoir g\u00e9rer les corrections d\u2019anomalies sur les versions ant\u00e9rieures du projet.<\/li>\n<li>Dans notre cas 2 et 3, que l\u2019\u00e9quipe technique r\u00e9alise une nouvelle VM (ou VHD\/X) et la redistribue \u00e0 chaque d\u00e9veloppeur<\/li>\n<\/ol>\n<h2><\/h2>\n<h3>De nos jours<\/h3>\n<p>Ses solutions sont toujours utilisables \u00e0 ce jour, mais il est fortement conseill\u00e9 de passer \u00e0 une autre approche plus souple et plus efficace et scalable.<\/p>\n<p>Depuis une dizaine d\u2019ann\u00e9es maintenant, la virtualisation s\u2019est vue transformer\/remplacer par la conteneurisation.<\/p>\n<p>La diff\u00e9rence est simple\u00a0:<\/p>\n<ul>\n<li>Dans une VM : on doit tout installer, l\u2019OS, les utilisateurs, les droits, la s\u00e9curit\u00e9, les processus, \u2026 Cela donne des fichiers de plusieurs giga octet. Chaque VM qui se lance consomme beaucoup de ressource m\u00e9moire car chaque VM lance son propre OS.<\/li>\n<\/ul>[\/et_pb_text][et_pb_image src=\u00a0\u00bbhttps:\/\/www.lena-it.fr\/wp-content\/uploads\/2023\/08\/VM.svg\u00a0\u00bb _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb title_text=\u00a0\u00bbVM\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; sticky_enabled=\u00a0\u00bb0&Prime; custom_padding=\u00a0\u00bb0px||||false|false\u00a0\u00bb custom_margin=\u00a0\u00bb0px||||false|false\u00a0\u00bb][\/et_pb_image][et_pb_text _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb text_font_size=\u00a0\u00bb16px\u00a0\u00bb header_2_text_color=\u00a0\u00bb#386759&Prime; header_2_font_size=\u00a0\u00bb22px\u00a0\u00bb header_2_line_height=\u00a0\u00bb1.6em\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime; ol_item_indent=\u00a0\u00bb30px\u00a0\u00bb ol_position=\u00a0\u00bboutside\u00a0\u00bb ul_item_indent=\u00a0\u00bb30px\u00a0\u00bb custom_margin=\u00a0\u00bb0px||0px||false|false\u00a0\u00bb custom_padding=\u00a0\u00bb0px||0px||false|false\u00a0\u00bb]<ol><\/ol>\n<ul>\n<li>Dans un conteneur\u00a0: on ne doit installer que le processus qui nous int\u00e9resse. Il sera donc beaucoup plus l\u00e9ger qu\u2019une VM, de l\u2019ordre de 10x plus l\u00e9ger (il d\u00e9passe rarement le giga octet). Contrairement aux VMs, l\u2019OS qui fait tourner les conteneurs n\u2019est lanc\u00e9 qu\u2019une seule fois, la consommation m\u00e9moire est donc bien plus faible que pour les VMs.<\/li>\n<\/ul>[\/et_pb_text][et_pb_image src=\u00a0\u00bbhttps:\/\/www.lena-it.fr\/wp-content\/uploads\/2023\/08\/containeur.svg\u00a0\u00bb _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb title_text=\u00a0\u00bbcontaineur\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; sticky_enabled=\u00a0\u00bb0&Prime; custom_padding=\u00a0\u00bb0px||||false|false\u00a0\u00bb custom_margin=\u00a0\u00bb0px||||false|false\u00a0\u00bb][\/et_pb_image][et_pb_text _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb text_font_size=\u00a0\u00bb16px\u00a0\u00bb header_2_text_color=\u00a0\u00bb#386759&Prime; header_2_font_size=\u00a0\u00bb22px\u00a0\u00bb header_2_line_height=\u00a0\u00bb1.6em\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime; ol_item_indent=\u00a0\u00bb30px\u00a0\u00bb ol_position=\u00a0\u00bboutside\u00a0\u00bb ul_item_indent=\u00a0\u00bb30px\u00a0\u00bb custom_margin=\u00a0\u00bb0px||0px||false|false\u00a0\u00bb custom_padding=\u00a0\u00bb0px||0px||false|false\u00a0\u00bb]<ol><\/ol>\n<p>Pour notre probl\u00e9matique de d\u00e9veloppement, les conteneurs vont remplacer nos solutions pr\u00e9c\u00e9dentes. Id\u00e9alement, il nous faudra utiliser un conteneur par processus n\u00e9cessaire au projet.<\/p>\n<p>Si l\u2019on prend un projet en stack Java+Angular+PostgreSQL cela nous donne au moins trois conteneurs.<\/p>\n<p>En 2023 le d\u00e9veloppeur aura besoin d\u2019installer son IDE (voir ses IDEs), il lui faudra aussi installer un outil pour g\u00e9rer les conteneurs (par exemple Docker Desktop) et cela sera suffisant. En aucun cas, il ne devra installer PostgreSQL ou tout autre processus n\u00e9cessaire au projet.<\/p>\n<p>L\u2019\u00e9quipe technique qui avait la charge de r\u00e9aliser les VMs va maintenant s\u2019occuper de r\u00e9aliser des fichiers de configurations qui vont d\u00e9crire les diff\u00e9rents processus n\u00e9cessaires aux d\u00e9veloppeurs ainsi que leurs configurations. On ne parle plus ici de r\u00e9aliser des VMs de plusieurs gigas octet, mais de simples fichiers de configurations de quelques kilo octet.<\/p>\n<p>Exemple : voici un bout de fichier, docker-compose.yml, qui d\u00e9crit la configuration n\u00e9cessaire au lancement d\u2019un PostgreSQL :<\/p>[\/et_pb_text][et_pb_image src=\u00a0\u00bbhttps:\/\/www.lena-it.fr\/wp-content\/uploads\/2023\/08\/code-potfresql.png\u00a0\u00bb _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb title_text=\u00a0\u00bbcode potfresql\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; sticky_enabled=\u00a0\u00bb0&Prime; custom_padding=\u00a0\u00bb0px||||false|false\u00a0\u00bb custom_margin=\u00a0\u00bb0px||||false|false\u00a0\u00bb][\/et_pb_image][et_pb_text _builder_version=\u00a0\u00bb4.22.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb text_font_size=\u00a0\u00bb16px\u00a0\u00bb header_2_text_color=\u00a0\u00bb#386759&Prime; header_2_font_size=\u00a0\u00bb22px\u00a0\u00bb header_2_line_height=\u00a0\u00bb1.6em\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbet_body_layout\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime; ol_item_indent=\u00a0\u00bb30px\u00a0\u00bb ol_position=\u00a0\u00bboutside\u00a0\u00bb ul_item_indent=\u00a0\u00bb30px\u00a0\u00bb custom_margin=\u00a0\u00bb0px||0px||false|false\u00a0\u00bb custom_padding=\u00a0\u00bb0px||0px||false|false\u00a0\u00bb]<ol><\/ol>\n<p>Sans rentrer trop dans le d\u00e9tail, notez \u00e0 la ligne 14\u00a0: on indique la version de PostgreSQL que l\u2019on souhaite lancer. Sur les lignes 20 \u00e0 23 on indique les informations d\u2019acc\u00e8s \u00e0 notre base de donn\u00e9es. Sur la ligne 25 on indique le port r\u00e9seau qui sera utilis\u00e9 pour atteindre notre base de donn\u00e9es de l\u2019ext\u00e9rieur du conteneur. Sur la derni\u00e8re partie, on indique la gestion des volumes, ou comment g\u00e9rer \/ sauvegarder nos fichiers associ\u00e9s au conteneur.<\/p>\n<p>On donne ses fichiers aux \u00e9quipes de d\u00e9veloppement, chaque d\u00e9veloppeur peut maintenant lancer cette configuration qui va\u00a0:<\/p>\n<ol>\n<li>T\u00e9l\u00e9charger d\u2019Internet les diff\u00e9rents conteneurs dans leurs versions sp\u00e9cifi\u00e9s<\/li>\n<li>Construire chaque conteneur avec les informations sp\u00e9cifi\u00e9es et les mettre \u00e0 disposition du d\u00e9veloppeur<\/li>\n<\/ol>\n<p>Via cette approche\u00a0:<\/p>\n<ol>\n<li>Travailler sur plusieurs projets est simple, car chaque projet a toute sa configuration technique d\u00e9crite dans un fichier. Passer d\u2019un projet \u00e0 l\u2019autre se r\u00e9sume \u00e0 lancer la configuration associ\u00e9e au projet.<\/li>\n<li>Changer une version d\u2019un processus devient tr\u00e8s simple, il suffit de modifier le fichier de configuration et de le propager aux \u00e9quipes.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3>Axes d\u2019am\u00e9liorations<\/h3>\n<p>L\u2019approche par conteneurs a \u00e9norm\u00e9ment d\u2019avantages, on peut citer entre autres\u00a0:<\/p>\n<ol>\n<li>Simplicit\u00e9 de mise en place<\/li>\n<li>Simplicit\u00e9 de gestion du versioning<\/li>\n<li>Souplesse dans les migrations techniques<\/li>\n<li>Meilleure consommation des ressources m\u00e9moire \/ processeurs \/ espace disque<\/li>\n<li>Possibilit\u00e9 de lancer ses conteneurs o\u00f9 l\u2019on veut, sur sa machine ou dans le cloud<\/li>\n<li>La configuration r\u00e9alis\u00e9e pour les conteneurs de d\u00e9veloppement peut servir de base pour la r\u00e9alisation des configurations de pr\u00e9 exploitation et\/ou de production.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Mais il lui reste quelques inconv\u00e9nients\u00a0:<\/p>\n<ol>\n<li>Il faut tout de m\u00eame \u00e9crire le\/les fichiers de configurations. Sur un projet complexe, cela peut prendre 2 \u00e0 5 jours hommes<\/li>\n<li>Dans le cas de projets tr\u00e8s complexes, il faut parfois fabriquer le conteneur dans sa totalit\u00e9. Le temps de travail associ\u00e9 \u00e0 cette t\u00e2che sera tr\u00e8s l\u00e9g\u00e8rement plus faible que celui pour la r\u00e9alisation d\u2019une VM, mais il reste fastidieux.<\/li>\n<li>Malheureusement, pour le moment, il n\u2019y a pas encore de conteneurs officiels pour les IDE\u2019s<\/li>\n<\/ol>\n<p>Ce dernier point est \u00e0 mes yeux le plus probl\u00e9matique, en effet, le d\u00e9veloppeur doit toujours installer son \/ ses IDEs. Si je reprends l\u2019exemple de ma stack technique, chaque d\u00e9veloppeur devra tout de m\u00eame installer une version de Java sur son ordinateur, puis son IDE (Eclipse ou IntelIJ) et souvent un Visual Studio Code pour la partie front.<\/p>\n<p>&nbsp;<\/p>\n<h3>Conclusion<\/h3>\n<p>Le temps o\u00f9 l\u2019on pourra int\u00e9grer un nouveau d\u00e9veloppeur en lui donnant juste un petit fichier de configuration \u00e0 lancer n\u2019est pas encore l\u00e0, mais il se rapproche \u00e0 grands pas.<\/p>\n<p>R\u00e9trospectivement, travailler aujourd\u2019hui en tant que d\u00e9veloppeur via l\u2019utilisation de conteneurs reste tr\u00e8s agr\u00e9able et permet une r\u00e9elle homog\u00e9n\u00e9it\u00e9 entre environnement de d\u00e9veloppement et d\u2019\u00e9viter les probl\u00e8mes li\u00e9s aux changements de versions sur des outils comme NPM par exemple. Pour moi, en tout cas, c\u2019est devenu totalement indispensable.<\/p>\n<p>A noter que certains \u00e9diteurs logiciels, comme Jetbrain ou AWS via Cloud9, propose aussi des solutions full cloud ou tout, y compris et surtout l\u2019IDE, est conteneuris\u00e9 directement par eux. Si vous souhaitez partir sur ce type de solution, faites attention au ROI global ainsi qu\u2019aux habitudes des d\u00e9veloppeurs souvent tr\u00e8s attach\u00e9s \u00e0 leur IDE.<\/p>\n<p>Depuis quelques ann\u00e9es d\u00e9j\u00e0, les Java\u2019istes ont la possibilit\u00e9 via le framework java.testcontainers.org de piloter des conteneurs directement via leur code sans passer par la case fichier de configuration. Dans sa toute derni\u00e8re version de 2023, le framework Spring Boot int\u00e8gre cette fonctionnalit\u00e9 et la compl\u00e8te permettant aux d\u00e9veloppeurs de piloter les diff\u00e9rents conteneurs et leurs configurations directement via le code et les m\u00e9caniques de profiles Spring Boot.<\/p>\n<p>En esp\u00e9rant avoir convaincu les entreprises qui ne font pas encore usage de cette approche de s\u2019y int\u00e9resser dans l\u2019objectif de simplifier et d\u2019homog\u00e9n\u00e9iser leurs processus de d\u00e9veloppement.<\/p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>Quand on g\u00e8re une \u00e9quipe de d\u00e9veloppement, ind\u00e9pendamment de la probl\u00e9matique humaine, se pose la probl\u00e9matique des outils et des environnements de travail.<\/p>\n","protected":false},"author":3,"featured_media":994,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","content-type":"","_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[37,35],"tags":[],"class_list":["post-993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpement","category-technologie"],"_links":{"self":[{"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/comments?post=993"}],"version-history":[{"count":4,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/993\/revisions"}],"predecessor-version":[{"id":1003,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/posts\/993\/revisions\/1003"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/media\/994"}],"wp:attachment":[{"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/media?parent=993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/categories?post=993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lena-it.fr\/index.php\/wp-json\/wp\/v2\/tags?post=993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}