{"id":450,"date":"2011-04-03T09:45:57","date_gmt":"2011-04-03T08:45:57","guid":{"rendered":"http:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/"},"modified":"2011-04-03T09:45:57","modified_gmt":"2011-04-03T08:45:57","slug":"a-command-line-tool-for-debian-to-purge-varnish-objects","status":"publish","type":"post","link":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/","title":{"rendered":"A command line tool for Debian to purge Varnish objects"},"content":{"rendered":"<p>I&#39;ve been using <a href=\"\/cstrep\/blog\/index.dml\/tag\/varnish\" rel=\"nofollow\">varnish<\/a> mostly on Debian systems. I found the <code>reload-vcl<\/code> script included in Debian to be useful.<\/p>\n<h3>The <code>reload-vcl<\/code> script<\/h3>\n<p>It&#39;s part of the <a href=\"http:\/\/packages.debian.org\/squeeze\/varnish\" rel=\"nofollow\">standard varnish debian package<\/a>. It uses the system defaults in <code>\/etc\/defaults\/varnish<\/code>, so it knows how to correctly invoke the <code>varnishadm<\/code> utility to perform administrative commands. As the name implies, it reloads the default VCL file using the <code>vcl.load<\/code> and <code>vcl.use<\/code> commands, checking that every step succeeds properly before continuing so it&#39;s safe to use. It loads the new VCL file and labels it automatically with a unique id.<\/p>\n<p>Something analogous but regarding the purge functionality could have been useful, so I looked at the source code for <code>reload-vcl<\/code>. Most of it deals with loading of <code>\/etc\/defaults\/varnish<\/code> and various sanity checks. I reused that bit to make another script, to <strong>control cache purging<\/strong>.<\/p>\n<h3>The purge-cache script<\/h3>\n<p>Here&#39;s the full source code. Below there&#39;s a link to download the latest version from github.<\/p>\n<pre><code>\r\n#!\/bin\/sh\r\n\r\n# purge-cache: Script to purge varnish cache. Defaults are defined in\r\n# \/etc\/default\/varnish.\r\n#\r\n# Cosimo &lt;cosimo@cpan.org&gt;\r\n# Based on reload-vcl, by Stig Sandbeck Mathisen &lt;ssm at debian dot org&gt;\r\n\r\n# Settings\r\ndefaults=\/etc\/default\/varnish\r\n\r\n# Paths\r\nvarnishadm=\/usr\/bin\/varnishadm\r\ndate=\/bin\/date \r\ntempfile=\/bin\/tempfile\r\n\r\n# Messages\r\n# msg_no_varnishadm: varnishadm\r\nmsg_no_varnishadm=&quot;Error: Cannot execute %sn&quot;\r\nmsg_no_management=&quot;Error: $DAEMON_OPTS must contain &#39;-T hostname:port&#39;n&quot;\r\n# msg_defaults_not_readable: defaults\r\nmsg_defaults_not_readable=&quot;Error: %s is not readablen&quot;\r\n# msg_defaults_not_there: defaults\r\nmsg_defaults_not_there=&quot;Error: %s does not existn&quot;\r\nmsg_usage=&quot;Usage: $0 [-h][-q][-u &lt;url&gt;|-r &lt;regex&gt;|-a]nt-htdisplay helpnt-qtbe quietnt-utpurge by exact (relative) url (ex.: \/en\/products\/)nt-rtpurge objects with URL matching a regex (ex.: ^\/blogs\/)nt-atpurge all objects from cachen&quot;\r\nmsg_purge_failed=&quot;Error: purge command failedn&quot;\r\n# msg_purge_url: url\r\nmsg_purge_url=&quot;Purging objects by exact url: %sn&quot;\r\n# msg_purge_regex: regex\r\nmsg_purge_regex=&quot;Purging objects with URL matching regex: %sn&quot;\r\nmsg_purge_all=&quot;Purging all cachen&quot;\r\nmsg_purge_ok=&quot;Purge command successfuln&quot;\r\n\r\n# Load defaults file\r\nif [ -f &quot;$defaults&quot; ]\r\nthen\r\n    if [ -r &quot;$defaults&quot; ]\r\n    then\r\n        . &quot;$defaults&quot;\r\n    else\r\n        printf &gt;&amp;2 &quot;$msg_defaults_not_readable&quot; $defaults\r\n        exit 1 \r\n    fi\r\nelse\r\n    printf &gt;&amp;2 &quot;$msg_defaults_not_there&quot; $defaults\r\n    exit 1\r\nfi\r\n\r\n# parse command line arguments\r\nwhile getopts hqu:r:a flag\r\ndo\r\n    case $flag in\r\n        h)\r\n            printf &gt;&amp;2 &quot;$msg_usage&quot;\r\n            exit 0\r\n            ;; \r\n        u)\r\n            purge_method=url\r\n        url=&quot;$OPTARG&quot;\r\n            ;; \r\n        r)\r\n            purge_method=regex\r\n        regex=&quot;$OPTARG&quot;\r\n            ;; \r\n        a)\r\n            purge_method=all\r\n            ;; \r\n        q)\r\n            quiet=1\r\n            ;; \r\n        *)\r\n            printf &gt;&amp;2 &quot;$msg_usagen&quot;\r\n            exit 1\r\n            ;; \r\n    esac\r\ndone\r\n\r\n# Parse $DAEMON_OPTS (options must be kept in sync with varnishd).\r\n# Extract the -f and the -T option, and (try to) ensure that the\r\n# management interface is on the form hostname:address\r\nOPTIND=1\r\nwhile getopts a:b:dFf:g:h:l:n:P:p:s:T:t:u:Vw: flag $DAEMON_OPTS\r\ndo\r\n    case $flag in\r\n        f)\r\n            if [ -f &quot;$OPTARG&quot; ]; then\r\n                vcl_file=&quot;$OPTARG&quot;\r\n            fi \r\n            ;; \r\n        T)\r\n            if [ -n &quot;$OPTARG&quot; -a &quot;$OPTARG&quot; != &quot;${OPTARG%%:*}&quot; ]\r\n                then\r\n                mgmt_interface=&quot;$OPTARG&quot;\r\n            fi  \r\n            ;;  \r\n    esac\r\ndone\r\n\r\n# Sanity checks \r\nif [ ! -x &quot;$varnishadm&quot; ]\r\nthen\r\n    printf &gt;&amp;2 &quot;$msg_no_varnishadm&quot; $varnishadm\r\n    exit 1\r\nfi\r\n\r\nif [ -z &quot;$mgmt_interface&quot; ]\r\nthen\r\n    printf &gt;&amp;2 &quot;$msg_no_management&quot;\r\n    exit 1\r\nfi\r\n\r\nlogfile=$($tempfile)\r\npurge_command=&quot;vcl.list&quot;\r\n\r\n# Now run the purge command against the admin interface\r\nif [[ $purge_method = &quot;url&quot; ]]\r\nthen\r\n        purge_command=&quot;purge req.url == $url&quot;\r\n        printf &gt;&amp;2 &quot;$msg_purge_url&quot; $url | grep -v &quot;^$&quot; &gt; $logfile\r\nelse\r\n    if [[ $purge_method = &quot;regex&quot; ]]\r\n    then\r\n        purge_command=&quot;purge.url $regex&quot;\r\n        printf &gt;&amp;2 &quot;$msg_purge_regex&quot; $regex | grep -v &quot;^$&quot; &gt; $logfile\r\n    else\r\n        if [[ $purge_method = &quot;all&quot; ]]\r\n        then\r\n            purge_command=&quot;purge.url .&quot;\r\n            printf &gt;&amp;2 &quot;$msg_purge_all&quot; | grep -v &quot;^$&quot; &gt; $logfile\r\n        fi\r\n    fi\r\nfi\r\n\r\n# For some reason, using:\r\n#\r\n#   fi | grep -v &quot;^$&quot; &gt; $logfile\r\n#\r\n# results in purge_command assignment being wiped out\r\n# at the end of the block??\r\n\r\nif [ -z &quot;$purge_command&quot; ]\r\nthen\r\n    printf &gt;&amp;2 &quot;$msg_usagen&quot;\r\n    exit 1\r\nfi\r\n\r\n# echo &quot;cmd: $varnishadm -T $mgmt_interface $purge_command&quot;\r\n\r\nif $varnishadm -T $mgmt_interface $purge_command\r\nthen\r\n    printf &gt;&amp;2 &quot;$msg_purge_ok&quot;\r\nelse\r\n    printf &gt;&amp;2 &quot;$msg_purge_failed&quot;\r\n    exitstatus=1\r\nfi | grep -v &quot;^$&quot; &gt; $logfile\r\n\r\n# Blather\r\nif [ -z &quot;${quiet}&quot; -o -n &quot;$exitstatus&quot; ]\r\nthen\r\n    cat &gt;&amp;2 $logfile\r\nfi\r\n\r\n# Cleanup\r\nrm -f $logfile  \r\nexit $exitstatus\r\n<\/code><\/pre>\n<p>You can control how objects are purged from the cache with 3 options:<\/p>\n<ul>\n<li><code>-a<\/code>: purges all objects<\/li>\n<li><code>-u &lt;url&gt;<\/code>: purges an exact url<\/li>\n<li><code>-r &lt;regexp&gt;<\/code>: purges objects matching a regular expression<\/li>\n<h3>Examples<\/h3>\n<pre><code>\r\n# Purges all objects\r\npurge-cache -a\r\n \r\n# Purges all objects starting with &quot;\/products&quot;\r\npurge-cache -r &#39;^\/products&#39;\r\n\r\n# Purges objects with exact URL\r\npurge-cache -u &#39;\/en\/homepage&#39;\r\n<\/code><\/pre>\n<h3>Goal: no downtime<\/h3>\n<p>Both <code>reload-vcl<\/code> and <code>purge-cache<\/code> can be combined together in a single script to be <strong>triggered when deploying<\/strong> new VCL code or new backend applications. Instead of restarting varnish, which I really don&#39;t like, and it&#39;s <strong>not very reliable either<\/strong> (on Debian sometimes it won&#39;t come back up), I use <code>purge-cache -a<\/code> to purge all objects and then <code>reload-vcl<\/code> to load and use the newly deployed VCL code.<\/p>\n<p>This procedure has no downtime at all. The effect of purging all objects can potentially be hard on the backends, but we&#39;re not at that point yet. Usually in the busiest applications we have, it takes around 10-20 seconds to reach 70%-75% of hit rate, so I would say that&#39;s not really a problem right now.<\/p>\n<h3>Download!<\/h3>\n<p>You can download the <a href=\"https:\/\/gist.github.com\/890217\" rel=\"nofollow\">purge-cache script from github<\/a>. I contacted the maintainer of the <code>reload-vcl<\/code> script. Maybe he will include purge-cache in the next release of the varnish debian package&#8230; or maybe I could package it as a Perl CPAN module.<\/p>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>I&#39;ve been using varnish mostly on Debian systems. I found the reload-vcl script included in Debian to be useful. The reload-vcl script It&#39;s part of the standard varnish debian package. It uses the system defaults in \/etc\/defaults\/varnish, so it knows how to correctly invoke the varnishadm utility to perform administrative commands. As the name implies, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[268,63,316,315,76,314,60,48],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A command line tool for Debian to purge Varnish objects - Random hacking<\/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:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A command line tool for Debian to purge Varnish objects - Random hacking\" \/>\n<meta property=\"og:description\" content=\"I&#039;ve been using varnish mostly on Debian systems. I found the reload-vcl script included in Debian to be useful. The reload-vcl script It&#039;s part of the standard varnish debian package. It uses the system defaults in \/etc\/defaults\/varnish, so it knows how to correctly invoke the varnishadm utility to perform administrative commands. As the name implies, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\" \/>\n<meta property=\"og:site_name\" content=\"Random hacking\" \/>\n<meta property=\"article:published_time\" content=\"2011-04-03T08:45:57+00:00\" \/>\n<meta name=\"author\" content=\"cosimo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"cosimo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\"},\"author\":{\"name\":\"cosimo\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\"},\"headline\":\"A command line tool for Debian to purge Varnish objects\",\"datePublished\":\"2011-04-03T08:45:57+00:00\",\"dateModified\":\"2011-04-03T08:45:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\"},\"wordCount\":357,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\"},\"keywords\":[\"cache\",\"github\",\"no-downtime\",\"purge\",\"servers\",\"tool\",\"varnish\",\"web\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\",\"url\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\",\"name\":\"A command line tool for Debian to purge Varnish objects - Random hacking\",\"isPartOf\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#website\"},\"datePublished\":\"2011-04-03T08:45:57+00:00\",\"dateModified\":\"2011-04-03T08:45:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.streppone.it\/cosimo\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A command line tool for Debian to purge Varnish objects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#website\",\"url\":\"https:\/\/www.streppone.it\/cosimo\/blog\/\",\"name\":\"Random hacking\",\"description\":\"Assume nothing. Code defensively. Keep it simple, stupid!\",\"publisher\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.streppone.it\/cosimo\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\",\"name\":\"cosimo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g\",\"caption\":\"cosimo\"},\"logo\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.streppone.it\/cosimo\/blog\/author\/cosimo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A command line tool for Debian to purge Varnish objects - Random hacking","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:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/","og_locale":"en_US","og_type":"article","og_title":"A command line tool for Debian to purge Varnish objects - Random hacking","og_description":"I&#39;ve been using varnish mostly on Debian systems. I found the reload-vcl script included in Debian to be useful. The reload-vcl script It&#39;s part of the standard varnish debian package. It uses the system defaults in \/etc\/defaults\/varnish, so it knows how to correctly invoke the varnishadm utility to perform administrative commands. As the name implies, [&hellip;]","og_url":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/","og_site_name":"Random hacking","article_published_time":"2011-04-03T08:45:57+00:00","author":"cosimo","twitter_card":"summary_large_image","twitter_misc":{"Written by":"cosimo","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#article","isPartOf":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/"},"author":{"name":"cosimo","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1"},"headline":"A command line tool for Debian to purge Varnish objects","datePublished":"2011-04-03T08:45:57+00:00","dateModified":"2011-04-03T08:45:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/"},"wordCount":357,"commentCount":0,"publisher":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1"},"keywords":["cache","github","no-downtime","purge","servers","tool","varnish","web"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/","url":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/","name":"A command line tool for Debian to purge Varnish objects - Random hacking","isPartOf":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#website"},"datePublished":"2011-04-03T08:45:57+00:00","dateModified":"2011-04-03T08:45:57+00:00","breadcrumb":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2011\/04\/a-command-line-tool-for-debian-to-purge-varnish-objects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.streppone.it\/cosimo\/blog\/"},{"@type":"ListItem","position":2,"name":"A command line tool for Debian to purge Varnish objects"}]},{"@type":"WebSite","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#website","url":"https:\/\/www.streppone.it\/cosimo\/blog\/","name":"Random hacking","description":"Assume nothing. Code defensively. Keep it simple, stupid!","publisher":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.streppone.it\/cosimo\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1","name":"cosimo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g","caption":"cosimo"},"logo":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/"},"url":"https:\/\/www.streppone.it\/cosimo\/blog\/author\/cosimo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/posts\/450"}],"collection":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/comments?post=450"}],"version-history":[{"count":0,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/posts\/450\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/media?parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/categories?post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/tags?post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}