{"id":6101,"date":"2017-05-31T03:30:40","date_gmt":"2017-05-31T03:30:40","guid":{"rendered":"http:\/\/www.jitendrazaa.com\/blog\/?p=6101"},"modified":"2022-06-11T11:01:29","modified_gmt":"2022-06-11T15:01:29","slug":"limitless-chaining-of-continuation-object-in-salesforce","status":"publish","type":"post","link":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/limitless-chaining-of-continuation-object-in-salesforce\/","title":{"rendered":"Limitless Chaining of Continuation object in Salesforce"},"content":{"rendered":"<figure id=\"attachment_6102\" aria-describedby=\"caption-attachment-6102\" style=\"width: 1410px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-6102\" src=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Continuation-Object-GIF.gif?resize=1410%2C720&#038;ssl=1\" alt=\"Chaining of Continuation Object in Salesforce\" width=\"1410\" height=\"720\" \/><figcaption id=\"caption-attachment-6102\" class=\"wp-caption-text\">Chaining of Continuation Object in Salesforce<\/figcaption><\/figure>\n<p>Check the below video first if you are planning to use Continuation<\/p>\n<p><iframe loading=\"lazy\" title=\"Continuation not needed anymore in Salesforce - Change My Mind\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/ya2N9EX9dmg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p style=\"text-align: justify;\">Around two years back, I posted an article on <a href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/continuation-object-in-apex-asynchronous-callouts-for-long-running-request-live-demo\/\">Continuation Object<\/a> in Salesforce. As we know because of governor limits like\u00a0<strong>concurrent Apex limit\u00a0<\/strong>or\u00a0<strong>CPU time limit\u00a0<\/strong>errors, its always recommended to perform long running Apex process asynchronously. Processes specially like calling external\u00a0API.<\/p>\n<p style=\"text-align: justify;\">We can come up with multiple designs if number of APIs are less. However,\u00a0you would risk scalability\u00a0of\u00a0Salesforce if number of APIs to be called is 10+. We cannot use chaining of continuation object directly as currently its limited to 3. If we call these API&#8217;s from Javascript (like using JavaScript remoting) then still we are using synchronous Apex which would be trade off for scalability.<\/p>\n<figure id=\"attachment_6111\" aria-describedby=\"caption-attachment-6111\" style=\"width: 840px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-6111\" src=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-Continuation-Object-Error-1024x302.png?resize=840%2C248&#038;ssl=1\" alt=\"What happens when we try to chain more than 3 Continuation Object call\" width=\"840\" height=\"248\" srcset=\"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-Continuation-Object-Error.png?resize=1024%2C302&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-Continuation-Object-Error.png?resize=300%2C88&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-Continuation-Object-Error.png?resize=768%2C226&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-Continuation-Object-Error.png?resize=1200%2C353&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Salesforce-Continuation-Object-Error.png?w=1382&amp;ssl=1 1382w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><figcaption id=\"caption-attachment-6111\" class=\"wp-caption-text\">What happens when we try to chain more than 3 Continuation Object\u00a0in Salesforce<\/figcaption><\/figure>\n<p>In Short, below are challenges in front of us<\/p>\n<ul>\n<li style=\"text-align: justify;\">We need to call 10+ API from Visualforce<\/li>\n<li style=\"text-align: justify;\">Cannot use chaining of <strong>Continuation Object<\/strong> as current chaining limit is 3<\/li>\n<li style=\"text-align: justify;\">Cannot invoke each API from <strong>JavaScript remoting<\/strong> because it will be considered as Synchronous Apex<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p style=\"text-align: justify;\">Lots of talk, now get into action. We would discuss how to create\u00a0<strong>a Continuation Server in Salesforce with the help of Continuation Object and JavaScript remoting.\u00a0<\/strong>In this approach, we would\u00a0be able to call unlimited APIs asynchronously from Salesforce.<\/p>\n<p><iframe loading=\"lazy\" title=\"Continuation Server in Salesforce using Continuation Object and JavaScript Remoting\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/U2-UwucMBfc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p><span style=\"text-decoration: underline;\">continuationDemoJSRemoting.vfp<\/span><\/p>\n<pre><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n &amp;lt;apex:page controller=\"ContinuationDemoJSRemoting\" standardStylesheets=\"false\" sidebar=\"false\" showHeader=\"false\" title=\"Continuation Server Demo\"&amp;gt;\n &amp;lt;!-- &amp;lt;apex:slds \/&amp;gt; Images (loading image) are not imported using this tag --&amp;gt;\n &amp;lt;apex:stylesheet value=\"{!URLFOR($Resource.SLDS2_3_1, 'assets\/styles\/salesforce-lightning-design-system.min.css')}\" \/&amp;gt; \n\n &amp;lt;div aria-hidden=\"true\" style=\"width:100%;height:100%\"&amp;gt;\n &amp;lt;div class=\"slds slds-box slds-scope\"&amp;gt;\n &amp;lt;div class=\" slds-m-top_xx-large slds-m-bottom_small\"&amp;gt;\n Total API calls to make : &amp;lt;input type=\"text\" value=\"3\" placeholder=\"Total API calls to make, Default 3\" id=\"txtAPICallsToMake\" \/&amp;gt;\n &amp;lt;input value=\"Start Request\" type=\"button\" onclick=\"startRequest()\"\/&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;br \/&amp;gt; &amp;lt;br \/&amp;gt;\n\n &amp;lt;div&amp;gt;\n Note : With increase in each API count, Response time would also be increased. &amp;lt;br \/&amp;gt;\n &amp;lt;b&amp;gt;Responses :&amp;lt;\/b&amp;gt; &amp;lt;span id=\"resultContainer\"&amp;gt;&amp;lt;\/span&amp;gt;\n &amp;lt;\/div&amp;gt; \n\n &amp;lt;div id=\"modalWindowMsg\" style=\"height:640px;\" class=\"hide\"&amp;gt;\n &amp;lt;section role=\"dialog\" tabindex=\"-1\" aria-labelledby=\"modal-heading-01\" aria-describedby=\"modal-content\" class=\"slds-modal slds-fade-in-open\"&amp;gt;\n &amp;lt;div class=\"slds-modal__container\"&amp;gt;\n &amp;lt;header class=\"slds-modal__header\"&amp;gt;\n &amp;lt;h2 id=\"modal-heading-01\" class=\"slds-text-heading_medium slds-hyphenate\"&amp;gt;API Callout status&amp;lt;\/h2&amp;gt;\n &amp;lt;\/header&amp;gt;\n &amp;lt;div class=\"slds-modal__content slds-p-around_medium\" id=\"modal-content\" &amp;gt;\n &amp;lt;p&amp;gt;\n &amp;lt;span id=\"modal-content-status\"&amp;gt;&amp;lt;\/span&amp;gt;\n &amp;lt;\/p&amp;gt;\n &amp;lt;p&amp;gt;\n &amp;lt;div class=\"demo-only\" style=\"height:3rem;\"&amp;gt;\n &amp;lt;div role=\"status\" class=\"slds-spinner slds-spinner_medium\"&amp;gt;\n &amp;lt;span class=\"slds-assistive-text\"&amp;gt;Loading&amp;lt;\/span&amp;gt;\n &amp;lt;div class=\"slds-spinner__dot-a\"&amp;gt;&amp;lt;\/div&amp;gt;\n &amp;lt;div class=\"slds-spinner__dot-b\"&amp;gt;&amp;lt;\/div&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;\/p&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;footer class=\"slds-modal__footer\"&amp;gt;\n &amp;lt;button class=\"slds-button slds-button_neutral\" onclick=\"cancelModal()\"&amp;gt;Cancel&amp;lt;\/button&amp;gt;\n &amp;lt;\/footer&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;\/section&amp;gt;\n &amp;lt;div id=\"modalWindowOverlay\" class=\"slds-backdrop slds-backdrop_open\"&amp;gt;&amp;lt;\/div&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;\/div&amp;gt;\n&amp;lt;\/div&amp;gt;\n &amp;lt;style&amp;gt;\n .modal{\n visibility: visible !important;\n opacity: 1 !important;\n transition: opacity 0.4s linear;\n }\n .hide{\n display:none;\n }\n #modal-content{\n padding: 1rem;\n }\n &amp;lt;\/style&amp;gt;\n &amp;lt;script type=\"text\/javascript\"&amp;gt;\n Visualforce.remoting.timeout = 120000;\n var apiNumber = 1;\n var totalAPICallsToMake = 3;\n var resultContainer = document.getElementById(\"resultContainer\") ;\n var modalcontentstatus = document.getElementById(\"modal-content-status\") ;\n var startTime,endTime,elapsedSecond; \n\n function startRequest(){\n var callnumbers = document.getElementById(\"txtAPICallsToMake\").value;\n if(callnumbers){\n totalAPICallsToMake = callnumbers;\n }\n document.getElementById(\"modalWindowOverlay\").classList.add('modal');\n document.getElementById(\"modalWindowMsg\").classList.remove('hide');\n submitCalls(apiNumber);\n }\n\n function submitCalls(count){\n modalcontentstatus.innerHTML='Callback initiated for API number - '+count;\n startTime = new Date().getTime();\n Visualforce.remoting.Manager.invokeAction(\n '{!$RemoteAction.ContinuationDemoJSRemoting.callService}',\n count,\n handleResult\n );\n }\n\n function handleResult(result, event){\n endTime = new Date().getTime();\n elapsedSecond = (endTime - startTime) \/ 1000;\n modalcontentstatus.innerHTML='Callback completed';\n if (event.status) {\n resultContainer.innerHTML=resultContainer.innerHTML+'&amp;lt;br \/&amp;gt; Time Taken for API '+ apiNumber +' : '+elapsedSecond+' sec , Response : '+result;\n }\n\n if(apiNumber &amp;lt; totalAPICallsToMake){\n apiNumber++;\n submitCalls(apiNumber);\n }else{\n cancelModal();\n }\n } \n\n function cancelModal(){\n document.getElementById(\"modalWindowOverlay\").classList.remove('modal');\n document.getElementById(\"modalWindowMsg\").classList.add('hide');\n }\n &amp;lt;\/script&amp;gt;\n&amp;lt;\/apex:page&amp;gt;\n<\/pre>\n<p><span style=\"text-decoration: underline;\">ContinuationDemoJSRemoting.class<\/span><\/p>\n<pre><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/**\n * @Author\t\t:\t\tJitendra Zaa\n * @Date\t\t:\t\t30 May 2017\n * @Desc\t\t:\t\tDemo of Continuation Server using Javascript remoting\n *\n * *\/\npublic class ContinuationDemoJSRemoting {\n\n    private static final String CALLOUT_URL = 'https:\/\/node-count.herokuapp.com\/';\n    private static Map&amp;lt;Integer,String&amp;gt; errors = null;\n\n    private static void initializeErrorcodes(){\n        if(errors == null){\n            errors = new Map&amp;lt;Integer,String&amp;gt;();\n            errors.put(2000,'The timeout was reached, and the server did not get a chance to respond.');\n            errors.put(2001,'There was a connection failure.');\n            errors.put(2002,'Exceptions occurred.');\n            errors.put(2003,'The response hasn\u2019t arrived (which also means that the Apex asynchronous callout framework hasn\u2019t resumed).');\n            errors.put(2004,'The response size is too large (greater than 1 MB).');\n        }\n    }\n\n    @RemoteAction\n    public static Object callService(Integer count){\n        \/\/ Return it to the system for processing\n        return constructCallout('callback1Respone',count);\n    }\n\n    public static Object callback1Respone(Object state) {\n        HttpResponse response = Continuation.getResponse((String)state);\n        Integer statusCode = response.getStatusCode();\n        if (statusCode &amp;gt;= 2000) {\n            initializeErrorcodes();\n            return 'Continuation error: ' + errors.get(statusCode);\n        }\n        return response.getBody();\n    }\n\n    private static Object constructCallout(String callbackMethodName,Integer count){\n        Continuation chainedContinuation = null;\n        chainedContinuation = new Continuation(60);\n        chainedContinuation.continuationMethod=callbackMethodName;\n        HttpRequest req = new HttpRequest();\n        req.setMethod('GET');\n        req.setEndpoint(CALLOUT_URL+count);\n        chainedContinuation.state = chainedContinuation.addHttpRequest(req);\n        return chainedContinuation;\n    } \n\n}\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>How to create a Continuation Server in Salesforce with the help of JavaScript remoting and Continuation Object<\/p>\n","protected":false},"author":1,"featured_media":0,"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":[9],"tags":[297,314,416,417,127],"class_list":["post-6101","post","type-post","status-publish","format-standard","hentry","category-salesforce","tag-asynchronous-apex","tag-continuation","tag-continuation-object","tag-continuation-server","tag-javascript-remoting"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":6113,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/design-continuation-server-in-salesforce\/","url_meta":{"origin":6101,"position":0},"title":"Design Continuation Server in Salesforce","author":"Jitendra","date":"May 31, 2017","format":false,"excerpt":"How to implement Continuation Server in Salesforce with the help of Action Function and Continuation Object","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Continuation Server in Salesforce - Demo","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Continuation-Demo.gif?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Continuation-Demo.gif?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Continuation-Demo.gif?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Continuation-Demo.gif?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/05\/Continuation-Demo.gif?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":4486,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/continuation-object-in-apex-asynchronous-callouts-for-long-running-request-live-demo\/","url_meta":{"origin":6101,"position":1},"title":"Continuation object in Apex &#8211; Asynchronous callouts for long running request &#8211; Live Demo","author":"Jitendra","date":"May 22, 2015","format":false,"excerpt":"Check the below video first if you are planning to use Continuation https:\/\/youtu.be\/ya2N9EX9dmg We may run into\u00a0scenario in Salesforce project, where we need call external web service but no need to\u00a0wait for response. Response from external web service can be processed asynchronously and once processed it can be presented in\u2026","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Execution Flow of an Asynchronous Callout - Image from Salesforce documentation","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/05\/apex_continuations_diagram.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/05\/apex_continuations_diagram.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/05\/apex_continuations_diagram.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/05\/apex_continuations_diagram.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":6244,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/a-tale-of-governor-limits-and-solutions-in-salesforce\/","url_meta":{"origin":6101,"position":2},"title":"A Tale of Governor Limits and Solutions in Salesforce","author":"Jitendra","date":"November 21, 2017","format":false,"excerpt":"Thrilling story of Salesforce Technical Architect on a quest to solve application problems and avoid governor limit errors","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"A Tale of Governor Limits and Solutions in Salesforce","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/09\/A-Tale-of-Governor-Limits-and-Solutions-in-Salesforce.jpg?fit=900%2C417&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/09\/A-Tale-of-Governor-Limits-and-Solutions-in-Salesforce.jpg?fit=900%2C417&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/09\/A-Tale-of-Governor-Limits-and-Solutions-in-Salesforce.jpg?fit=900%2C417&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/09\/A-Tale-of-Governor-Limits-and-Solutions-in-Salesforce.jpg?fit=900%2C417&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":3706,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/visualforce\/introduction-to-visualforce-remote-objects\/","url_meta":{"origin":6101,"position":3},"title":"Visualforce Remote Objects","author":"Jitendra","date":"February 16, 2014","format":false,"excerpt":"One of the exciting feature of Spring14 release is introduction of \"Visualforce Remote Objects\". You can say its actually replacement of JavaScript Remoting. Why do we need \"Visualforce Remote Objects\" when we already have \"JavaScript Remoting\" ? Well, here are few advantages of \"Visualforce Remote Objects\" : No need to\u2026","rel":"","context":"In &quot;Visualforce&quot;","block_context":{"text":"Visualforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/visualforce\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5562,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/summer-16-top-features\/","url_meta":{"origin":6101,"position":4},"title":"Salesforce Summer 16 &#8211; My favorite top 20 features","author":"Jitendra","date":"June 28, 2016","format":false,"excerpt":"List of Salesforce Summer 16 features","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"User Switcher in Salesforce Summer 16","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/06\/User-Switcher-in-Salesforce-Summer-16.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":4174,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/salesforce-interview-questions-part-22\/","url_meta":{"origin":6101,"position":5},"title":"Salesforce Interview Questions &#8211; Part 22","author":"Jitendra","date":"December 1, 2015","format":false,"excerpt":"Consider it Facts or FAQ or interview questions but its small and important notes about Salesforce. More than 200 interview questions for Salesforce developer, Admin and consultants","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"220+ Salesforce Interview Questions","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/11\/220plus-Interview-Questions-1024x303.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/11\/220plus-Interview-Questions-1024x303.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/11\/220plus-Interview-Questions-1024x303.png?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\/6101","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=6101"}],"version-history":[{"count":8,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6101\/revisions"}],"predecessor-version":[{"id":7608,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/6101\/revisions\/7608"}],"wp:attachment":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media?parent=6101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/categories?post=6101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/tags?post=6101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}