{"id":1572,"date":"2022-12-14T17:47:06","date_gmt":"2022-12-14T16:47:06","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1572"},"modified":"2023-07-31T14:04:54","modified_gmt":"2023-07-31T12:04:54","slug":"java-20-quoi-de-neuf","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-20-quoi-de-neuf\/","title":{"rendered":"Java 20 : quoi de neuf ?"},"content":{"rendered":"<p>Maintenant que Java 20 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs.<\/p>\n<p>Cet article fait partie d\u2019une suite d\u2019article sur les <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/tag\/whatsnew\/\">nouveaut\u00e9s des derni\u00e8res versions de Java<\/a>, pour ceux qui voudraient les lire en voici les liens : <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-19-quoi-de-neuf\/\">Java 19<\/a>, <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-18-quoi-de-neuf\/\">Java 18<\/a>, <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-17-quoi-de-neuf\/\">Java 17<\/a>, <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-16-quoi-de-neuf\/\">Java 16<\/a>, <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-15-quoi-de-neuf\/\">Java 15<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-14-quoi-de-neuf\/\">Java 14<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-13-quoi-de-neuf\/\">Java 13<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-12-quoi-de-neuf\/\">Java 12<\/a>, <a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-11-quoi-de-neuf\/\">Java 11<\/a>,\u00a0<a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-10-quoi-de-neuf\/\">Java 10,<\/a>\u00a0et\u00a0<a href=\"http:\/\/www.loicmathieu.fr\/wordpress\/informatique\/les-nouveautes-de-java-9-pour-les-developeurs\/\">Java 9<\/a>.<\/p>\n<p>Force est de constater qu&rsquo;il n&rsquo;y a pas grand-chose de nouveau dans cette release. Des 6 Java Enhancement Proposals (JEP) qui ont \u00e9t\u00e9 d\u00e9livr\u00e9es, une seule porte sur une nouvelle API du langage : JEP 429 &#8211; Scoped Values, les autres sont des it\u00e9rations de fonctionnalit\u00e9s existantes.<\/p>\n<h2>JEP 429 &#8211; Scoped Values<\/h2>\n<p>La JEP 429 introduit les <strong>Scoped Values<\/strong> qui permettent le partage de donn\u00e9es immuables au sein et entre les threads.<\/p>\n<p>Jusqu&rsquo;ici, pour partager une donn\u00e9e au sein d&rsquo;un thread, on utilisait des Thread Locals. Ceux-ci sont mutables et n\u00e9cessitent une structure de donn\u00e9e complexe dont le co\u00fbt n&rsquo;est pas en accord avec les virtual threads qui sont l\u00e9gers et peu ch\u00e8re \u00e0 construire. De plus, ils \u00e9taient parfois la cause de bug, car leur utilisation n&rsquo;\u00e9tait pas forc\u00e9ment bien comprise.<\/p>\n<p>Le support des thread locals avec Loom \u00e9tant probl\u00e9matique, une nouvelle mani\u00e8re de partager de la donn\u00e9e entre thread a \u00e9t\u00e9 propos\u00e9e qui est immuable et s&rsquo;interface mieux avec l&rsquo;API Structured Concurrency : les Scoped Values.<\/p>\n<p>Voici un exemple tr\u00e8s basique :<\/p>\n<pre>\nprivate static final ScopedValue USERNAME = ScopedValue.newInstance();\n\nScopedValue.where(USERNAME, \"duke\") \/\/ bind a value to the scope\n    \/\/ start a thread that could access this value\n    .run(() -&gt; System.out.println(\"User: \" + USERNAME.get()));\n<\/pre>\n<p>Il est aussi possible d&rsquo;appeler <code>.call()<\/code> avec un <code>Callable<\/code> pour retourner une valeur.<\/p>\n<p>A la fin de l&rsquo;appel de la m\u00e9thode <code>run()<\/code>, le scoped value n&rsquo;aura plus de valeur pour le thread, ce qui \u00e9vite tout risque de memory leak.<\/p>\n<p>Plus d\u2019information dans la <a href=\"https:\/\/openjdk.java.net\/jeps\/429\" rel=\"noopener\" target=\"_blank\">JEP 429<\/a>.<\/p>\n<h2>JEP-432 &#8211; Record Patterns (Second Preview)<\/h2>\n<p>La seconde preview des Record Patterns contient des changements importants, elle m\u00e9rite donc un paragraphe d\u00e9di\u00e9 pour les pr\u00e9senter.<\/p>\n<p>Si vous ne connaissez pas encore les Record Patterns, vous pouvez vous r\u00e9f\u00e9rer \u00e0 mon article <a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/java-19-quoi-de-neuf\/\" rel=\"noopener\" target=\"_blank\">Java 19 : Quoi de neuf ?<\/a><\/p>\n<p>Trois changements ont \u00e9t\u00e9 faits :<\/p>\n<ul><li>Support de l&rsquo;inf\u00e9rence du type param\u00e9tr\u00e9 pour les patterns de record generic.<\/li>\n\n<li>Support des record patterns dans les boucles for (enhanced for statements).<\/li>\n\n<li>Suppression du support des patterns de record nomm\u00e9s.<\/li>\n<\/ul>\n<p>Le support de l&rsquo;inf\u00e9rence du type param\u00e9tr\u00e9 pour les patterns de record generic permet d\u2019omettre le type param\u00e9tr\u00e9 dans un record pattern si celui-ci peut \u00eatre inf\u00e9r\u00e9 par le compilateur. \u00c9tonnamment, l&rsquo;op\u00e9rateur diamond () n&rsquo;a pas \u00e9t\u00e9 utilis\u00e9, on peut simplement omettre le type param\u00e9tr\u00e9.<\/p>\n<pre>\nrecord Box(T t) {}\n\nstatic void test(Box bo) {\n    if (bo instanceof Box(var s)) { \/\/ Inferred to be Box(var s)\n        System.out.println(\"String \" + s);\n    }\n}\n<\/pre>\n<p>Le support des record patterns dans les boucles for (enhanced for statements) permet l&rsquo;acc\u00e8s direct aux composants d&rsquo;un record dans le corps d&rsquo;une boucle for.<\/p>\n<pre>\nrecord Point(int x, int y) {}\n\nstatic void dump(Point[] pointArray) {\n    for (Point(var x, var y) : pointArray) { \/\/ Record Pattern in header!\n        System.out.println(\"(\" + x + \", \" + y + \")\");\n    }\n}\n<\/pre>\n<p>Avant la JEP 432, il \u00e9tait possible de nommer un pattern de record pour, en quelque sorte, faire du pattern matching sur le record et ses composants en m\u00eame temps.<\/p>\n<pre>\nrecord Point(int x, int y) {}\n\nstatic void noMorePossible(Point p) {\n    if(p instanceof Point(int x, int y) p) {\n        System.out.println(\"x=\" + x + \" y=\" + y + \"for the point \" + p);\n    }\n}\n<\/pre>\n<p>Cette possibilit\u00e9 a \u00e9t\u00e9 supprim\u00e9e, le code ci-dessus g\u00e9n\u00e9rera maintenant une erreur \u00e0 la compilation. On ne sait pas encore si c&rsquo;est d\u00e9finitif ou si elle pourrait revenir prochainement.<\/p>\n<p>Plus d\u2019information dans la <a href=\"https:\/\/openjdk.java.net\/jeps\/432\" rel=\"noopener\" target=\"_blank\">JEP 432<\/a>.<\/p>\n<h2>Les fonctionnalit\u00e9s qui restent en preview<\/h2>\n<p>Les fonctionnalit\u00e9s suivantes restent en preview (ou en incubator module).<\/p>\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/433\" rel=\"noopener\" target=\"_blank\">JEP-433<\/a> &#8211; Pattern Matching for switch (Fourth Preview) : changement de l&rsquo;exception lanc\u00e9e par un switch d&rsquo;une enum dans le cas o\u00f9 le switch est cens\u00e9 \u00eatre exhaustif (un case pour chaque valeur de l&rsquo;enum) mais ne l&rsquo;est pas au runtime. L&rsquo;exception \u00e9tait de type <code>IncompatibleClassChangeError<\/code> et sera maintenant de type <code>MatchException<\/code>.<\/li>\n\n<li><a href=\"https:\/\/openjdk.java.net\/jeps\/434\" rel=\"noopener\" target=\"_blank\">JEP-434<\/a> &#8211; Foreign Function &amp; Memory API (Second Preview) : \u00e9volution mineure de l&rsquo;API pour en faciliter l&rsquo;utilisation.<\/li>\n\n<li><a href=\"https:\/\/openjdk.java.net\/jeps\/436\" rel=\"noopener\" target=\"_blank\">JEP-436<\/a> &#8211; Virtual Threads (Second Preview) : pas de changement significatif, la fonctionnalit\u00e9 reste en preview pour avoir plus de retour sur son utilisation.<\/li>\n\n<li><a href=\"https:\/\/openjdk.java.net\/jeps\/437\" rel=\"noopener\" target=\"_blank\">JEP-437<\/a> &#8211; Structured Concurrency (Second Incubator) : ajout de l&rsquo;h\u00e9ritage des scoped values (JEP 429)<\/li>\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/438\" title=\"JEP 438\" rel=\"noopener\" target=\"_blank\">JEP 438<\/a> &#8211; Vector API (Fifth Incubator) : petits bugfixes et am\u00e9lioration de performance.<\/li>\n<\/ul>\n<p>Pour les d\u00e9tails sur celles-ci, vous pouvez vous r\u00e9f\u00e9rer \u00e0 mes articles pr\u00e9c\u00e9dents.<\/p>\n<h2>Divers<\/h2>\n<p>Divers ajouts au JDK :<\/p>\n<ul><li>Tous les constructeurs de la classe URL ont \u00e9t\u00e9 d\u00e9pr\u00e9ci\u00e9s, il faut pr\u00e9f\u00e9rer la classe URI \u00e0 la classe URL et, si n\u00e9cessaire, utiliser <code>URI.toURL()<\/code> pour construire un objet de type URL depuis une URI.<\/li>\n\n<li>Matcher.hasMatch(), MatchResult.end(String), MatchResult.group(String), MatchResult.start(String)<\/li>\n\n<li><code>Float.float16ToFloat(short)<\/code> : Renvoie la valeur flottante la plus proche de la valeur num\u00e9rique de l&rsquo;argument, qui est une valeur binary16 \u00e0 virgule flottante encod\u00e9e dans un short.<\/li>\n\n<li><code>Float.floatToFloat16(float)<\/code> : Renvoie la valeur binary16 \u00e0 virgule flottante, encod\u00e9e dans le short le plus proche de l&rsquo;argument.<\/li>\n<\/ul>\n<p>La totalit\u00e9 des nouvelles API du JDK 20 peuvent \u00eatre trouv\u00e9es dans <a href=\"https:\/\/javaalmanac.io\/jdk\/20\/apidiff\/19\/\" rel=\"noopener\" target=\"_blank\">The Java Version Almanac \u2013 New APIs in Java 20<\/a>.<\/p>\n<h2>Des changements internes, de la performance, et de la s\u00e9curit\u00e9<\/h2>\n<p>Chaque nouvelle version du JDK apporte ses optimisations de performances (entre autres GC et m\u00e9thodes intrisics), et de s\u00e9curit\u00e9. Celle-ci ne fait pas d\u00e9faut.<\/p>\n<p>C\u00f4t\u00e9 performance, on peut noter plusieurs am\u00e9liorations dans la gestion des I\/O via les classes <code>BufferedInputStream<\/code>, <code>PushbackInputStream<\/code>, <code>SequenceInputStream<\/code> et <code>ZipInputStream<\/code>.<\/p>\n<p>Thomas Schatzl a contribu\u00e9 une am\u00e9lioration du garbage collector G1 qui n&rsquo;utilise maintenant plus qu&rsquo;un seul bitmap pour stocker les informations de liveness des objets de la heap. Ce changement fait baisser la taille de la m\u00e9moire native utilis\u00e9e par G1 d&rsquo;exactement 1.5% de la taille de la heap. Plus d&rsquo;information dans cet article qui contient aussi un rappel assez complet sur les diff\u00e9rentes phases de G1 : <a href=\"https:\/\/tschatzl.github.io\/2022\/08\/04\/concurrent-marking.html\" rel=\"noopener\" target=\"_blank\">Concurrent Marking in G1<\/a>. D&rsquo;autres changements ont \u00e9t\u00e9 fait c\u00f4t\u00e9 Garbage Collector, vous pouvez les retrouver dans cet article de Thomas Schatzl : <a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\" rel=\"noopener\" target=\"_blank\">JDK 20 G1\/Parallel\/Serial GC changes<\/a>.<\/p>\n<p>C\u00f4t\u00e9 s\u00e9curit\u00e9, le focus a \u00e9t\u00e9 mis sur le renforcement de la s\u00e9curit\u00e9 de la JVM, les performance des algorithmes de cryptographie, ainsi que l&rsquo;ajout d&rsquo;\u00e9v\u00e8nements JFR pour le monitoring de la s\u00e9curit\u00e9. Vous pouvez vous r\u00e9f\u00e9rer \u00e0 l&rsquo;article de Sean Mullan pour une liste exhaustive des changements de s\u00e9curit\u00e9 inclus cette version : <a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\" rel=\"noopener\" target=\"_blank\">JDK 20 Security Enhancements<\/a>.<\/p>\n<h2>Conclusion<\/h2>\n<p>Cette nouvelle version apporte quelques changements mineurs au pattern matching, et quelques am\u00e9liorations dans la programmation concurrente via la nouvelle API Scoped Values. Donc tr\u00e8s peu de choses par rapport aux pr\u00e9c\u00e9dentes versions. La prochaine version sera aussi la prochaine LTS, on esp\u00e8re que pour celle-ci, une partie des JEP qui sont en preview depuis litt\u00e9ralement des ann\u00e9es seront promues stable.\n<\/p>","protected":false},"excerpt":{"rendered":"<p>Maintenant que Java 20 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui voudraient les lire en voici les liens : Java 19, Java 18, Java 17, Java 16, Java 15, Java 14, Java 13, Java 12, Java 11,\u00a0Java 10,\u00a0et\u00a0Java 9. Force est&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-20-quoi-de-neuf\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[9],"tags":[11,209,163],"class_list":["post-1572","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-java","tag-java20","tag-whatsnew"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":856,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-next\/","url_meta":{"origin":1572,"position":0},"title":"Java.Next","author":"admin","date":"mercredi 31 octobre 2018","format":false,"excerpt":"Ma premi\u00e8re contribution au blog de Zenika est un article qui parle du futur (ou du pr\u00e9sent) de Java et des changements pour les d\u00e9veloppeurs dans les versions 9, 10 et 11. La gouvernance de Java y est aussi abord\u00e9. Cet article reprend et r\u00e9sume les articles que j'ai pr\u00e9c\u00e9demment\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":829,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-11-quoi-de-neuf\/","url_meta":{"origin":1572,"position":1},"title":"Java 11  : quoi de neuf ?","author":"admin","date":"lundi  1 octobre 2018","format":false,"excerpt":"Maintenant que Java 11 est sorti, c'est le moment de faire le tour des fonctionnalit\u00e9s qu'apporte cette version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res version de Java, pour ceux qui voudraient les lires en voici les liens : Java 10,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":712,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/demarrage-jvm-8-vs-9\/","url_meta":{"origin":1572,"position":2},"title":"D\u00e9marrage JVM 8 vs 9","author":"admin","date":"jeudi 31 ao\u00fbt 2017","format":false,"excerpt":"Introduction En parcourant la mailing liste d'open JDK (core-lib-dev) j'ai vu plusieurs threads de mail \u00e0 propos d'optimisation de temps de d\u00e9marrage et d'occupation m\u00e9moire d'une JVM \"minimale\". Ce travail a \u00e9t\u00e9 r\u00e9alis\u00e9 en grande partie par Claes Redestad (Oracle) lors du d\u00e9veloppement de Java 9. J'ai donc d\u00e9cid\u00e9 de\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":722,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-10-quoi-de-neuf\/","url_meta":{"origin":1572,"position":3},"title":"Java 10 : quoi de neuf ?","author":"admin","date":"lundi 26 mars 2018","format":false,"excerpt":"Maintenant que Java 10 est sorti, il est temps de se pencher sur les nouveaut\u00e9s de cette version. Comme pour mon pr\u00e9c\u00e9dent article sur java 9, je vais me pencher principalement sur les changements qui impacterons les d\u00e9veloppeurs utilisant Java en laissant de c\u00f4t\u00e9 les changements internes\/anecdotique\/sur des API peu\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1112,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-15-quoi-de-neuf\/","url_meta":{"origin":1572,"position":4},"title":"Java 15 : quoi de neuf ?","author":"admin","date":"jeudi  2 juillet 2020","format":false,"excerpt":"Maintenant que Java 15 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1839,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-vers-une-integrite-par-defaut-de-la-jvm\/","url_meta":{"origin":1572,"position":5},"title":"Java : vers une int\u00e9grit\u00e9 par d\u00e9faut de la JVM","author":"admin","date":"mardi  4 f\u00e9vrier 2025","format":false,"excerpt":"Cet article est paru pour la premi\u00e8re fois dans le magazine Programmez! Hors s\u00e9rie #16. La Machine Virtuelle Java (JVM) est un environnement d'ex\u00e9cution qui permet \u00e0 des programmes \u00e9crits en Java (ou dans d'autres langages compil\u00e9s en bytecode Java) de s'ex\u00e9cuter sur diff\u00e9rents syst\u00e8mes d'exploitation et architectures mat\u00e9rielles. D\u00e8s\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1572"}],"version-history":[{"count":23,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1572\/revisions"}],"predecessor-version":[{"id":1694,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1572\/revisions\/1694"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}