{"id":96842,"date":"2020-11-20T12:52:28","date_gmt":"2020-11-20T11:52:28","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=96842"},"modified":"2020-11-20T12:52:28","modified_gmt":"2020-11-20T11:52:28","slug":"developpement-cote-serveur-productif-avec-kotlin-temoignages-d-entreprises-utilisatrices","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/fr\/kotlin\/2020\/11\/developpement-cote-serveur-productif-avec-kotlin-temoignages-d-entreprises-utilisatrices\/","title":{"rendered":"D\u00e9veloppement c\u00f4t\u00e9 serveur productif avec Kotlin\u00a0: t\u00e9moignages d&#8217;entreprises utilisatrices"},"content":{"rendered":"<p>Kotlin a \u00e9t\u00e9 cr\u00e9\u00e9 comme une alternative \u00e0 Java, son domaine d&#8217;application au sein de l&#8217;\u00e9cosyst\u00e8me de la JVM \u00e9tait donc cens\u00e9 \u00eatre le m\u00eame que celui de Java. \u00c9videmment, cela inclut le d\u00e9veloppement c\u00f4t\u00e9 serveur. <\/p>\n<hr \/>\n<p><strong>Nous aimerions en savoir plus sur votre exp\u00e9rience avec Kotlin pour le d\u00e9veloppement d&#8217;applications c\u00f4t\u00e9 serveur et partager vos retours avec la communaut\u00e9\u00a0!<\/strong><\/p>\n<p><strong><a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLSeMcSwPO9vNKovrut0TwmTPXjCmfWte2THXBx6VdzH39vcmxw\/viewform\" target=\"_blank\" rel=\"noopener\">Racontez-nous votre histoire\u00a0!<\/a><\/strong><\/p>\n<hr \/>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-09-at-18.13.01.png\" alt=\"\" \/><\/p>\n<p>Kotlin a connu une \u00e9norme croissance au sein de l&#8217;\u00e9cosyst\u00e8me Android ces derni\u00e8res ann\u00e9es. L&#8217;adoption de Kotlin pour le d\u00e9veloppement c\u00f4t\u00e9 serveur affiche \u00e9galement une croissance stable. Cependant, les entreprises qui envisagent d&#8217;adopter Kotlin pour le d\u00e9veloppement c\u00f4t\u00e9 serveur nous demandent encore souvent <em><strong>\u00ab\u00a0Qui d&#8217;autre utilise Kotlin pour cela\u00a0?\u00a0\u00bb<\/strong><\/em> .<\/p>\n<p>Lorsqu&#8217;elles cherchent \u00e0 adopter de nouvelles technologies, les entreprises veulent s&#8217;assurer de faire le bon choix et elles appr\u00e9cient d&#8217;avoir la confirmation que d&#8217;autres entreprises obtiennent de bons r\u00e9sultats en utilisant ces technologies.<\/p>\n<p>Dans cet article, nous partageons plusieurs t\u00e9moignages d&#8217;entreprises qui ont adopt\u00e9 Kotin pour le d\u00e9veloppement c\u00f4t\u00e9 serveur. Nous esp\u00e9rons que ces retours d&#8217;exp\u00e9riences vous seront utiles si vous envisagez d&#8217;utiliser Kotlin pour le m\u00eame type de projets.<\/p>\n<p><em>Cet article est bas\u00e9 sur la pr\u00e9sentation du contenu de l&#8217;\u00e9v\u00e9nement en ligne Kotlin 1.4. Vous pouvez visionner la vid\u00e9o compl\u00e8te sur notre <a href=\"https:\/\/youtu.be\/8xAH7RU0Y44\" target=\"_blank\" rel=\"noopener\">cha\u00eene YouTube<\/a> .<\/em><\/p>\n<h2>Pourquoi Kotlin\u00a0?<\/h2>\n<p>Nous \u00e9changeons constamment avec des d\u00e9veloppeurs et nous avons ainsi appris que des entreprises de toute taille utilisent Kotlin pour le d\u00e9veloppement c\u00f4t\u00e9 serveur. Il est toujours int\u00e9ressant pour nous de savoir pourquoi les entreprises choisissent Kotlin et quels avantages elles en retirent.<\/p>\n<p>Kotlin offre de nombreuses fonctionnalit\u00e9s mais nous \u00e9voquerons ici celles qui sont le plus appr\u00e9ci\u00e9es\u00a0par les utilisateurs avec lesquelles nous avons \u00e9chang\u00e9 :<\/p>\n<ul>\n<li><strong>La Syntaxe concise.<\/strong> L&#8217;expressivit\u00e9 du langage permet de g\u00e9n\u00e9rer du code concis. Moins il y a de code \u00e0 \u00e9crire, moins l&#8217;application finale risque de comporter des bugs et plus la maintenance du code est facilit\u00e9e.<\/li>\n<li><strong>La S\u00e9curit\u00e9 Null.<\/strong> C&#8217;est la fonctionnalit\u00e9 de Kotlin que les d\u00e9veloppeurs appr\u00e9cient le plus. Le syst\u00e8me de types de Kotlin vise \u00e0 \u00e9liminer le risque de r\u00e9f\u00e9rences nulles dans le code, \u00e9galement connu comme \u00ab\u00a0l&#8217;erreur \u00e0 un milliard de dollars\u00a0\u00bb. Cette fonctionnalit\u00e9 de s\u00e9curit\u00e9 suppl\u00e9mentaire est int\u00e9gr\u00e9e au compilateur de Kotlin, ce qui permet d&#8217;\u00e9viter les probl\u00e8mes de d\u00e9r\u00e9f\u00e9rencement de valeurs nulles.<\/li>\n<li><strong>L&#8217;interop\u00e9rabilit\u00e9 avec Java.<\/strong> L&#8217;interop\u00e9rabilit\u00e9 avec la plateforme h\u00f4te est un atout majeur pour am\u00e9liorer la productivit\u00e9\u00a0! Avec Kotlin, vous pouvez tirer parti de tous les frameworks et biblioth\u00e8ques de l&#8217;\u00e9cosyst\u00e8me Java. Il est \u00e9galement possible d&#8217;introduire progressivement Kotlin dans un projet Java sans avoir \u00e0 convertir tout le code Java en Kotlin.<\/li>\n<li><strong>Les coroutines Kotlin.<\/strong> Elles offrent un moyen simple de ma\u00eetriser le code asynchrone avec un mod\u00e8le de programmation imp\u00e9ratif. Les coroutines sont particuli\u00e8rement utiles pour d\u00e9velopper des applications c\u00f4t\u00e9 serveur \u00e0 charge \u00e9lev\u00e9e n\u00e9cessitant de nombreuses op\u00e9rations input\/output, car elles permettent d&#8217;\u00e9conomiser beaucoup de ressources syst\u00e8me. L&#8217;ajout de la <a href=\"https:\/\/spring.io\/blog\/2019\/04\/12\/going-reactive-with-spring-coroutines-and-kotlin-flow\" target=\"_blank\" rel=\"noopener\">prise en charge des Coroutines au framework Spring<\/a> a encore renforc\u00e9 l&#8217;int\u00e9r\u00eat de cette fonctionnalit\u00e9 pour le d\u00e9veloppement c\u00f4t\u00e9 serveur.<\/li>\n<li><strong>Kotlin Multiplatform.<\/strong> Avec Kotlin, les d\u00e9veloppeurs peuvent cibler diff\u00e9rentes plateformes \u2013 JVM, JavaScript, Android, iOS, applications natives. La possibilit\u00e9 de partager du code entre plusieurs applications fonctionnant sur diff\u00e9rentes plateformes s&#8217;est av\u00e9r\u00e9e \u00eatre une fonctionnalit\u00e9 tr\u00e8s utile.<\/li>\n<\/ul>\n<p>Voyons maintenant quelques exemples dans lesquels Kotlin apporte une am\u00e9lioration significative au d\u00e9veloppement.<\/p>\n<h2>JetBrains Space\u00a0: la r\u00e9utilisation du code pouss\u00e9e \u00e0 l&#8217;extr\u00eame<\/h2>\n<p>Vous ne serez pas surpris d\u2019apprendre que nous utilisons Kotlin chez JetBrains. Nous l&#8217;utilisons non seulement pour nos outils mais aussi pour nos services. <a href=\"https:\/\/www.jetbrains.com\/space\/\" target=\"_blank\" rel=\"noopener\">JetBrains Space<\/a>, notre plateforme de collaboration pour les \u00e9quipes dont nous avons annonc\u00e9 le lancement lors de la KotlinConf 2019, a \u00e9t\u00e9 cr\u00e9\u00e9e avec Kotlin et le framework <a href=\"https:\/\/ktor.io\/\" target=\"_blank\" rel=\"noopener\">Ktor<\/a> . Space utilise Kotlin pour tout\u00a0: services c\u00f4t\u00e9 serveur s&#8217;ex\u00e9cutant sur la JVM, application Android, application iOS, application web et plugin d&#8217;IDE.<\/p>\n<p>Gr\u00e2ce \u00e0 Kotlin Multiplatform, une grande partie du code est partag\u00e9e entre toutes ces applications. En plus du partage du mod\u00e8le de donn\u00e9es entre l&#8217;interface utilisateur et le code c\u00f4t\u00e9 serveur, Space mutualise le mod\u00e8le de vue, la logique de validation et les biblioth\u00e8ques communes. Toutefois, les composants de l&#8217;interface utilisateur sont sp\u00e9cifiques \u00e0 la plateforme, l&#8217;interop\u00e9rabilit\u00e9 est donc \u00e9galement importante pour chaque plateforme sur laquelle le code Kotlin peut \u00eatre ex\u00e9cut\u00e9.<\/p>\n<p><iframe loading=\"lazy\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/JnmHqKLgYY4?enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h3>Kotlin Multiplatform<\/h3>\n<p>L&#8217;exemple qui suit montre comment Kotlin prend en charge le d\u00e9veloppement pour de multiples plateformes. Supposons que nous souhaitions utiliser une classe de donn\u00e9es pour plusieurs plateformes (JVM, JavaScript, iOS)\u00a0:<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nclass Holiday {\n   val name: String,\n   val date: LocalDate\n}\n<\/pre>\n<p>La classe <em>String<\/em> appartient \u00e0 la biblioth\u00e8que standard de Kotlin mais pas LocalDate. Nous pouvons sp\u00e9cifier la classe \u00e0 utiliser en tant que <em>LocalDate<\/em> pour chaque plateforme cibl\u00e9e par l&#8217;application. Pour ce faire, nous d\u00e9clarons la classe <em>LocalDate<\/em> dans le module commun aux diff\u00e9rentes plateformes en utilisant le mot-cl\u00e9 <strong><em>expect<\/em><\/strong>, en supposant que les diff\u00e9rents modules fourniront l&#8217;impl\u00e9mentation r\u00e9elle. Le mot-cl\u00e9 <strong><em>actual<\/em><\/strong> indique le type \u00e0 utiliser dans le code sp\u00e9cifique \u00e0 la plateforme\u00a0:<\/p>\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n\/\/commonMain\nexpect class LocalDate()\n\n\/\/jvmMain\nactual typealias LocalDate = org.joda.time.LocalDate\n\n\/\/jsMain\nactual typealias LocalDate = Moment\n\n\/\/iosMain\nactual typealias LocalDate = NSDate\n<\/pre>\n<p>Le code non sp\u00e9cifique \u00e0 la plateforme peut \u00eatre \u00e9crit une seule fois seulement, dans le module commun du projet. Le code commun est ensuite r\u00e9utilis\u00e9 par les diff\u00e9rents modules qui ciblent des plateformes sp\u00e9cifiques.<\/p>\n<p>La prise en charge de Kotlin pour le d\u00e9veloppement multiplateforme est particuli\u00e8rement pris\u00e9e par les \u00e9quipes de d\u00e9veloppement mobile, qui l&#8217;utilisent pour partager du code entre des applications Android et iOS. Vous pouvez en apprendre davantage \u00e0 ce sujet sur le <a href=\"https:\/\/kotlinlang.org\/lp\/mobile\/\" target=\"_blank\" rel=\"noopener\">site Kotlin Multiplatform Mobile<\/a> et en consultant <a href=\"https:\/\/kotlinlang.org\/lp\/mobile\/case-studies\/\" target=\"_blank\" rel=\"noopener\">les retours d&#8217;exp\u00e9riences d&#8217;entreprises utilisant cette technologie<\/a> .<\/p>\n<h2>Jira Software\u00a0: Microservices avec Kotlin et Spring Boot<\/h2>\n<p>Autre exemple int\u00e9ressant\u00a0: le logiciel Jira d&#8217;Atlassian. Kotlin est utilis\u00e9 chez Atlassian pour d\u00e9velopper les produits cloud Jira Software. <\/p>\n<p>Jira \u00e9tait une application Java monolithique autonome que les utilisateurs installaient sur leurs serveurs. Avec l&#8217;introduction de Jira Cloud est apparu le besoin de d\u00e9composer l&#8217;application en plusieurs services afin de mieux la faire \u00e9voluer. <\/p>\n<p>Le passage au cloud a cr\u00e9\u00e9 une opportunit\u00e9 de mettre \u00e0 jour la pile technologique et c&#8217;est ainsi que Kotlin est intervenu. Les d\u00e9veloppeurs ont \u00e9t\u00e9 ravis d&#8217;adopter le langage, qui leur a permis de gagner en productivit\u00e9\u00a0! Ils utilisent maintenant Kotlin avec Spring Boot pour impl\u00e9menter des microservices visant \u00e0 am\u00e9liorer des aspects majeurs de l&#8217;exp\u00e9rience utilisateur. Kotlin et Spring sont utilis\u00e9s dans toute la gamme cloud de Jira\u00a0: dans Jira Software, Jira Service Desk et Jira Core.<\/p>\n<p><iframe loading=\"lazy\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/4GkoB4hZUnw?enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h2>Adobe\u00a0: d\u00e9verrouillage avec les coroutines Kotlin pour les services \u00e0 charge \u00e9lev\u00e9e<\/h2>\n<p>L&#8217;\u00e9quipe Adobe Experience Platform a <a href=\"https:\/\/medium.com\/adobetech\/streamlining-server-side-app-development-with-kotlin-be8cf9d8b61a\" target=\"_blank\" rel=\"noopener\">partag\u00e9<\/a> ses r\u00e9flexions sur les raisons pour lesquelles Kotlin a sa pr\u00e9f\u00e9rence pour le d\u00e9veloppement c\u00f4t\u00e9 serveur.<\/p>\n<p>Les membres de l&#8217;\u00e9quipe expliquent que les backends des applications sont pass\u00e9s de conteneurs web monolithiques \u00e0 un maillage distribu\u00e9 d&#8217;applications bas\u00e9es sur les donn\u00e9es. Ces applications doivent traiter beaucoup de donn\u00e9es, recevoir et envoyer des messages, et pour toutes ces op\u00e9rations, la latence est un param\u00e8tre critique.<\/p>\n<p>Dans leur article, ils \u00e9num\u00e8rent les principaux avantages de l&#8217;utilisation de Kotlin pour le d\u00e9veloppement c\u00f4t\u00e9 serveur. La prise en charge de la <a href=\"https:\/\/kotlinlang.org\/docs\/tutorials\/coroutines\/coroutines-basic-jvm.html\" target=\"_blank\" rel=\"noopener\">programmation asynchrone<\/a> est cit\u00e9e comme la plus utile des fonctionnalit\u00e9s de Kotlin. Les coroutines Kotlin sont d\u00e9crites comme \u00ab\u00a0faciles \u00e0 apprendre\u00a0\u00bb et permettant de g\u00e9n\u00e9rer du code facile \u00e0 maintenir.<\/p>\n<p><em><strong>\u00ab\u00a0Avec Kotlin, nous pouvons \u00e9crire du code dans un &#8220;style direct\u00a0\u00bb qui se lit presque comme un code bloquant, imp\u00e9ratif.\u00a0\u00bb<\/strong><\/em><\/p>\n<p>Les applications sont assez lourdes en terne d&#8217;input\/output et doivent recourir \u00e0 divers services externes; tels que des files d&#8217;attente, des bases de donn\u00e9es et autres. Or ces appels r\u00e9seau risquent d&#8217;affecter le d\u00e9bit des applications. L&#8217;int\u00e9r\u00eat des coroutines Kotlin est donc imm\u00e9diatement apparu comme \u00e9vident pour ce cas d&#8217;utilisation. Le passage \u00e0 l&#8217;asynchrone am\u00e9liore le d\u00e9bit global et \u00e9conomise par cons\u00e9quent les ressources mat\u00e9rielles.<\/p>\n<p>Les autres avantages r\u00e9sident dans les principales fonctionnalit\u00e9s du langage Kotlin\u00a0: <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/data-classes.html\" target=\"_blank\" rel=\"noopener\">les classes de donn\u00e9es<\/a> , le <a href=\"https:\/\/kotlinlang.org\/spec\/type-system.html\" target=\"_blank\" rel=\"noopener\">syst\u00e8me de type de<\/a> fiable, la <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/null-safety.html\" target=\"_blank\" rel=\"noopener\">s\u00e9curit\u00e9 Null<\/a> et la <a href=\"https:\/\/kotlinlang.org\/docs\/tutorials\/kotlin-for-py\/functional-programming.html\" target=\"_blank\" rel=\"noopener\">prise en charge de la programmation fonctionnelle<\/a> . La flexibilit\u00e9 de la syntaxe de Kotlin facilite la cr\u00e9ation d\u2019un DSL interne. Cette caract\u00e9ristique est \u00e9galement tr\u00e8s appr\u00e9ci\u00e9e par les ing\u00e9nieurs d&#8217;Adobe. Un autre de leurs articles d\u00e9crit leur exp\u00e9rience de la <a href=\"https:\/\/medium.com\/adobetech\/building-elegant-dsls-with-kotlin-707726c5ed21\" target=\"_blank\" rel=\"noopener\">construction d&#8217;un DSL avec Kotlin<\/a> .<\/p>\n<h2>Groupe Expedia\u00a0: cr\u00e9ation d&#8217;API GraphQL avec Kotlin<\/h2>\n<p>Expedia a adopt\u00e9 Kotlin en raison des <strong>garanties de s\u00e9curit\u00e9 Null qu&#8217;offre son compilateur<\/strong>, de la <strong>concision<\/strong> du langage et de son <strong>interop\u00e9rabilit\u00e9 compl\u00e8te avec Java<\/strong>. L&#8217;interop\u00e9rabilit\u00e9 avec Java a permis une int\u00e9gration progressive de Kotlin sans avoir \u00e0 r\u00e9\u00e9crire enti\u00e8rement les applications. Elle a \u00e9galement permis \u00e0 Expedia d&#8217;int\u00e9grer facilement des applications Kotlin avec des biblioth\u00e8ques Java et d&#8217;utiliser pleinement l&#8217;\u00e9cosyst\u00e8me de la JVM existant.<\/p>\n<p><strong>Les coroutines Kotlin<\/strong> ont jou\u00e9 un r\u00f4le essentiel dans l&#8217;adoption du langage. Elles permettent aux \u00e9quipes de d\u00e9veloppement d&#8217;\u00e9crire du code enti\u00e8rement asynchrone de mani\u00e8re imp\u00e9rative, et donc de le rendre plus lisible et facile \u00e0 maintenir. Le framework Spring est largement utilis\u00e9 chez Expedia et, \u00e0 partir de la version 5.2, il a permis <a href=\"https:\/\/spring.io\/blog\/2019\/04\/12\/going-reactive-with-spring-coroutines-and-kotlin-flow\" target=\"_blank\" rel=\"noopener\">l&#8217;interop\u00e9rabilit\u00e9 entre WebFlux et les coroutines<\/a> . Cela a chang\u00e9 la donne pour les ing\u00e9nieurs d&#8217;Expedia, en leur permettant d\u00e8s lors d&#8217;utiliser la pile Spring et Reactive de fa\u00e7on plus imp\u00e9rative.<\/p>\n<p>R\u00e9cemment, Expedia a d\u00e9cid\u00e9 d&#8217;adopter GraphQL et de cr\u00e9er une passerelle d&#8217;API unique pour toutes les applications frontend. Pour ce faire, leur \u00e9quipe s&#8217;est appuy\u00e9e sur la puissante biblioth\u00e8que Reflection de Kotlin afin de g\u00e9n\u00e9rer le sch\u00e9ma GraphQL directement \u00e0 partir du code source. L&#8217;ensemble de biblioth\u00e8ques qui en a r\u00e9sult\u00e9, <a href=\"https:\/\/github.com\/ExpediaGroup\/graphql-kotlin\" target=\"_blank\" rel=\"noopener\">graphql-kotlin<\/a>, s&#8217;est av\u00e9r\u00e9 tr\u00e8s utile. Elles ont \u00e9t\u00e9 pass\u00e9es en open source et sont maintenant h\u00e9berg\u00e9es sur GitHub.<\/p>\n<p>Lors de la KotlinConf 2019, Dariusz Kuc et Guillaume Scheibel ont expliqu\u00e9 comment tirer parti de la puissance combin\u00e9e de Spring Boot et de <a href=\"https:\/\/github.com\/ExpediaGroup\/graphql-kotlin\" target=\"_blank\" rel=\"noopener\">graphql-kotlin<\/a>. Voici la vid\u00e9o\u00a0de leur intervention :<\/p>\n<p><iframe loading=\"lazy\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/7YJyPXjLdug?enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>Que ce soit chez JetBrains, Adobe, Expedia ou Atlassian, Kotlin aide les entreprises \u00e0 construire des applications essentielles pour leur performance. Ces t\u00e9moignages montrent que Kotlin est un langage de programmation mature adapt\u00e9 au d\u00e9veloppement d&#8217;applications et de services web. <\/p>\n<p><em>Auteur de l&#8217;article original en anglais : <a href=\"https:\/\/blog.jetbrains.com\/author\/antonarhipov\/\" target=\"_blank\" rel=\"noopener noreferrer\">Anton Arhipov<\/a><\/em><\/p>\n","protected":false},"author":813,"featured_media":94251,"comment_status":"closed","ping_status":"closed","template":"","categories":[4113],"tags":[2028],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/96842"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=96842"}],"version-history":[{"count":1,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/96842\/revisions"}],"predecessor-version":[{"id":96843,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/96842\/revisions\/96843"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/94251"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=96842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=96842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=96842"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=96842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}