{"id":19024,"date":"2015-04-17T14:26:42","date_gmt":"2015-04-17T08:56:42","guid":{"rendered":"https:\/\/2thenew.xyz\/blog\/?p=19024"},"modified":"2015-04-17T14:26:42","modified_gmt":"2015-04-17T08:56:42","slug":"parsing-url-mappings-in-grails","status":"publish","type":"post","link":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/","title":{"rendered":"Parsing URL Mappings in Grails"},"content":{"rendered":"<p style=\"text-align: justify\">There are times when we need to parse the URL mappings in our grails app. In my case we have a REST API. In which we have implemented a generic query method for all controllers but it is available to only a few using custom URL mappings. We wanted to create test cases in such a way for query action that each time a test case runs it randomly selects some\/all endpoints which have query method available. What we could have done is add an entry for each mapping in test case. But considering that there may be more endpoints in near future having query method implemented, we wanted a generic solution for our case.<\/p>\n<p style=\"text-align: justify\">Grails provides a script url-mappings-report, that prints a summary of all available endpoints in your application. We wanted a similar solution for our case where we can fetch all URL mappings and then identify the mappings with query action and use them in our test case.<\/p>\n<p style=\"text-align: justify\">We found our answer by looking in the scripts of url-mappings-report. Using the UrlMappingsArtefactHandler we can fetch the list of URL mappings. Code provided below will return mappings for all available actions in all controllers. Code for that would be:<\/p>\n<p>[code language=&#8221;groovy&#8221;]<br \/>\nClassLoader classLoader = this.class.classLoader<br \/>\ndef mappings = grailsApplication.getArtefacts(UrlMappingsArtefactHandler.TYPE)<\/p>\n<p>MockServletContext mctx = classLoader.loadClass(&#8216;org.springframework.mock.web.MockServletContext&#8217;).newInstance()<br \/>\nDefaultUrlMappingEvaluator evaluator = classLoader.loadClass(&quot;org.codehaus.groovy.grails.web.mapping.DefaultUrlMappingEvaluator&quot;).newInstance(mctx)<br \/>\nList&lt;UrlMapping&gt; allMappings = []<\/p>\n<p>List&lt;UrlMapping&gt; grailsClassMappings<br \/>\nfor (mapping in mappings) {<br \/>\n    if (Script.isAssignableFrom(mapping.getClazz())) {<br \/>\n        grailsClassMappings = evaluator.evaluateMappings(mapping.getClazz())<br \/>\n    } else {<br \/>\n        grailsClassMappings = evaluator.evaluateMappings(mapping.getMappingsClosure())<br \/>\n    }<br \/>\n    allMappings.addAll(grailsClassMappings)<br \/>\n}<br \/>\n[\/code]<\/p>\n<p style=\"text-align: justify\">After fetching all the mappings we can iterate over them to fetch only the endpoints having query action:<\/p>\n<p>[code language=&#8221;groovy&#8221; light=&#8221;true&#8221;]allMappings.findAll { UrlMapping mapping -&gt; return mapping.actionName.equals(&quot;query&quot;) }[\/code]<\/p>\n<p style=\"text-align: justify\">Now we have a list of mappings that have only the query action as endpoint. Now we can use all of them or can use randomly a few in our test.<\/p>\n<p>Complete code would be:<\/p>\n<p>[code language=&#8221;groovy&#8221;]<br \/>\nimport org.codehaus.groovy.grails.commons.UrlMappingsArtefactHandler<br \/>\nimport org.codehaus.groovy.grails.web.mapping.DefaultUrlMappingEvaluator<br \/>\nimport org.codehaus.groovy.grails.web.mapping.UrlMapping<br \/>\nimport org.springframework.mock.web.MockServletContext<\/p>\n<p>private List&lt;UrlMapping&gt; getAllURLMappings(){<br \/>\n    ClassLoader classLoader = this.class.classLoader<br \/>\n    def mappings = grailsApplication.getArtefacts(UrlMappingsArtefactHandler.TYPE)<\/p>\n<p>    MockServletContext mctx = classLoader.loadClass(&#8216;org.springframework.mock.web.MockServletContext&#8217;).newInstance()<br \/>\n    DefaultUrlMappingEvaluator evaluator = classLoader.loadClass(&quot;org.codehaus.groovy.grails.web.mapping.DefaultUrlMappingEvaluator&quot;).newInstance(mctx)<br \/>\n    List&lt;UrlMapping&gt; allMappings = []<\/p>\n<p>    List&lt;UrlMapping&gt; grailsClassMappings<br \/>\n    for (mapping in mappings) {<br \/>\n        if (Script.isAssignableFrom(mapping.getClazz())) {<br \/>\n            grailsClassMappings = evaluator.evaluateMappings(mapping.getClazz())<br \/>\n        } else {<br \/>\n            grailsClassMappings = evaluator.evaluateMappings(mapping.getMappingsClosure())<br \/>\n        }<br \/>\n        allMappings.addAll(grailsClassMappings)<br \/>\n    }<br \/>\n    return allMappings<br \/>\n}<\/p>\n<p>private List&lt;String&gt; getMappingForAction(List&lt;UrlMapping&gt; mappings, String action){<br \/>\n    return mappings.findAll {<br \/>\n        UrlMapping mapping -&gt;<br \/>\n            return mapping.actionName.equals(action)<br \/>\n    }*.urlData.urlPattern<br \/>\n}<\/p>\n<p>List&lt;UrlMapping&gt; allMappings = getAllURLMappings()<br \/>\nList&lt;String&gt; mappings = getMappingForAction(allMappings, &quot;query&quot;)<\/p>\n<p>int size = mappings.size()<\/p>\n<p>Random r = new Random()<br \/>\nint index = r.nextInt(size &#8211; 0)<\/p>\n<p>println mappings[index]<\/p>\n<p>[\/code]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are times when we need to parse the URL mappings in our grails app. In my case we have a REST API. In which we have implemented a generic query method for all controllers but it is available to only a few using custom URL mappings. We wanted to create test cases in such [&hellip;]<\/p>\n","protected":false},"author":182,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":38,"footnotes":""},"categories":[7],"tags":[4840,1756],"class_list":["post-19024","post","type-post","status-publish","format-standard","hentry","category-grails","tag-grails","tag-url-mapping"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Sandeep Poonia\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Parsing URL Mappings in Grails | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/2thenew.xyz\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/2thenew.xyz\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Parsing URL Mappings in Grails | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/2thenew.xyz\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#article\",\"name\":\"Parsing URL Mappings in Grails | TO THE NEW Blog\",\"headline\":\"Parsing URL Mappings in Grails\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/sandeeppoonia\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-04-17T14:26:42+05:30\",\"dateModified\":\"2015-04-17T14:26:42+05:30\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#webpage\"},\"articleSection\":\"Grails, Grails, URL Mapping\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#listItem\",\"name\":\"Parsing URL Mappings in Grails\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#listItem\",\"position\":3,\"name\":\"Parsing URL Mappings in Grails\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/sandeeppoonia\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/sandeeppoonia\\\/\",\"name\":\"Sandeep Poonia\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#authorImage\",\"url\":\"https:\\\/\\\/newersworld-sf-static.tothenew.net\\\/prod\\\/profilePicFolder\\\/8d46cfd3-1f3e-4c89-85b1-cec1718995da_839-Sandeep-Poonia-PROFILEPICTURE.jpeg\",\"width\":96,\"height\":96,\"caption\":\"Sandeep Poonia\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/\",\"name\":\"Parsing URL Mappings in Grails | TO THE NEW Blog\",\"description\":\"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/parsing-url-mappings-in-grails\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/sandeeppoonia\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/sandeeppoonia\\\/#author\"},\"datePublished\":\"2015-04-17T14:26:42+05:30\",\"dateModified\":\"2015-04-17T14:26:42+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Parsing URL Mappings in Grails | TO THE NEW Blog","description":"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.","canonical_url":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#article","name":"Parsing URL Mappings in Grails | TO THE NEW Blog","headline":"Parsing URL Mappings in Grails","author":{"@id":"https:\/\/2thenew.xyz\/blog\/author\/sandeeppoonia\/#author"},"publisher":{"@id":"https:\/\/2thenew.xyz\/blog\/#organization"},"datePublished":"2015-04-17T14:26:42+05:30","dateModified":"2015-04-17T14:26:42+05:30","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#webpage"},"isPartOf":{"@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#webpage"},"articleSection":"Grails, Grails, URL Mapping"},{"@type":"BreadcrumbList","@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog#listItem","position":1,"name":"Home","item":"https:\/\/2thenew.xyz\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/2thenew.xyz\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#listItem","name":"Parsing URL Mappings in Grails"},"previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#listItem","position":3,"name":"Parsing URL Mappings in Grails","previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.xyz\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/2thenew.xyz\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/2thenew.xyz\/blog\/"},{"@type":"Person","@id":"https:\/\/2thenew.xyz\/blog\/author\/sandeeppoonia\/#author","url":"https:\/\/2thenew.xyz\/blog\/author\/sandeeppoonia\/","name":"Sandeep Poonia","image":{"@type":"ImageObject","@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#authorImage","url":"https:\/\/newersworld-sf-static.tothenew.net\/prod\/profilePicFolder\/8d46cfd3-1f3e-4c89-85b1-cec1718995da_839-Sandeep-Poonia-PROFILEPICTURE.jpeg","width":96,"height":96,"caption":"Sandeep Poonia"}},{"@type":"WebPage","@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#webpage","url":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/","name":"Parsing URL Mappings in Grails | TO THE NEW Blog","description":"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/2thenew.xyz\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/#breadcrumblist"},"author":{"@id":"https:\/\/2thenew.xyz\/blog\/author\/sandeeppoonia\/#author"},"creator":{"@id":"https:\/\/2thenew.xyz\/blog\/author\/sandeeppoonia\/#author"},"datePublished":"2015-04-17T14:26:42+05:30","dateModified":"2015-04-17T14:26:42+05:30"},{"@type":"WebSite","@id":"https:\/\/2thenew.xyz\/blog\/#website","url":"https:\/\/2thenew.xyz\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/2thenew.xyz\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Parsing URL Mappings in Grails | TO THE NEW Blog","og:description":"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.","og:url":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/","og:image":"https:\/\/2thenew.xyz\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/2thenew.xyz\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Parsing URL Mappings in Grails | TO THE NEW Blog","twitter:description":"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.","twitter:image":"https:\/\/2thenew.xyz\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"19024","title":"Parsing URL Mappings in Grails | #site_title","description":"How to parse URL Mappings in Grails application. Find all endpoints in your application controller wise. Check if a controller has implemented a specific action or not.","keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-29 17:24:07","updated":"2024-02-29 09:28:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.xyz\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.xyz\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tParsing URL Mappings in Grails\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/2thenew.xyz\/blog"},{"label":"Grails","link":"https:\/\/2thenew.xyz\/blog\/category\/grails\/"},{"label":"Parsing URL Mappings in Grails","link":"https:\/\/2thenew.xyz\/blog\/parsing-url-mappings-in-grails\/"}],"_links":{"self":[{"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/posts\/19024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/users\/182"}],"replies":[{"embeddable":true,"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/comments?post=19024"}],"version-history":[{"count":0,"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/posts\/19024\/revisions"}],"wp:attachment":[{"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/media?parent=19024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/categories?post=19024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2thenew.xyz\/blog\/wp-json\/wp\/v2\/tags?post=19024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}