{"id":602,"date":"2010-03-23T12:56:26","date_gmt":"2010-03-23T16:56:26","guid":{"rendered":"https:\/\/clarionsharp.com\/blog\/?p=602"},"modified":"2019-04-12T20:45:32","modified_gmt":"2019-04-12T20:45:32","slug":"template-tips-3-atend-vs-ataftergeneratedapplication","status":"publish","type":"post","link":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/","title":{"rendered":"Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication)"},"content":{"rendered":"<p>It looks like the embed %AfterGeneratedApplication is a very popular embed these days.<br \/>\nWe already talked about it in the Template Tips #2 post where we compare it with the #AT(%ProgramEnd). Now we&#8217;ll compare #AT(%AfterGeneratedApplication) with #ATEND, and we&#8217;ll explain which of these is appropriate for a given task.<\/p>\n<p>Why do we compare #ATEND with #AT(%AfterGeneratedApplication) ?<br \/>\nBecause both of these are executed at the end of the code generation process (when we click on the Generate button).<br \/>\nSome 3rd Party Templates have the need to execute code that requires the App to be have been generated, and you&#8217;ll find they make use of #ATEND or #AT(%AfterGeneratedApplication).<\/p>\n<p>All of the templates support #ATEND, but we&#8217;ll focus on the #APPLICATION #ATEND embed.<br \/>\nThe #ATEND is comparable to a Destructor of a class, it is executed at the end of a templates code generation cycle, and the purpose is typically to execute some clean up code. When I mention clean up code I&#8217;m not talking about generating backups, creating extra files, or doing some extra\u00a0 processing, etc. I&#8217;m talking about cleaning up template symbol values. Any other processing should not be executed in the #ATEND.<\/p>\n<p style=\"text-align: justify;\">One of the reasons additional processing should not be executed in the #ATEND is that the #ATEND is similar to a Class Destructor, and that means the scope of the template is already ending, so just like in any other Class Destructor. you should not be creating new instances of anything at that point.<\/p>\n<p>Another reason, that is more related to the templates is the Embeditor. What does the Embeditor have to do with the #APPLICATION #ATEND?<br \/>\nWell if you inspect the #APPLICATION code closely you will see that there is one magic part that make the Embeditor work.<\/p>\n<p>I&#8217;m talking about this code:<\/p>\n<pre><span style=\"color: #0000ff;\">#IF (%EditProcedure)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0#! Special for editing embedded source in context<\/span><span style=\"color: #0000ff;\">\n\u00a0 #CREATE(%EditFilename)<\/span><span style=\"color: #0000ff;\">\n\u00a0 #FIND(%ModuleProcedure,%EditProcedure)<\/span><span style=\"color: #0000ff;\">\n\u00a0 #FIX(%Procedure,%ModuleProcedure)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #! Fix current procedure<\/span><span style=\"color: #0000ff;\">\n\u00a0 #MESSAGE('Generating Module:\u00a0\u00a0\u00a0 ' &amp; %Module,1) #! Post generation message<\/span><span style=\"color: #0000ff;\">\n\u00a0 #MESSAGE('Generating Procedure: ' &amp; %Procedure,2) #! Post generation message<\/span><span style=\"color: #0000ff;\">\n\u00a0 #GENERATE(%Procedure)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #! Generate procedure code<\/span><span style=\"color: #0000ff;\">\n\u00a0 #COMMENT(60)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #!Set comment alignment to column 60<\/span><span style=\"color: #0000ff;\">\n\u00a0 #CLOSE<\/span><span style=\"color: #0000ff;\">\n\u00a0 #ABORT                                      #!Stop execution of any other code<\/span><span style=\"color: #0000ff;\">\n#ENDIF<\/span><\/pre>\n<p>\nYes, the Embeditor code is just the #GENERATION of the procedure with a little bit of magic.<\/p>\n<p style=\"text-align: justify;\">Because this code is executed in the <span style=\"color: #0000ff;\">#APPLICATION<\/span> section of the template we are expecting the #APPLICATION #ATEND to be executed.<br \/>\nActually everything would be executed if it was not for the <span style=\"color: #0000ff;\">#ABORT<\/span> at the end of the above code.<br \/>\nSo if you are using the #ATEND, you are not only adding code to the equivalence of a Class Destructor, but you are also adding code that will always be executed unless you check for the value of the %EditFilename symbol. If the value of %EditFilename is null then you can be sure that you are in regular code generation, and not in the Embeditor generation. This is a very important point.<\/p>\n<p>Where does the <span style=\"color: #0000ff;\">#AT(%AfterGeneratedApplication)<\/span> fit into all this code generation?<br \/>\nWell the <span style=\"color: #0000ff;\">#EMBED(%AfterGeneratedApplication) <\/span>is located at the end of the #APPLICATION template, it&#8217;s the last code to be generated before the #ATEND, but the big difference is that it only executes when we are generating the #APPLICATION during regular code generation. The execution of that embed will not happen on the Embeditor generation because of the #ABORT that we already mentioned.<\/p>\n<p>The conclusion, if you need to execute code at the end of the Application generation process, I always recommend the use of the<span style=\"color: #0000ff;\"> #AT(%AfterGeneratedApplication)<\/span> instead of the #ATEND. And always try to use a PRIORITY, that will make other templates play nice with yours.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It looks like the embed %AfterGeneratedApplication is a very popular embed these days. We already talked about it in the Template Tips #2 post where we compare it with the #AT(%ProgramEnd). Now we&#8217;ll compare #AT(%AfterGeneratedApplication) with #ATEND, and we&#8217;ll explain which of these is appropriate for a given task. Why do we compare #ATEND with &hellip; <a href=\"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication)<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[25,29],"class_list":["post-602","post","type-post","status-publish","format-standard","hentry","category-clarion-7","tag-embeds","tag-templates"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Template Tips #3 - #ATEND vs #AT(%AfterGeneratedApplication) - Clarion<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Template Tips #3 - #ATEND vs #AT(%AfterGeneratedApplication) - Clarion\" \/>\n<meta property=\"og:description\" content=\"It looks like the embed %AfterGeneratedApplication is a very popular embed these days. We already talked about it in the Template Tips #2 post where we compare it with the #AT(%ProgramEnd). Now we&#8217;ll compare #AT(%AfterGeneratedApplication) with #ATEND, and we&#8217;ll explain which of these is appropriate for a given task. Why do we compare #ATEND with &hellip; Continue reading Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication) &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/\" \/>\n<meta property=\"og:site_name\" content=\"Clarion\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/softvelocity\/\" \/>\n<meta property=\"article:published_time\" content=\"2010-03-23T16:56:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-04-12T20:45:32+00:00\" \/>\n<meta name=\"author\" content=\"dborojovich\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"dborojovich\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/\"},\"author\":{\"name\":\"dborojovich\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/person\\\/7a40b56b94babbfd735e755567c1c3e6\"},\"headline\":\"Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication)\",\"datePublished\":\"2010-03-23T16:56:26+00:00\",\"dateModified\":\"2019-04-12T20:45:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/\"},\"wordCount\":553,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\"},\"keywords\":[\"Embeds\",\"Templates\"],\"articleSection\":[\"Clarion 7\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/\",\"name\":\"Template Tips #3 - #ATEND vs #AT(%AfterGeneratedApplication) - Clarion\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#website\"},\"datePublished\":\"2010-03-23T16:56:26+00:00\",\"dateModified\":\"2019-04-12T20:45:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/template-tips-3-atend-vs-ataftergeneratedapplication\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\",\"name\":\"Clarion\",\"description\":\"Deliver your software on time, every time\",\"publisher\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\",\"name\":\"SoftVelocity\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/svlogonew57.png\",\"contentUrl\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/svlogonew57.png\",\"width\":221,\"height\":57,\"caption\":\"SoftVelocity\"},\"image\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/softvelocity\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/SoftVelocity\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/person\\\/7a40b56b94babbfd735e755567c1c3e6\",\"name\":\"dborojovich\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/95e22b6b15da9a62474b1992308050bcc353bc3159c64373e292bc006b367b0e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/95e22b6b15da9a62474b1992308050bcc353bc3159c64373e292bc006b367b0e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/95e22b6b15da9a62474b1992308050bcc353bc3159c64373e292bc006b367b0e?s=96&d=mm&r=g\",\"caption\":\"dborojovich\"},\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/author\\\/dborojovich\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Template Tips #3 - #ATEND vs #AT(%AfterGeneratedApplication) - Clarion","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:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/","og_locale":"en_US","og_type":"article","og_title":"Template Tips #3 - #ATEND vs #AT(%AfterGeneratedApplication) - Clarion","og_description":"It looks like the embed %AfterGeneratedApplication is a very popular embed these days. We already talked about it in the Template Tips #2 post where we compare it with the #AT(%ProgramEnd). Now we&#8217;ll compare #AT(%AfterGeneratedApplication) with #ATEND, and we&#8217;ll explain which of these is appropriate for a given task. Why do we compare #ATEND with &hellip; Continue reading Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication) &rarr;","og_url":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/","og_site_name":"Clarion","article_publisher":"https:\/\/www.facebook.com\/softvelocity\/","article_published_time":"2010-03-23T16:56:26+00:00","article_modified_time":"2019-04-12T20:45:32+00:00","author":"dborojovich","twitter_card":"summary_large_image","twitter_misc":{"Written by":"dborojovich","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/#article","isPartOf":{"@id":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/"},"author":{"name":"dborojovich","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/person\/7a40b56b94babbfd735e755567c1c3e6"},"headline":"Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication)","datePublished":"2010-03-23T16:56:26+00:00","dateModified":"2019-04-12T20:45:32+00:00","mainEntityOfPage":{"@id":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/"},"wordCount":553,"commentCount":2,"publisher":{"@id":"https:\/\/clarionsharp.com\/blog\/#organization"},"keywords":["Embeds","Templates"],"articleSection":["Clarion 7"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/","url":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/","name":"Template Tips #3 - #ATEND vs #AT(%AfterGeneratedApplication) - Clarion","isPartOf":{"@id":"https:\/\/clarionsharp.com\/blog\/#website"},"datePublished":"2010-03-23T16:56:26+00:00","dateModified":"2019-04-12T20:45:32+00:00","breadcrumb":{"@id":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/clarionsharp.com\/blog\/template-tips-3-atend-vs-ataftergeneratedapplication\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/clarionsharp.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Template Tips #3 &#8211; #ATEND vs #AT(%AfterGeneratedApplication)"}]},{"@type":"WebSite","@id":"https:\/\/clarionsharp.com\/blog\/#website","url":"https:\/\/clarionsharp.com\/blog\/","name":"Clarion","description":"Deliver your software on time, every time","publisher":{"@id":"https:\/\/clarionsharp.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/clarionsharp.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/clarionsharp.com\/blog\/#organization","name":"SoftVelocity","url":"https:\/\/clarionsharp.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2019\/03\/svlogonew57.png","contentUrl":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2019\/03\/svlogonew57.png","width":221,"height":57,"caption":"SoftVelocity"},"image":{"@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/softvelocity\/","https:\/\/www.youtube.com\/user\/SoftVelocity"]},{"@type":"Person","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/person\/7a40b56b94babbfd735e755567c1c3e6","name":"dborojovich","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/95e22b6b15da9a62474b1992308050bcc353bc3159c64373e292bc006b367b0e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/95e22b6b15da9a62474b1992308050bcc353bc3159c64373e292bc006b367b0e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/95e22b6b15da9a62474b1992308050bcc353bc3159c64373e292bc006b367b0e?s=96&d=mm&r=g","caption":"dborojovich"},"url":"https:\/\/clarionsharp.com\/blog\/author\/dborojovich\/"}]}},"_links":{"self":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/comments?post=602"}],"version-history":[{"count":1,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/602\/revisions"}],"predecessor-version":[{"id":1743,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/602\/revisions\/1743"}],"wp:attachment":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/media?parent=602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/categories?post=602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/tags?post=602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}