{"id":13295,"date":"2016-06-15T12:15:02","date_gmt":"2016-06-15T09:15:02","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=13295"},"modified":"2016-06-14T12:43:58","modified_gmt":"2016-06-14T09:43:58","slug":"triggering-client-cache-refresh","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/","title":{"rendered":"Triggering a Client Cache Refresh"},"content":{"rendered":"<p>More and more web sites are using a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single-page_application\">single page<\/a> style architecture. \u00a0This means there is a bunch of static resources (aka assets) including:<\/p>\n<ul>\n<li>JS<\/li>\n<li>CSS<\/li>\n<li>HTML templates<\/li>\n<li>Images<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>all residing in the client&#8217;s browser. \u00a0For performance reasons, the static content is usually cached. And like all caches, eventually the data gets stale and the cache must be refreshed. \u00a0One excellent technique for achieving this in the web tier is <i>Cache busting<\/i> (see: <a href=\"https:\/\/css-tricks.com\/strategies-for-cache-busting-css\/\">here<\/a>\u00a0and <a href=\"http:\/\/webassets.readthedocs.io\/en\/latest\/expiring.html)\">here<\/a>).<br \/>\nHowever, even using this excellent pattern there still needs to be some sort of trigger to indicate that things have gone out of date. \u00a0Some options:<\/p>\n<h2>HTML5 Sockets<\/h2>\n<p>In this case a server can send a request to any client to say go and get the new stuff.<\/p>\n<h3>Comet style polling<\/h3>\n<p>The Client consistently polls the server in the background asking if there is a new version available. When the server says there is, the client is triggered to start cache busting.<\/p>\n<p>Both of these are good approaches but in some edge cases may not be available:<\/p>\n<ol>\n<li>Architecture may not allow HTML5 sockets &#8211; might be some secure banking web site that just doesn&#8217;t like it.<\/li>\n<li>The <i>Comet<\/i> style polling might be too intensive and may just leave open edge cases where a critical update is needed but the polling thread is waiting to get fired.<\/li>\n<\/ol>\n<h3>Client refresh notification pattern<\/h3>\n<p>Recently, on a project neither of the above approaches were available, so I needed something else which I shall now detail. \u00a0The solution was based on some existing concepts already in the architecture (which are useful for other things) and some new ones that needed to be introduced:<\/p>\n<ol>\n<li>The UI always knows the current version it is on. \u00a0This was already burnt into the UI as part of the build process.<\/li>\n<li>Every UI was already sending up the version it is on in a custom header. It was doing this for every request. \u00a0<i>Note: this is very useful as it can make diagnosing problems easier. Someone seeing weird problems, nice to be able see their are on a old version straight away.<\/i><\/li>\n<\/ol>\n<p>The following new concepts were then introduced:<\/p>\n<ol>\n<li>The server would now always store the latest client version it has received. \u00a0This is easy to do and again handy thing to have anyway.<\/li>\n<li>The server would then always add a custom header to every response to indicate the latest client version it has received. \u00a0Again, useful thing to have for anyone doing a bit of debugging with firebug or chrome web tools<\/li>\n<li>Some simple logic would then be in the client, so that when it saw a different version in response to the one it sent up, it knows there&#8217;s a later version out there and that&#8217;s the trigger to start <i>cache busting<\/i>! \u00a0 This should be done in central place for example an Angular filter (<i>if you are using Angular<\/i>)<\/li>\n<li>Then as part of every release, just hit the server with latest client in the smoke testing.<\/li>\n<li>As soon as any other client makes a request, it will be told that there is a later client version out there and it should start cache busting.<\/li>\n<\/ol>\n<p>So the clients effectively tell each other about the latest version but without ever talking to each other it&#8217;s all via the server. \u00a0It&#8217;s like the <a href=\"https:\/\/sourcemaking.com\/design_patterns\/mediator\">mediator<\/a> pattern. But it&#8217;s still probably confusing. So let&#8217;s take a look at a diagram.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/06\/Updating-UI-Artifactes.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-13296\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/06\/Updating-UI-Artifactes.png\" alt=\"Updating UI Artifactes\" width=\"706\" height=\"380\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/06\/Updating-UI-Artifactes.png 706w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/06\/Updating-UI-Artifactes-300x160.png 300w\" sizes=\"(max-width: 706px) 100vw, 706px\" \/><\/a><\/p>\n<div>With respect to diagram above:<\/div>\n<div>\n<ul>\n<li>UI 1 has a later version (<i>for example 1.5.1<\/i>) of static assets than UI 2 \u00a0(<i>for example 1.5.0<\/i>)<\/li>\n<li>Server thinks the latest version static assets is 1.5.0<\/li>\n<li>UI 1 then makes a request to the server and sends up the version of static assets it has e.g. 1.5.1<\/li>\n<li>Server sees 1.5.1 is newer than 1.5.0 and then updates its latest client version variable to 1.5.1<\/li>\n<li>UI 2 makes a request to the server and sends up the version of static assets it has which is 1.5.0<\/li>\n<li>Server sends response to UI 2 with a response header saying that the latest client version is 1.5.1<\/li>\n<li>UI 2 checks and sees that the response header client version is different to the version sent up and then starts busting the cache<\/li>\n<\/ul>\n<div>Before the observant amongst you start saying this will never work in a real enterprise environment as you never have just one server (as in one JVM) you have several &#8211; true. \u00a0But then you just store the latest client version in a distributed cache (e.g. <a href=\"http:\/\/infinispan.org\/\">Infinispan<\/a>) that they can all access.<\/div>\n<div><\/div>\n<div>Note: In this example I am using two web clients and one back end server. \u00a0But note the exact same pattern could be used for back end micro-services that communicate with each other. \u00a0Basically anything where there is a range of distributed clients (<i>they don&#8217;t have to be web browsers<\/i>) and caching of static resources is required this could be used.<\/div>\n<\/div>\n<div><\/div>\n<div>Until the next time, take care of yourselves.<\/div>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/dublintech.blogspot.gr\/2016_06_01_archive.html\">Triggering a Client Cache Refresh<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a>\u00a0Alex Staveley at the <a href=\"http:\/\/dublintech.blogspot.com\/\">Dublin&#8217;s Tech Blog <\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML templates Images &#8230; all residing in the client&#8217;s browser. \u00a0For performance reasons, the static content is usually cached. And like all caches, eventually the data gets stale and &hellip;<\/p>\n","protected":false},"author":169,"featured_media":927,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-13295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Triggering a Client Cache Refresh - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML\" \/>\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.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Triggering a Client Cache Refresh - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-15T09:15:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alex Staveley\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Staveley\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\"},\"author\":{\"name\":\"Alex Staveley\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f60451ac8770a886b0ce1be2066b2645\"},\"headline\":\"Triggering a Client Cache Refresh\",\"datePublished\":\"2016-06-15T09:15:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\"},\"wordCount\":837,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"articleSection\":[\"Web Dev\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\",\"name\":\"Triggering a Client Cache Refresh - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"datePublished\":\"2016-06-15T09:15:02+00:00\",\"description\":\"More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web Dev\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/web-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Triggering a Client Cache Refresh\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f60451ac8770a886b0ce1be2066b2645\",\"name\":\"Alex Staveley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g\",\"caption\":\"Alex Staveley\"},\"description\":\"Alex Staveley is a software professional passionate about software engineering and technical architecture. He blogs about architectural approaches, Java topics, web solutions and various technical bits and pieces.\",\"sameAs\":[\"http:\/\/Dublin's%20Tech%20Blog%20\",\"http:\/\/www.linkedin.com\/pub\/alex-staveley\/14\/977\/4a8\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/alex-staveley\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Triggering a Client Cache Refresh - Web Code Geeks - 2026","description":"More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML","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.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/","og_locale":"en_US","og_type":"article","og_title":"Triggering a Client Cache Refresh - Web Code Geeks - 2026","og_description":"More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML","og_url":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2016-06-15T09:15:02+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","type":"image\/jpeg"}],"author":"Alex Staveley","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Alex Staveley","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/"},"author":{"name":"Alex Staveley","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f60451ac8770a886b0ce1be2066b2645"},"headline":"Triggering a Client Cache Refresh","datePublished":"2016-06-15T09:15:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/"},"wordCount":837,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","articleSection":["Web Dev"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/","url":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/","name":"Triggering a Client Cache Refresh - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","datePublished":"2016-06-15T09:15:02+00:00","description":"More and more web sites are using a single page style architecture. \u00a0This means there is a bunch of static resources (aka assets) including: JS CSS HTML","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/web-development\/triggering-client-cache-refresh\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Web Dev","item":"https:\/\/www.webcodegeeks.com\/category\/web-development\/"},{"@type":"ListItem","position":3,"name":"Triggering a Client Cache Refresh"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/f60451ac8770a886b0ce1be2066b2645","name":"Alex Staveley","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g","caption":"Alex Staveley"},"description":"Alex Staveley is a software professional passionate about software engineering and technical architecture. He blogs about architectural approaches, Java topics, web solutions and various technical bits and pieces.","sameAs":["http:\/\/Dublin's%20Tech%20Blog%20","http:\/\/www.linkedin.com\/pub\/alex-staveley\/14\/977\/4a8"],"url":"https:\/\/www.webcodegeeks.com\/author\/alex-staveley\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/13295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=13295"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/13295\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/927"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=13295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=13295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=13295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}