{"id":789,"date":"2019-10-18T23:16:37","date_gmt":"2019-10-18T22:16:37","guid":{"rendered":"https:\/\/louis.hatier.me\/blog\/?p=789"},"modified":"2019-11-21T15:34:17","modified_gmt":"2019-11-21T14:34:17","slug":"rabbitmq-et-symfony-4-introduction","status":"publish","type":"post","link":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/","title":{"rendered":"RabbitMQ et Symfony 4 : introduction"},"content":{"rendered":"<p><a href=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq.png\" data-rel=\"lightbox-gallery-Qu72FKSc\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-793\" src=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png\" alt=\"Logo RabbitMQ\" width=\"300\" height=\"112\" srcset=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png 300w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq.png 725w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>RabbitMQ est un outil int\u00e9ressant qui permet \u00e0 une application ou site web, de se d\u00e9charger de certaines t\u00e2ches qui peuvent se faire de mani\u00e8re asynchrones et\/ou par d\u2019autres briques applicatives.<\/p>\n<p>Son fonctionnement comprend quelques termes nouveaux :<\/p>\n<p>\u00ab\u00a0RabbitMQ est un message broker, son r\u00f4le est de transporter et router les messages depuis les publishers vers les consumers. Le broker utilise les exchanges et bindings pour savoir si il doit d\u00e9livrer, ou non, le message dans la queue.\u00a0\u00bb<\/p>\n<p><!--more--><\/p>\n<p>Pour en rajouter, voici la d\u00e9finition du protocole utilis\u00e9 par RabbitMQ :<\/p>\n<blockquote><p>AMQP (Advanced Message Queueing Protocol) is a network protocol that can deliver messages from one application endpoint to another application endpoint. It does not care about the platform or language of said applications, as long as they support AMQP.<\/p><\/blockquote>\n<p>Avec le petit sch\u00e9ma qui va bien :<\/p>\n<p><a href=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/exchanges-topic-fanout-direct.png\" data-rel=\"lightbox-gallery-Qu72FKSc\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-792\" src=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/exchanges-topic-fanout-direct-1024x625.png\" alt=\"Exchanges Topic Fanout Direct\" width=\"620\" height=\"378\" srcset=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/exchanges-topic-fanout-direct-1024x625.png 1024w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/exchanges-topic-fanout-direct-300x183.png 300w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/exchanges-topic-fanout-direct-768x469.png 768w, https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/exchanges-topic-fanout-direct.png 1206w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>Pour prendre un exemple concret, sur un site e-commerce le passage d\u2019une commande peut engendrer un certain nombre d\u2019actions (ajout de la commande en BDD, d\u00e9cr\u00e9mentation de stock, email transactionnel, int\u00e9gration de donn\u00e9es marketing etc.).<\/p>\n<p>Plut\u00f4t que de lancer ces actions c\u00f4t\u00e9 serveur et faire patienter le client durant le traitement, il est possible de pousser un ou plusieurs messages \u201ctype\u201d dans RabbitMQ, qui selon certaines r\u00e8gles ira alimenter des files d\u2019attentes, qui seront alors consommer par des applications tierces.<\/p>\n<p>Exemple : mon application \u201cmailing\u201d ira consommer la liste des emails de confirmation de commande \u00e0 envoyer aux clients.<\/p>\n<p><strong>Voil\u00e0 comment d\u00e9marrer avec RabbitMQ et Symfony :<\/strong><\/p>\n<p>Installation des paquets PHP<\/p>\n<pre><code class=\"no-highlight\">sudo apt install php-amqp php-amqplib\n<\/code><\/pre>\n<p>Au sein du projet SF4<\/p>\n<pre><code class=\"no-highlight\">composer require php-amqplib\/php-amqplib symfony\/messenger symfony\/serializer-pack\n<\/code><\/pre>\n<p>Installation de RabbitMQ : <a href=\"https:\/\/www.rabbitmq.com\/install-debian.html#apt\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.rabbitmq.com\/install-debian.html#apt<\/a><\/p>\n<p>Ajouter une limite aux process utilisateur<\/p>\n<pre><code class=\"no-highlight\">sudo nano \/etc\/default\/rabbitmq-server\nulimit -S -n 4096\n<\/code><\/pre>\n<p>Commandes utiles<\/p>\n<pre><code class=\"no-highlight\">sudo service rabbitmq-server start\nsudo rabbitmqctl status\nsudo service rabbitmq-server status\n<\/code><\/pre>\n<p>Les logs sont pr\u00e9sents dans : \/var\/log\/rabbitmq\/rabbit@host.log<\/p>\n<p>Installation rapide du \u201cManagement plugin\u201d<\/p>\n<pre><code class=\"no-highlight\">sudo rabbitmq-plugins enable rabbitmq_management\nsudo service rabbitmq-server restart\n<\/code><\/pre>\n<p>Manager disponible ensuite \u00e0 l\u2019adresse http:\/\/localhost:15672\/<\/p>\n<p>Pour continuer :<br \/>\n<a href=\"https:\/\/github.com\/php-amqplib\/RabbitMqBundle\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/php-amqplib\/RabbitMqBundle<\/a><br \/>\n<a href=\"https:\/\/www.rabbitmq.com\/getstarted.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.rabbitmq.com\/getstarted.html<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/dot.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"pinterest\",\"email\",\"linkedin\");var hupso_counters_lang = \"en_US\";var hupso_image_folder_url = \"\";var hupso_url_c=\"\";var hupso_title_c=\"RabbitMQ%20et%20Symfony%204%20%3A%20introduction\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>RabbitMQ est un outil int\u00e9ressant qui permet \u00e0 une application ou site web, de se d\u00e9charger de certaines t\u00e2ches qui peuvent se faire de mani\u00e8re asynchrones et\/ou par d\u2019autres briques applicatives. Son fonctionnement comprend quelques termes nouveaux : \u00ab\u00a0RabbitMQ est un message broker, son r\u00f4le est de transporter et router les messages depuis les publishers [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[84,18],"class_list":["post-789","post","type-post","status-publish","format-standard","hentry","category-data","category-php","tag-rabbitmq","tag-symfony"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RabbitMQ et Symfony 4 : introduction - Melting Poutre<\/title>\n<meta name=\"description\" content=\"Introduction \u00e0 l&#039;utilisation de RabbitMQ avec Symfony\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RabbitMQ et Symfony 4 : introduction - Melting Poutre\" \/>\n<meta property=\"og:description\" content=\"Introduction \u00e0 l&#039;utilisation de RabbitMQ avec Symfony\" \/>\n<meta property=\"og:url\" content=\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\" \/>\n<meta property=\"og:site_name\" content=\"Melting Poutre\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-18T22:16:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-21T14:34:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png\" \/>\n<meta name=\"author\" content=\"Louis Hatier\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Louis Hatier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\"},\"author\":{\"name\":\"Louis Hatier\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"headline\":\"RabbitMQ et Symfony 4 : introduction\",\"datePublished\":\"2019-10-18T22:16:37+00:00\",\"dateModified\":\"2019-11-21T14:34:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\"},\"wordCount\":326,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png\",\"keywords\":[\"RabbitMQ\",\"Symfony\"],\"articleSection\":[\"Data\",\"PHP\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\",\"url\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\",\"name\":\"RabbitMQ et Symfony 4 : introduction - Melting Poutre\",\"isPartOf\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png\",\"datePublished\":\"2019-10-18T22:16:37+00:00\",\"dateModified\":\"2019-11-21T14:34:17+00:00\",\"description\":\"Introduction \u00e0 l'utilisation de RabbitMQ avec Symfony\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage\",\"url\":\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq.png\",\"contentUrl\":\"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq.png\",\"width\":725,\"height\":270,\"caption\":\"Logo RabbitMQ\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#website\",\"url\":\"https:\/\/louis.hatier.me\/blog\/\",\"name\":\"Melting Poutre\",\"description\":\"Du web et d&#039;autres choses\",\"publisher\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11\",\"name\":\"Louis Hatier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g\",\"caption\":\"Louis Hatier\"},\"logo\":{\"@id\":\"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/louis.hatier.me\",\"https:\/\/www.linkedin.com\/in\/louishatier\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RabbitMQ et Symfony 4 : introduction - Melting Poutre","description":"Introduction \u00e0 l'utilisation de RabbitMQ avec Symfony","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:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/","og_locale":"fr_FR","og_type":"article","og_title":"RabbitMQ et Symfony 4 : introduction - Melting Poutre","og_description":"Introduction \u00e0 l'utilisation de RabbitMQ avec Symfony","og_url":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/","og_site_name":"Melting Poutre","article_published_time":"2019-10-18T22:16:37+00:00","article_modified_time":"2019-11-21T14:34:17+00:00","og_image":[{"url":"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png","type":"","width":"","height":""}],"author":"Louis Hatier","twitter_misc":{"\u00c9crit par":"Louis Hatier","Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#article","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/"},"author":{"name":"Louis Hatier","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"headline":"RabbitMQ et Symfony 4 : introduction","datePublished":"2019-10-18T22:16:37+00:00","dateModified":"2019-11-21T14:34:17+00:00","mainEntityOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/"},"wordCount":326,"commentCount":0,"publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage"},"thumbnailUrl":"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png","keywords":["RabbitMQ","Symfony"],"articleSection":["Data","PHP"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/","url":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/","name":"RabbitMQ et Symfony 4 : introduction - Melting Poutre","isPartOf":{"@id":"https:\/\/louis.hatier.me\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage"},"image":{"@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage"},"thumbnailUrl":"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq-300x112.png","datePublished":"2019-10-18T22:16:37+00:00","dateModified":"2019-11-21T14:34:17+00:00","description":"Introduction \u00e0 l'utilisation de RabbitMQ avec Symfony","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/rabbitmq-et-symfony-4-introduction\/#primaryimage","url":"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq.png","contentUrl":"https:\/\/louis.hatier.me\/blog\/wp-content\/uploads\/2019\/10\/logo-rabbitmq.png","width":725,"height":270,"caption":"Logo RabbitMQ"},{"@type":"WebSite","@id":"https:\/\/louis.hatier.me\/blog\/#website","url":"https:\/\/louis.hatier.me\/blog\/","name":"Melting Poutre","description":"Du web et d&#039;autres choses","publisher":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/louis.hatier.me\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/2f200d0368def135b452e65491c4dd11","name":"Louis Hatier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cd8d107ede5a4ec340326655e74a00ca62b02e41a02442f961c36f085aa89942?s=96&d=mm&r=g","caption":"Louis Hatier"},"logo":{"@id":"https:\/\/louis.hatier.me\/blog\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/louis.hatier.me","https:\/\/www.linkedin.com\/in\/louishatier\/"]}]}},"_links":{"self":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/comments?post=789"}],"version-history":[{"count":7,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/789\/revisions"}],"predecessor-version":[{"id":822,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/posts\/789\/revisions\/822"}],"wp:attachment":[{"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/media?parent=789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/categories?post=789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louis.hatier.me\/blog\/wp-json\/wp\/v2\/tags?post=789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}