{"id":2738,"date":"2018-12-04T15:13:11","date_gmt":"2018-12-04T14:13:11","guid":{"rendered":"https:\/\/blog.alwaysdata.com\/?p=2738"},"modified":"2018-12-06T09:48:59","modified_gmt":"2018-12-06T08:48:59","slug":"decouvrez-notre-interface-de-planification-tout-beau-tout-chaud","status":"publish","type":"post","link":"https:\/\/blog.alwaysdata.com\/fr\/2018\/12\/04\/decouvrez-notre-interface-de-planification-tout-beau-tout-chaud\/","title":{"rendered":"D\u00e9couvrez notre interface de planification, tout beau tout&nbsp;chaud&nbsp;!"},"content":{"rendered":"<p>Durant cette fin d\u2019ann\u00e9e, nous mettons en production nos d\u00e9veloppements de ces derniers mois arriv\u00e9s \u00e0&nbsp;maturit\u00e9. Nous avons quelques belles fonctionnalit\u00e9s qui devraient vous permettre d\u2019appr\u00e9cier encore plus votre exp\u00e9rience chez <em>alwaysdata<\/em>.<\/p>\n<figure class=\"embed-media__giphy\" style=\"width:65%; padding-bottom:calc(65% * (263 + 12) \/ (500 + 12))\">\n    <video id=\"giphy-${token}\" autoplay loop muted playsinline>\n        <source src=\"https:\/\/media.giphy.com\/media\/3CZ5z93Ux5CWQ\/giphy.mp4\" type=\"video\/mp4\">\n        <img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/3CZ5z93Ux5CWQ\/giphy.gif\" alt=\" @Giphy\">\n    <\/video>\n<\/figure>\n<hr>\n<p>Les Web apps ou services ont parfois besoin d\u2019ex\u00e9cuter des t\u00e2ches p\u00e9riodiquement. Qu\u2019il s\u2019agisse d\u2019un blog <em>WordPress<\/em> pour lequel vous souhaitez passer par un planificateur syst\u00e8me, d\u2019un <em>broker<\/em> pour lequel vous souhaiteriez purger la queue de messages r\u00e9guli\u00e8rement, ou votre lecteur RSS qu\u2019il vous faut rafra\u00eechir \u00e0&nbsp;heure fixe, il existe une grande quantit\u00e9 de cas d\u2019usages.<\/p>\n<p>Le point commun de tous ces services est la n\u00e9cessit\u00e9 d\u2019ex\u00e9cuter des commandes, ou d\u2019appeler des URLs, sans aucune interaction utilisateur. Pour g\u00e9rer ce point, vous devez enregistrer une <em>t\u00e2che planifi\u00e9e<\/em>.<\/p>\n<p>Notre plateforme s\u2019appuie sur <a href=\"https:\/\/www.debian.org\/\">Debian<\/a>, sur laquelle vous b\u00e9n\u00e9ficiez d\u2019un acc\u00e8s complet \u00e0&nbsp;votre compte utilisateur Unix. Vous pouvez donc y&nbsp;renseigner des t\u00e2ches \u00e0&nbsp;ex\u00e9cuter en \u00e9ditant la <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Cron\">crontab<\/a> de votre compte avec la commande <code>crontab -e<\/code>.<\/p>\n<p>Ce n\u2019\u00e9tait pas suffisant pour nous. Deux raisons \u00e0&nbsp;cela. La premi\u00e8re, c\u2019est que cette situation partage l\u2019administration des actions li\u00e9es \u00e0&nbsp;votre compte en deux parties&nbsp;: une dans l\u2019interface de votre compte, et les t\u00e2ches dans votre compte Unix. La seconde, c\u2019est que la syntaxe de crontab est pour le moins indigeste.<\/p>\n<figure class=\"embed-media__giphy\" style=\"width:65%; padding-bottom:calc(65% * (281 + 12) \/ (500 + 12))\">\n    <video id=\"giphy-${token}\" autoplay loop muted playsinline>\n        <source src=\"https:\/\/media.giphy.com\/media\/l2JhpjWPccQhsAMfu\/giphy.mp4\" type=\"video\/mp4\">\n        <img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/l2JhpjWPccQhsAMfu\/giphy.gif\" alt=\" @Giphy\">\n    <\/video>\n<\/figure>\n<p>Le point bonus<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_1');\" onkeypress=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_1');\"><sup id=\"footnote_plugin_tooltip_2738_1_1\" class=\"footnote_plugin_tooltip_text\">1)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2738_1_1\" class=\"footnote_tooltip\"><\/span><\/span>, c\u2019est qu\u2019une t\u00e2che planifi\u00e9e <em>via<\/em> <em>crontab<\/em> est enregistr\u00e9e et ex\u00e9cut\u00e9e sur un serveur qui n\u2019est pas le serveur qui ex\u00e9cute vos sites Web<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_2');\" onkeypress=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_2');\"><sup id=\"footnote_plugin_tooltip_2738_1_2\" class=\"footnote_plugin_tooltip_text\">2)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2738_1_2\" class=\"footnote_tooltip\"><\/span><\/span>. Lorsque nous d\u00e9pla\u00e7ons vos comptes d\u2019un serveur \u00e0&nbsp;l\u2019autre<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_3');\" onkeypress=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_3');\"><sup id=\"footnote_plugin_tooltip_2738_1_3\" class=\"footnote_plugin_tooltip_text\">3)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2738_1_3\" class=\"footnote_tooltip\"><\/span><\/span> nous devons \u00e9galement tenir compte des \u00e9ventuelles tables de t\u00e2ches. Tout ceci nuit \u00e0&nbsp;la simplicit\u00e9 et \u00e0&nbsp;la performance de la plateforme.<\/p>\n<p>Nous avons donc ajout\u00e9 le <a href=\"https:\/\/admin.alwaysdata.com\/job\/\">support des t\u00e2ches planifi\u00e9es<\/a> dans votre interface de gestion&nbsp;!<\/p>\n<figure class=\"embed-media__ad__medium embed-media__ad__\">\n    <img decoding=\"async\" src=\"https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/12\/Administration-panel_list-task_FR.png\" alt=\"Interface d'administration : liste des t\u00e2ches planifi\u00e9es\" class=\"aligncenter size-full wp-image-\">\n    <figcaption>Interface d\u2019administration&nbsp;: liste des t\u00e2ches planifi\u00e9es<\/figcaption>\n<\/figure>\n<p>Pour planifier une nouvelle t\u00e2che, rendez-vous dans la <a href=\"https:\/\/admin.alwaysdata.com\/job\/\">nouvelle section de l\u2019interface d\u2019administration<\/a> et ajoutez une&nbsp;t\u00e2che.<\/p>\n<p>Vous aurez deux types d\u2019informations \u00e0&nbsp;fournir&nbsp;:<\/p>\n<ul>\n<li>La (les) commande(s) que vous souhaitez ex\u00e9cuter, ou les URLs que vous souhaitez requ\u00eater&nbsp;; si vous avez besoin d\u2019un <code>ping<\/code> vers une ou plusieurs URLs pour d\u00e9clencher des actions sur des services distants, renseignez-les simplement&nbsp;; sinon, entrez la ligne de commande \u00e0&nbsp;ex\u00e9cuter&nbsp;;<\/li>\n<li>La p\u00e9riodicit\u00e9 de votre t\u00e2che&nbsp;; vous pouvez sp\u00e9cifiez une heure fixe, ou un interval&nbsp;; dans le cas o\u00f9 ces options ne seraient pas assez flexibles, vous pouvez revenir \u00e0&nbsp;une <a href=\"http:\/\/man7.org\/linux\/man-pages\/man5\/crontab.5.html\">syntaxe crontab standard<\/a> pour programmer l\u2019ex\u00e9cution.<\/li>\n<\/ul>\n<figure class=\"embed-media__ad__medium embed-media__ad__\">\n    <img decoding=\"async\" src=\"https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/12\/Administration-panel_create-task_FR.png\" alt=\"Interface d'administration : cr\u00e9er une t\u00e2che planifi\u00e9e\" class=\"aligncenter size-full wp-image-\">\n    <figcaption>Interface d\u2019administration&nbsp;: cr\u00e9er une t\u00e2che planifi\u00e9e<\/figcaption>\n<\/figure>\n<p>C\u2019est tout. Votre t\u00e2che est enregistr\u00e9e et son ex\u00e9cution sera g\u00e9r\u00e9e par la plateforme directement.<\/p>\n<p>Concernant l\u2019exemple WordPress pr\u00e9c\u00e9demment mentionn\u00e9, vous pouvez enregistrer une t\u00e2che <code>php $HOME\/wordpress\/htdocs\/wp cron event run --due-now<\/code> lanc\u00e9e toutes les dix minutes<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_4');\" onkeypress=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_4');\"><sup id=\"footnote_plugin_tooltip_2738_1_4\" class=\"footnote_plugin_tooltip_text\">4)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2738_1_4\" class=\"footnote_tooltip\"><\/span><\/span>.<\/p>\n<p>Toutes les fonctionnalit\u00e9s du planificateur sont \u00e9galement disponibles <em>via<\/em> notre API, pour vous permettre d\u2019enregistrer une t\u00e2che automatiquement depuis le code de votre application.<\/p>\n<p>C\u00f4t\u00e9 technique, nous n\u2019utilisons pas une impl\u00e9mentation existante d\u2019un d\u00e9mon <em>cron<\/em>, mais nous nous appuyons sur notre propre d\u00e9mon&nbsp;: <em>aljob<\/em>. Ceci pour deux raisons&nbsp;:<\/p>\n<ol>\n<li>Les t\u00e2ches planifi\u00e9es ne sont pas ex\u00e9cut\u00e9es \u00e0&nbsp;l\u2019heure pr\u00e9cise, dans l\u2019interval de la minute concern\u00e9e&nbsp;; par exemple, une t\u00e2che planifi\u00e9e \u00e0&nbsp;00:00 sera ex\u00e9cut\u00e9e quelque part entre 00:00:00 et 00:00:59. Quand des centaines de t\u00e2ches sont lanc\u00e9es \u00e0&nbsp;minuit par des centaines d\u2019utilisateurs<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_5');\" onkeypress=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_5');\"><sup id=\"footnote_plugin_tooltip_2738_1_5\" class=\"footnote_plugin_tooltip_text\">5)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2738_1_5\" class=\"footnote_tooltip\"><\/span><\/span>, ce syst\u00e8me \u00e9vite une surcharge temporaire et un ralentissement des serveurs en lissant la pile d\u2019appels&nbsp;;<\/li>\n<li>Si vous ex\u00e9cutez r\u00e9guli\u00e8rement (toutes les dix minutes par exemple) une t\u00e2che longue, notre d\u00e9mon est capable de d\u00e9tecter si le lancement pr\u00e9c\u00e9dent est encore en cours d\u2019ex\u00e9cution, et de sauter le lancement du nouvel appel dans ce cas&nbsp;; ce cas pr\u00e9cis nous permet d\u2019\u00e9viter les surcharges de traitement et des <em>race conditions<\/em> dans l\u2019ex\u00e9cution de vos commandes asynchrones.<\/li>\n<\/ol>\n<hr>\n<p>Vous voulez un usage amusant&nbsp;? Rien ne vous oblige \u00e0&nbsp;installer un service Web pour b\u00e9n\u00e9ficier des t\u00e2ches planifi\u00e9es. Voici une commande que j\u2019ai programm\u00e9e quotidiennement&nbsp;:<\/p>\n<pre><code>curl -L \"https:\/\/duckduckgo.com\/news.js?l=fr-fr&amp;o=json&amp;q=google&amp;vqd=3-64264753228138754347320549738585677647-267411849122617233633307047978420270659\" | jq '.results | to_entries | .[].value | \"\\(.title) [\\(.url)] (\\(.relative_time))\"' | mail -s \"Daily news about Google\" m4dz@alwaysdata.com\n<\/code><\/pre>\n<p>Elle ex\u00e9cute un appel \u00e0&nbsp;l\u2019API d\u2019actualit\u00e9s de <a href=\"https:\/\/duckduckgo.com\/\">DuckDuckGo<\/a> pour obtenir les derniers articles relatifs \u00e0&nbsp;Google<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_6');\" onkeypress=\"footnote_moveToReference_2738_1('footnote_plugin_reference_2738_1_6');\"><sup id=\"footnote_plugin_tooltip_2738_1_6\" class=\"footnote_plugin_tooltip_text\">6)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2738_1_6\" class=\"footnote_tooltip\"><\/span><\/span>, filtre la r\u00e9ponse JSON pour obtenir pour chaque article son titre, son URL, et sa date. Le tout est compil\u00e9 vers la sortie texte et m\u2019est envoy\u00e9 par mail, ce qui me permet d\u2019obtenir ma petite revue de presse sur tout ce qui touche \u00e0&nbsp;Google, dans ma boite mail tous les matins.<\/p>\n<figure class=\"embed-media__giphy\" style=\"width:65%; padding-bottom:calc(65% * (268 + 12) \/ (350 + 12))\">\n    <video id=\"giphy-${token}\" autoplay loop muted playsinline>\n        <source src=\"https:\/\/media.giphy.com\/media\/HXsCVwcVhFx3q\/giphy.mp4\" type=\"video\/mp4\">\n        <img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/HXsCVwcVhFx3q\/giphy.gif\" alt=\" @Giphy\">\n    <\/video>\n<\/figure>\n<hr>\n<p>Les <em>t\u00e2ches planifi\u00e9es<\/em> sont disponibles dans votre interface d\u2019administration d\u00e8s \u00e0&nbsp;pr\u00e9sent. Nous retirerons le support des <em>crontab<\/em> prochainement pour les <a href=\"https:\/\/www.alwaysdata.com\/fr\/pricing\/#shared\">h\u00e9bergements mutualis\u00e9s<\/a>. Si vous avez des t\u00e2ches dans vos tables de <em>cron<\/em>, elles seront automatiquement report\u00e9es dans la nouvelle interface. Les <a href=\"https:\/\/www.alwaysdata.com\/fr\/pricing\/#vps\">VPS<\/a> et les <a href=\"https:\/\/www.alwaysdata.com\/fr\/pricing\/#dedicated\">serveurs d\u00e9di\u00e9s<\/a> conserveront les deux syst\u00e8mes ind\u00e9pendamment, au&nbsp;choix.<\/p>\n<p>Si vous identifiez des am\u00e9liorations \u00e0&nbsp;apporter \u00e0&nbsp;ce service, n\u2019h\u00e9sitez pas \u00e0&nbsp;nous les remonter. Nous sommes \u00e9galement curieux de conna\u00eetre vos cas d\u2019usages des t\u00e2ches planifi\u00e9es, surprenez-nous dans les commentaires&nbsp;!<\/p>\n<p>D\u2019autres fonctionnalit\u00e9s arrivent tr\u00e8s rapidement en production. Surveillez le blog et notre <a href=\"https:\/\/twitter.com\/alwaysdata\/status\/1068886689492299777\">fil Twitter de l\u201d#avent<\/a>, des surprises vous attendent.<\/p>\n<div class=\"speaker-mute footnotes_reference_container\"> <div class=\"footnote_container_prepare\"><p><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_label pointer\" onclick=\"footnote_expand_collapse_reference_container_2738_1();\">Notes<\/span><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_collapse_button\" style=\"display: none;\" onclick=\"footnote_expand_collapse_reference_container_2738_1();\">[<a id=\"footnote_reference_container_collapse_button_2738_1\">+<\/a>]<\/span><\/p><\/div> <div id=\"footnote_references_container_2738_1\" style><table class=\"footnotes_table footnote-reference-container\"><caption class=\"accessibility\">Notes<\/caption> <tbody> \n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2738_1('footnote_plugin_tooltip_2738_1_1');\"><a id=\"footnote_plugin_reference_2738_1_1\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>1<\/a><\/th> <td class=\"footnote_plugin_text\">et la raison technique<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2738_1('footnote_plugin_tooltip_2738_1_2');\"><a id=\"footnote_plugin_reference_2738_1_2\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>2<\/a><\/th> <td class=\"footnote_plugin_text\">nos serveurs SSH et HTTP sont des instances s\u00e9par\u00e9es<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2738_1('footnote_plugin_tooltip_2738_1_3');\"><a id=\"footnote_plugin_reference_2738_1_3\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>3<\/a><\/th> <td class=\"footnote_plugin_text\">ce qui se produit quotidiennement de fa\u00e7on transparente dans une infrastructure comme celle d\u2019<em>alwaysdata<\/em><\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2738_1('footnote_plugin_tooltip_2738_1_4');\"><a id=\"footnote_plugin_reference_2738_1_4\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>4<\/a><\/th> <td class=\"footnote_plugin_text\">n\u2019oubliez pas de d\u00e9sactiver le faux-cron embarqu\u00e9 de votre instance WordPress en ajoutant la directive <code>define('DISABLE_WP_CRON', true);<\/code> dans le fichier wp-config.php<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2738_1('footnote_plugin_tooltip_2738_1_5');\"><a id=\"footnote_plugin_reference_2738_1_5\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>5<\/a><\/th> <td class=\"footnote_plugin_text\">ce qui est le cas dans nos instances partag\u00e9es<\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2738_1('footnote_plugin_tooltip_2738_1_6');\"><a id=\"footnote_plugin_reference_2738_1_6\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>6<\/a><\/th> <td class=\"footnote_plugin_text\">oui, j\u2019aime bien les troller<\/td><\/tr>\n\n <\/tbody> <\/table> <\/div><\/div><script type=\"text\/javascript\"> function footnote_expand_reference_container_2738_1() { jQuery('#footnote_references_container_2738_1').show(); jQuery('#footnote_reference_container_collapse_button_2738_1').text('\u2212'); } function footnote_collapse_reference_container_2738_1() { jQuery('#footnote_references_container_2738_1').hide(); jQuery('#footnote_reference_container_collapse_button_2738_1').text('+'); } function footnote_expand_collapse_reference_container_2738_1() { if (jQuery('#footnote_references_container_2738_1').is(':hidden')) { footnote_expand_reference_container_2738_1(); } else { footnote_collapse_reference_container_2738_1(); } } function footnote_moveToReference_2738_1(p_str_TargetID) { footnote_expand_reference_container_2738_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } } function footnote_moveToAnchor_2738_1(p_str_TargetID) { footnote_expand_reference_container_2738_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } }<\/script>","protected":false},"excerpt":{"rendered":"<p>Vous avez besoin d\u2019ex\u00e9cutez r\u00e9guli\u00e8rement des t\u00e2ches sur votre compte&nbsp;? Plus besoin de crontab ou de service tiers, nous vous avons concoct\u00e9 l\u2019outil ultime&nbsp;!<\/p>\n","protected":false},"author":12,"featured_media":2717,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[230],"tags":[154,253],"class_list":["post-2738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-fr","tag-api-fr","tag-tasks-fr"],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts\/2738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/comments?post=2738"}],"version-history":[{"count":0,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts\/2738\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/media\/2717"}],"wp:attachment":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/media?parent=2738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/categories?post=2738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/tags?post=2738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}