{"id":6920,"date":"2019-10-16T00:04:14","date_gmt":"2019-10-16T04:04:14","guid":{"rendered":"https:\/\/www.jitendrazaa.com\/blog\/?p=6920"},"modified":"2020-06-10T10:52:46","modified_gmt":"2020-06-10T14:52:46","slug":"data-exchange-between-aura-lightning-web-components-lwc-and-visualforce","status":"publish","type":"post","link":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/data-exchange-between-aura-lightning-web-components-lwc-and-visualforce\/","title":{"rendered":"Event Handling between Aura, Lightning Web Components (LWC) and Visualforce"},"content":{"rendered":"\n<p class=\"justify\">Few months back, <a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/lightning-web-component-event-handling-pub-sub\/\">I wrote an article<\/a> on how pub sub model can be used to communicate between Lightning Web Components.  In that blog post, we used external library to pass event from child to Lightning Web Components.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lightning Message Service<\/h2>\n\n\n\n<p class=\"justify\">In <a href=\"https:\/\/www.jitendrazaa.com\/blog\/tag\/winter-20\/\">Winter 20<\/a>, Salesforce released <strong>Lightning Message Service <\/strong>which can be used to exchange data between Visualforce, Aura Component and Lightning Web Components.  Unlike previous process, we don&#8217;t need to import any external library like pub or sub. <\/p>\n\n\n\n<p class=\"justify\">In this blog post, I would be creating Visualforce, Aura Component and <strong>Lightning Message Service <\/strong>and exchanging message between all of them using Lightning Message Service.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Lightning Message Channel<\/h2>\n\n\n\n<p class=\"justify\">At the heart of <strong>Lightning Message Service<\/strong>, we have <strong>Lightning Message Channel<\/strong>.  Its basically name of Schema which will hold actual message. For sake of this blog post, create file <em>LMSDemoWin.messageChannel-meta.xml<\/em> in folder messageChannels.   <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;LightningMessageChannel xmlns=&quot;http:\/\/soap.sforce.com\/2006\/04\/metadata&quot;&gt;\n   &lt;masterLabel&gt;LMS Demo&lt;\/masterLabel&gt;\n   &lt;isExposed&gt;true&lt;\/isExposed&gt;\n   &lt;description&gt;Winter 20 - LMS Demo.&lt;\/description&gt; \n&lt;\/LightningMessageChannel&gt;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Deploy Lightning Message Channel<\/h2>\n\n\n\n<p class=\"justify\">Run below SFDX command to deploy this message channel on your Salesforce Org, run push command to deploy message channel on Scratch Orgs.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\nsfdx force:source:deploy -p &quot;force-app\/main\/default\/messageChannels\/&quot;\n<\/pre><\/div>\n\n\n<p class=\"justify\">Once, Lightning Message Channel created, let&#8217;s start by creating our components and first we will create below Visualforce Page.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;apex:page&gt;\n    &lt;!-- Begin Default Content REMOVE THIS --&gt;\n    &lt;h1&gt;Lightning Message Services - Demo - Winter 20&lt;\/h1&gt;\n    &lt;div&gt;\n        &lt;p&gt;Message To Send&lt;\/p&gt;\n        &lt;input type=&quot;text&quot; id=&quot;vfMessage&quot; \/&gt;\n        &lt;button onclick=&quot;publishMessage()&quot;&gt;Publish&lt;\/button&gt; \n        &lt;br\/&gt; \n        &lt;button onclick=&quot;subscribeMC()&quot;&gt;Subscribe&lt;\/button&gt; \n        &lt;button onclick=&quot;unsubscribeMC()&quot;&gt;Unsubscribe&lt;\/button&gt; \n        &lt;br\/&gt;\n        &lt;p&gt;Messages Received:&lt;\/p&gt;\n        &lt;textarea id=&quot;txtMessages&quot; rows=&quot;2&quot; style=&quot; width:100%;&quot; \/&gt;\n    &lt;\/div&gt;\n    &lt;script&gt; \n        \/\/ Load the MessageChannel token in a variable\n        var lmsDemoChannel = &quot;{!$MessageChannel.LMSDemoWin__c}&quot;;\n        var subscriptionToMC;\n       function publishMessage() {\n            const payload = {\n                source: &quot;Visualforce&quot;,\n                messageBody: document.getElementById(&#039;vfMessage&#039;).value\n            };\n            sforce.one.publish(lmsDemoChannel, payload);\n        }\n        function subscribeMC() {\n            if (!subscriptionToMC) {\n                subscriptionToMC = sforce.one.subscribe(lmsDemoChannel, onMCPublished);\n            }\n        }\n        function unsubscribeMC() {\n            if (subscriptionToMC) {\n                sforce.one.unsubscribe(subscriptionToMC);\n                subscriptionToMC = null;\n            }\n        }\n        function onMCPublished(message) {\n            var textArea = document.querySelector(&quot;#txtMessages&quot;);\n            textArea.innerHTML = message ? &#039;Message: &#039; + message.messageBody + &#039; From: &#039; + message.source : &#039;no message payload&#039;;\n        } \n    &lt;\/script&gt;\n&lt;\/apex:page&gt;\n<\/pre><\/div>\n\n\n<p class=\"justify\">In above code, we have few functions to subscribe , Unsubscribe and publish Lightning Message Channel. <em>We can follow any schema for payload however that has to be followed by all clients as well. In our case, we are passing source and actual message body.<\/em><\/p>\n\n\n\n<p>Next component we would build would be Aura Component<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;aura:component description=&quot;testMessageAura&quot; implements=&quot;flexipage:availableForAllPageTypes&quot; access=&quot;global&quot;&gt;\n    &lt;aura:attribute type=&quot;String&quot; name=&quot;myMessage&quot;\/&gt;\n    &lt;aura:attribute type=&quot;String&quot; name=&quot;receivedMessage&quot;\/&gt;\n    &lt;lightning:messageChannel type=&quot;LMSDemoWin__c&quot; aura:id=&quot;lmsDemohannel&quot; onMessage=&quot;{!c.handleReceiveMessage}&quot;\/&gt;\n\n    &lt;lightning:card title=&quot;Aura Component&quot; iconName=&quot;custom:custom18&quot;&gt;\n        &lt;div class=&quot;slds-m-around_medium&quot;&gt;\n            &lt;lightning:input type=&quot;text&quot; value=&quot;{!v.myMessage}&quot; label=&quot;Message To Send&quot;\/&gt;\n            &lt;lightning:button label=&quot;Publish&quot; onclick=&quot;{! c.handleClick}&quot;\/&gt;\n            &lt;br\/&gt;\n            &lt;br\/&gt;\n            &lt;p&gt;Latest Received Message&lt;\/p&gt;\n            &lt;lightning:formattedText value=&quot;{!v.receivedMessage}&quot;\/&gt;\n        &lt;\/div&gt;\n    &lt;\/lightning:card&gt;\n&lt;\/aura:component&gt;\t\n\n<\/pre><\/div>\n\n\n<p>Controller of Aura Component<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n({\n    handleClick: function(component, event, helper) {\n        let myMessage = component.get(&quot;v.myMessage&quot;);\n        const payload = {\n            source: &quot;Aura Component&quot;,\n            messageBody: myMessage\n        };\n        component.find(&quot;lmsDemohannel&quot;).publish(payload);\n    },\n    handleReceiveMessage: function (component, event, helper) {\n        if (event != null) {\n            const message = event.getParam(&#039;messageBody&#039;);\n            const source = event.getParam(&#039;source&#039;);\n\n            component.set(&quot;v.receivedMessage&quot;, &#039;Message: &#039; + message + &#039;. Sent From: &#039; + source);\n        }\n    }\n});\n<\/pre><\/div>\n\n\n<p class=\"justify\">As you can see in above Aura Component, we are not doing anything special to subscribe or unsubscribe <strong>Lightning Message Channel<\/strong>. Aura Component by default handles those operations once we declare them. <\/p>\n\n\n\n<p>Last component we would be creating is Lightning Web Component <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;template&gt;\n    &lt;lightning-card title=&quot;LWC&quot; icon-name=&quot;custom:custom18&quot;&gt;\n        &lt;div class=&quot;slds-m-around_medium&quot;&gt;\n            &lt;lightning-input label=&quot;Message To Send&quot; type=&quot;text&quot; value={_msg} onchange={handleChange}&gt;&lt;\/lightning-input&gt;\n            &lt;lightning-button label=&quot;Publish&quot; onclick={handleClick}&gt;&lt;\/lightning-button&gt;\n            &lt;br&gt;\n            &lt;lightning-button label=&quot;Subscribe&quot; onclick={handleSubscribe}&gt;&lt;\/lightning-button&gt;\n            &lt;lightning-button label=&quot;Unsubscribe&quot; onclick={handleUnsubscribe}&gt;&lt;\/lightning-button&gt;\n            &lt;p&gt; Message Received&lt;\/p&gt;\n            &lt;lightning-formatted-text value={receivedMessage}&gt;&lt;\/lightning-formatted-text&gt;\n        &lt;\/div&gt;\n    &lt;\/lightning-card&gt;\n&lt;\/template&gt;\n<\/pre><\/div>\n\n\n<p>Javascript of LWC<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nimport { LightningElement, track} from &#039;lwc&#039;;\nimport { publish,createMessageContext,releaseMessageContext, subscribe, unsubscribe } from &#039;lightning\/messageService&#039;;\nimport lmsDemoMC from &quot;@salesforce\/messageChannel\/LMSDemoWin__c&quot;;\nexport default class LMS_MessageSenderReceiverLWC extends LightningElement {\n    @track _msg = &#039;&#039;;\n    @track receivedMessage = &#039;&#039;;\n    channel;\n    context = createMessageContext();\n\n    constructor() {\n        super();\n    }\n   \n    handleSubscribe() {\n        const parentPage = this;\n        this.channel = subscribe(this.context, lmsDemoMC, function (event){\n            if (event != null) {\n                const message = event.messageBody;\n                const source = event.source;\n                parentPage.receivedMessage = &#039;Message: &#039; + message + &#039;. Sent From: &#039; + source;\n            }\n        });\n    }\n\n    handleUnsubscribe() {\n        unsubscribe(this.channel);\n    }\n\n    handleChange(event) { \n        this._msg = event.target.value;\n    }\n\n    handleClick() {  \n        const payload = {\n            source: &quot;Lightnign Web Component&quot;,\n            messageBody: this._msg\n        }; \n        publish(this.context, lmsDemoMC, payload);\n    } \n\n    disconnectedCallback() {\n        releaseMessageContext(this.context);\n    }\n}\n<\/pre><\/div>\n\n\n<p class=\"justify\">Once we embed all three components (Visualforce, Aura and Lightning Web Components), we would be able to see Lightning Message Service in action as shown in below image :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"516\" height=\"1024\" src=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/10\/Lightning-Message-Service-in-Salesforce.png?resize=516%2C1024&#038;ssl=1\" alt=\"\" class=\"wp-image-6921\" srcset=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/10\/Lightning-Message-Service-in-Salesforce.png?resize=516%2C1024&amp;ssl=1 516w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/10\/Lightning-Message-Service-in-Salesforce.png?resize=151%2C300&amp;ssl=1 151w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/10\/Lightning-Message-Service-in-Salesforce.png?resize=768%2C1523&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/10\/Lightning-Message-Service-in-Salesforce.png?w=840&amp;ssl=1 840w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><figcaption>Lightning Message Service in Salesforce<\/figcaption><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"<p>How to use Lightning Message Services for event handling between Lightning Web Components, Aura Components and Visualforce<\/p>\n","protected":false},"author":1,"featured_media":6923,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"jz_research_post":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[310,475,9,18],"tags":[478,477,462,503,464,336,476],"class_list":["post-6920","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lightning","category-lightning-web-components","category-salesforce","category-visualforce","tag-lightning-message-channel","tag-lightning-message-service","tag-lightning-web-component","tag-lms","tag-lwc","tag-visualforce","tag-winter-20"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/10\/Salesforce-Lightning-Message-Service.png?fit=1978%2C1724&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":6880,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/get-current-user-id-in-salesforce\/","url_meta":{"origin":6920,"position":0},"title":"Get Current User Id in Salesforce","author":"Jitendra","date":"February 2, 2019","format":false,"excerpt":"How to get Current Logged in user Id in Apex, Visualforce, Lightning Component and Formula fields in Salesforce","rel":"","context":"In &quot;Lightning&quot;","block_context":{"text":"Lightning","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/lightning\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4102,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/salesforce-faq-part-20-lightning-questions\/","url_meta":{"origin":6920,"position":1},"title":"Salesforce interview question related to Lightning framework &#8211; Part 20","author":"Jitendra","date":"February 4, 2015","format":false,"excerpt":"Salesforce interview questions for Salesforce developers and admin , mostly related to newly released Salesforce Lightning components and applications","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7044,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/limitations-of-lwc\/","url_meta":{"origin":6920,"position":2},"title":"Limitations of LWC","author":"Jitendra","date":"April 22, 2020","format":false,"excerpt":"Considerations & Limitations of Lightning Web Component in Salesforce","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"LWC Not Supported","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2020\/04\/LWC-Not-Supported.png?fit=1200%2C569&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2020\/04\/LWC-Not-Supported.png?fit=1200%2C569&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2020\/04\/LWC-Not-Supported.png?fit=1200%2C569&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2020\/04\/LWC-Not-Supported.png?fit=1200%2C569&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2020\/04\/LWC-Not-Supported.png?fit=1200%2C569&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6848,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/lightning-web-component-event-handling-pub-sub\/","url_meta":{"origin":6920,"position":3},"title":"Lightning Web Component Event Handling &#8211; Pub Sub","author":"Jitendra","date":"June 21, 2019","format":false,"excerpt":"How to handle events in Lightning Web Components between nested and non nested Components","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Event Communication between Lightning Web Components","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/05\/Event-Communication-between-Lightning-Web-Components.png?fit=675%2C382&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/05\/Event-Communication-between-Lightning-Web-Components.png?fit=675%2C382&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2019\/05\/Event-Communication-between-Lightning-Web-Components.png?fit=675%2C382&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":5737,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/use-lightning-component-in-visualforce-page\/","url_meta":{"origin":6920,"position":4},"title":"Use Lightning Component in Visualforce Page","author":"Jitendra","date":"September 22, 2016","format":false,"excerpt":"How to use Lightning Out to surface Lightning Component on Visualforce Pages","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Use Lightning Components in Visualforce Pages","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/09\/Use-Lightning-Components-in-Visualforce-Pages.jpg?fit=862%2C501&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/09\/Use-Lightning-Components-in-Visualforce-Pages.jpg?fit=862%2C501&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/09\/Use-Lightning-Components-in-Visualforce-Pages.jpg?fit=862%2C501&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/09\/Use-Lightning-Components-in-Visualforce-Pages.jpg?fit=862%2C501&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":4287,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/learning-lightning-component-trailhead-way\/","url_meta":{"origin":6920,"position":5},"title":"Learning Lightning Component &#8211; Trailhead way","author":"Jitendra","date":"March 19, 2015","format":false,"excerpt":"In Previous article, I\u00a0have introduced what is Trailhead and why employer should start using it to train Salesforce developers and Admins. At the time of writing this article, there are already 16 modules to be learned from it. Recently Salesforce has added some more awesome tutorial\u00a0and \u00a0In this article, I\u2026","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Learn Lightning Component Trailhead way","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Learn-Lightning-Trailhead-way-1024x576.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Learn-Lightning-Trailhead-way-1024x576.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Learn-Lightning-Trailhead-way-1024x576.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/comments?post=6920"}],"version-history":[{"count":3,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6920\/revisions"}],"predecessor-version":[{"id":7108,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6920\/revisions\/7108"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media\/6923"}],"wp:attachment":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media?parent=6920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/categories?post=6920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/tags?post=6920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}