{"id":31705,"date":"2024-09-03T17:50:47","date_gmt":"2024-09-03T22:50:47","guid":{"rendered":"https:\/\/wpengine.com\/builders\/?p=31705"},"modified":"2025-03-31T15:11:38","modified_gmt":"2025-03-31T20:11:38","slug":"wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform","status":"publish","type":"post","link":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/","title":{"rendered":"WP Engine&#8217;s Node.js Edge Cache Purge Library for our Headless Platform"},"content":{"rendered":"\n<p>Efficient caching is essential for maintaining performance in modern web applications, but keeping cached content up-to-date can be challenging.&nbsp; In this article, I will discuss how WP Engine&#8217;s Edge Cache Purge Library for Node.js addresses this by allowing targeted cache purging through specific paths or tags, rather than clearing the entire cache.<\/p>\n\n\n\n<div class=\"wp-block-group has-polar-background-color has-background is-layout-flow wp-container-core-group-is-layout-7a03825d wp-block-group-is-layout-flow\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--40)\">\n<p class=\"has-large-font-size\"><strong>Table of Contents<\/strong><\/p>\n\n\n\n<ul id=\"Prerequisites\" class=\"wp-block-list\">\n<li><a href=\"#prerequisites\">Prerequisites<\/a><\/li>\n\n\n\n<li><a href=\"#understanding-edge-cache-roles\">Understanding Edge Cache And Its Role in Headless WP<\/a><\/li>\n\n\n\n<li><a href=\"#how-it-differs-from-other-caching-layers\">How It Differs from Other Caching Layers<\/a><\/li>\n\n\n\n<li><a href=\"#edge-cache-vs-others\">Edge Cache vs. Other Caches<\/a><\/li>\n\n\n\n<li><a href=\"#benefits-of-edge-cache\">Benefits of Edge Cache<\/a><\/li>\n\n\n\n<li><a href=\"#setup-and-install-with-sveltekit\">Setup And Installation with SvelteKit<\/a><\/li>\n\n\n\n<li><a href=\"#conclusion\">Conclusion<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<p>If you prefer the video format of this article, please access it here:<\/p>\n\n\n\n<iframe class=\"youtube-video\" src=\"https:\/\/www.youtube.com\/embed\/HFD0fEd25vs\" title=\"YouTube video player\" frameborder=\"0\" style=\"display: block; margin: auto; width: 100%; height: 400px;\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisites\">Prerequisites<\/h2>\n\n\n\n<p>Before reading this article, you should have the following prerequisites checked off:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Foundational knowledge of JavaScript frameworks <\/li>\n\n\n\n<li>A WP engine headless WordPress platform account<\/li>\n\n\n\n<li><a href=\"https:\/\/nodejs.org\/en\">Node.js <\/a><\/li>\n<\/ul>\n\n\n\n<p>If you\u2019re looking for a headless platform to develop on, you can get started with a WP Engine Headless WordPress sandbox site for free:<\/p>\n\n\n\n<div class=\"wp-block-group has-base-color has-heliotrope-background-color has-text-color has-background has-link-color wp-elements-60580c77f35127ab4c58efd3ae854863 has-global-padding is-layout-constrained wp-container-core-group-is-layout-9b866ece wp-block-group-is-layout-constrained\" style=\"border-radius:12px;margin-bottom:var(--wp--preset--spacing--30);padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-group alignwide is-content-justification-left is-layout-flex wp-container-core-group-is-layout-4bb02320 wp-block-group-is-layout-flex\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<p style=\"font-size:26px;font-style:normal;font-weight:700;letter-spacing:-1px;line-height:1\">Headless<br>Platform<\/p>\n\n\n\n<p class=\"has-small-font-size wp-container-content-9cfa9a5a\" style=\"line-height:1.5\">The all-in-one platform for <br>radically fast headless sites.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-right is-nowrap is-layout-flex wp-container-core-buttons-is-layout-b315634e wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-outline-base\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/wpeng.in\/headless-platform\/\" style=\"border-radius:99px;padding-top:10px;padding-right:24px;padding-bottom:10px;padding-left:24px\" target=\"_blank\" rel=\"noreferrer noopener\">Try for free \u2192<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"understanding-edge-cache-roles\">Understanding Edge Cache and Its Role in Headless WordPress <\/h2>\n\n\n\n<p>In order to understand the benefit of this feature by WP engine, let&#8217;s first define and discuss what edge cache is.  <\/p>\n\n\n\n<p>Edge caching refers to storing cached content at edge locations, which are servers distributed globally closer to users. This reduces latency by delivering content from the nearest server rather than the origin server, improving load times and overall user experience.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"how-it-differs-from-other-caching-layers\">How It Differs from Other Caching Layers<\/h3>\n\n\n\n<p>You might ask yourself how it differs from other caching layers.  In a headless WordPress setup using a JavaScript frontend framework and <a href=\"https:\/\/github.com\/wp-graphql\">WPGraphQL<\/a>, multiple caching layers exist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Application-Level Caching<\/strong>: This involves caching GraphQL queries or API responses within the application. For example, in Next.js&#8217;s server-side rendering or incremental static regeneration. It focuses on reducing the need to repeatedly fetch data from the WordPress backend.<\/li>\n\n\n\n<li><strong>CDN Caching<\/strong>: Content Delivery Networks (CDNs) cache static assets like images, CSS, and JavaScript files at edge locations. This is similar to edge caching but focused on static resources.<\/li>\n\n\n\n<li><strong>Database Caching<\/strong>: WordPress can use database-level caching with object caches like Redis to speed up database queries and reduce server load.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"edge-cache-vs-others\">Edge Cache vs. Other Caches<\/h3>\n\n\n\n<p>The main differences between edge cache versus other caching layers are as follows:<\/p>\n\n\n\n<p><strong>Edge Cache<\/strong>: Specifically stores whole pages or HTML responses at edge locations. It can be dynamically purged by paths or tags using tools like<a href=\"https:\/\/www.npmjs.com\/package\/@wpengine\/edge-cache\"> WP Engine&#8217;s Edge Cache Purge Library<\/a>. This makes it highly efficient for frequently changing content, allowing rapid updates without waiting for other cache layers to expire.<\/p>\n\n\n\n<p><strong>Application and Database Caches<\/strong>: These are closer to the backend and primarily reduce server load by avoiding redundant data processing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"benefits-of-edge-cache\">Benefits of Edge Cache in Headless WordPress<\/h2>\n\n\n\n<p>Here are the main benefits you get when using the edge cache library by WP engine:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"><strong>Performance<\/strong>: Delivering cached content from locations near users significantly reduces latency.<\/span><\/li>\n\n\n\n<li><strong>Scalability<\/strong>: It handles high traffic efficiently without burdening the origin server.<\/li>\n\n\n\n<li><strong>Dynamic Purging<\/strong>: Allows for granular control over what gets purged and updated, ensuring content remains fresh without unnecessary full cache clears.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"setup-and-install-with-sveltekit\">Setup and Installation With SvelteKit<\/h2>\n\n\n\n<p>In this example, let&#8217;s use <a href=\"https:\/\/kit.svelte.dev\/docs\/introduction\">SvelteKit<\/a> <em><strong>(you can use any framework you want and it will work)<\/strong><\/em>, a great frontend framework similar to Nuxt and Next.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>First, install and pull down the SvelteKit framework with <code>npm create<\/code>:<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">create<\/span> <span class=\"hljs-selector-tag\">svelte<\/span><span class=\"hljs-keyword\">@latest<\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>2. Once you have a SvelteKit app spun up, navigate into the directory of your project and install the edge cache library:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-keyword\">@wpengine<\/span>\/edge-cache \n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>3. Now, ensure you have the necessary environment variables configured, such as authentication credentials and your WPGraphQL endpoint\/WordPress endpoint.<\/p>\n\n\n\n<p>4. In this example, let&#8217;s purge by path.  Navigate to the <code>src\/routes<\/code> folder.  In the <code>routes<\/code> folder, create a folder called <code>blog\/[uri]<\/code> . Once that is done, in the <code>[uri]<\/code> folder, create a <code>+page.svelte<\/code> file.   You can drop this code block in or something similar to what you decide to use framework-wise:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\"><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\">  <span class=\"hljs-keyword\">import<\/span> { onMount } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'svelte'<\/span>;<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\">  <\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\">  <span class=\"hljs-keyword\">let<\/span> posts = &#91;];<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\">  <span class=\"hljs-keyword\">let<\/span> loading = <span class=\"hljs-literal\">true<\/span>;<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\">  <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">fetchGraphQL<\/span>(<span class=\"hljs-params\">query = {}<\/span>) <\/span>{<\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\">    <span class=\"hljs-keyword\">const<\/span> queryParams = <span class=\"hljs-keyword\">new<\/span> URLSearchParams({ query }).toString();<\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\">    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> fetch(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${<span class=\"hljs-keyword\">import<\/span>.meta.env.VITE_GRAPHQL_ENDPOINT}<\/span>?<span class=\"hljs-subst\">${queryParams}<\/span>`<\/span>, {<\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">      <span class=\"hljs-attr\">method<\/span>: <span class=\"hljs-string\">'GET'<\/span>,<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">      <span class=\"hljs-attr\">headers<\/span>: {<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">        <span class=\"hljs-string\">'Accept'<\/span>: <span class=\"hljs-string\">'application\/json'<\/span>,<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">      },<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">    });<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">    <span class=\"hljs-keyword\">if<\/span> (!response.ok) {<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\">      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">`Network error: <span class=\"hljs-subst\">${response.statusText}<\/span>`<\/span>);<\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">    }<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">    <span class=\"hljs-keyword\">return<\/span> response.json();<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">  }<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">  <span class=\"hljs-keyword\">const<\/span> GET_POSTS_QUERY = <span class=\"hljs-string\">`<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">    query GetPosts {<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">      posts(first: 5) {<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">        nodes {<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">          id<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">          title<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">          slug<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">          uri<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">          date<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">        }<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">      }<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">    }<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><span class=\"hljs-string\">  `<\/span>;<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">  onMount(<span class=\"hljs-keyword\">async<\/span> () =&gt; {<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">    <span class=\"hljs-keyword\">try<\/span> {<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">      <span class=\"hljs-keyword\">const<\/span> { data, errors } = <span class=\"hljs-keyword\">await<\/span> fetchGraphQL(GET_POSTS_QUERY);<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">      <span class=\"hljs-keyword\">if<\/span> (errors) {<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">        <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">'Errors returned from server:'<\/span>, errors);<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">      } <span class=\"hljs-keyword\">else<\/span> {<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">        posts = data.posts.nodes;<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">      }<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">    } <span class=\"hljs-keyword\">catch<\/span> (error) {<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">      <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">'An error occurred:'<\/span>, error);<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">    } <span class=\"hljs-keyword\">finally<\/span> {<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">      loading = <span class=\"hljs-literal\">false<\/span>;<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">    }<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\">  });<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-string\"><\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\">{#if loading}<\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\">  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"flex justify-center items-center min-h-screen\"<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>Loading...<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">{:else}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"bg-custom-dark min-h-screen text-hot-pink p-8\"<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-4xl mb-8 font-bold text-center\"<\/span>&gt;<\/span>Fran's Headless WP with SvelteKit Blog Example<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">ul<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"space-y-4\"<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">      {#each posts as post}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">li<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-center\"<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">{<\/span>`\/<span class=\"hljs-attr\">blog<\/span>${<span class=\"hljs-attr\">post.uri<\/span>}`} <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-2xl hover:text-pink-600\"<\/span>&gt;<\/span>{post.title}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">          {#if post.date}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-gray-500 text-sm\"<\/span>&gt;<\/span>{new Date(post.date).toLocaleDateString()}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">          {:else}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"text-gray-500 text-sm\"<\/span>&gt;<\/span>No date available<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">          {\/if}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">li<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">      {\/each}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">ul<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-tag\"><span class=\"javascript\"><span class=\"hljs-function\"><span class=\"hljs-string\"><span class=\"hljs-subst\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\"><span class=\"hljs-tag\">{\/if}<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This code block executes a single post detail page, dynamically grabbing the post data by its URI.<\/p>\n\n\n\n<p>Just to be clear, this is meant to focus on the framework agnosticism of the headless WordPress platform and this edge cache library. It is not meant to be a SveltKit tutorial. With that being said, you should be able to follow along and use whatever dynamic route file you have with whatever framework you choose.<\/p>\n\n\n\n<p>5. Now that we created the path we want to purge, let&#8217;s create the API route we will use to execute the purge logic. Navigate to <code>src\/routes<\/code> and create an <code>api\/purge\/+server.js<\/code> folder and file. Add this code block:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-comment\">\/\/ src\/routes\/api\/+server.js<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> { purgePaths } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@wpengine\/edge-cache'<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">GET<\/span>(<span class=\"hljs-params\">{ url }<\/span>) <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">const<\/span> uri = url.searchParams.get(<span class=\"hljs-string\">'uri'<\/span>); <span class=\"hljs-comment\">\/\/ Extracting 'uri' parameter from the query string<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">try<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">if<\/span> (uri) {\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-comment\">\/\/ Purge the specific blog path<\/span>\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-keyword\">await<\/span> purgePaths(<span class=\"hljs-string\">`\/blog\/<span class=\"hljs-subst\">${uri}<\/span>`<\/span>);\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-keyword\">return<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-attr\">status<\/span>: <span class=\"hljs-number\">200<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-attr\">body<\/span>: { <span class=\"hljs-attr\">success<\/span>: <span class=\"hljs-literal\">true<\/span>, <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">`Cache purged for \/blog\/<span class=\"hljs-subst\">${uri}<\/span>`<\/span> }\n<\/span><\/span><span class='shcb-loc'><span>            };\n<\/span><\/span><span class='shcb-loc'><span>        } <span class=\"hljs-keyword\">else<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-keyword\">return<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-attr\">status<\/span>: <span class=\"hljs-number\">400<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>                <span class=\"hljs-attr\">body<\/span>: { <span class=\"hljs-attr\">success<\/span>: <span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'URI is required'<\/span> }\n<\/span><\/span><span class='shcb-loc'><span>            };\n<\/span><\/span><span class='shcb-loc'><span>        }\n<\/span><\/span><span class='shcb-loc'><span>    } <span class=\"hljs-keyword\">catch<\/span> (error) {\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">return<\/span> {\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-attr\">status<\/span>: <span class=\"hljs-number\">500<\/span>,\n<\/span><\/span><span class='shcb-loc'><span>            <span class=\"hljs-attr\">body<\/span>: { <span class=\"hljs-attr\">success<\/span>: <span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-attr\">message<\/span>: error.message }\n<\/span><\/span><span class='shcb-loc'><span>        };\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>At the top of this file, we import the <code>purgePaths<\/code> function from the WP engine Edge Cache library, which is used to purge cache for specific paths.<\/p>\n\n\n\n<p>Following that we define an async function that handles GET requests to that endpoint.  Then we have a const that extracts the <code>uri<\/code> param from the query string for the request URL.<\/p>\n\n\n\n<p>If the <code>uri<\/code> is provided, it calls the <code>purgePath<\/code> function with the full path, then returns a success response with status 200.<\/p>\n\n\n\n<p>If <code>uri<\/code> is not present, it returns a 400 status with an error message indicating that the URI is required.  <\/p>\n\n\n\n<p>Following that, we catch any errors during the purge process and return a 500 status with the error message, indicating an internal server error occurred during the operation.<\/p>\n\n\n\n<p>This version allows cache purging through a GET request by passing the <code>uri<\/code> parameter directly in the query string.  <\/p>\n\n\n\n<p>You would have a URL that looks something like this when you pass the URI parameter directly into the query string:<\/p>\n\n\n\n<p><code>https:your-wpengine-site\/api\/purge?uri=some-blog-post<\/code><\/p>\n\n\n\n<p>Once you have this endpoint, you can set it up in a webhook, for example, to automate the purge. This ensures that when a user visits a blog detail page, you can selectively purge the cache for that specific path, keeping your content up-to-date efficiently.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p>The WP engine Edge Cache Purge Library, allows you to manage edge cache dynamically and keep your content up-to-date with targeted purges. This setup offers a flexible, framework-agnostic solution that fits well with any Node. js-based application.<\/p>\n\n\n\n<p>We hope you have a better understanding and grasp of the edge cache library. As always, we&#8217;re stoked to hear your feedback and what you are building in headless WordPress! Hit us up in our&nbsp;<a href=\"https:\/\/discord.com\/invite\/headless-wordpress-836253505944813629\">Discord<\/a>!! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Efficient caching is essential for maintaining performance in modern web applications, but keeping cached content up-to-date can be challenging.&nbsp; In this article, I will discuss how WP Engine&#8217;s Edge Cache [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_EventAllDay":false,"_EventTimezone":"","_EventStartDate":"","_EventEndDate":"","_EventStartDateUTC":"","_EventEndDateUTC":"","_EventShowMap":false,"_EventShowMapLink":false,"_EventURL":"","_EventCost":"","_EventCostDescription":"","_EventCurrencySymbol":"","_EventCurrencyCode":"","_EventCurrencyPosition":"","_EventDateTimeSeparator":"","_EventTimeRangeSeparator":"","_EventOrganizerID":[],"_EventVenueID":[],"_OrganizerEmail":"","_OrganizerPhone":"","_OrganizerWebsite":"","_VenueAddress":"","_VenueCity":"","_VenueCountry":"","_VenueProvince":"","_VenueState":"","_VenueZip":"","_VenuePhone":"","_VenueURL":"","_VenueStateProvince":"","_VenueLat":"","_VenueLng":"","_VenueShowMap":false,"_VenueShowMapLink":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-31705","post","type-post","status-publish","format-standard","hentry","category-headless"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WP Engine&#039;s Node.js Edge Cache Purge Library for our Headless Platform - Builders<\/title>\n<meta name=\"description\" content=\"Learn about WP engine&#039;s Edge Cache Purge Library which allows you to efficiently manage caching for your headless WordPress site in any frontend framework in the headless WordPress platform with tags or paths!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WP engine&#039;s Node.js Edge Cache Purge Library for the headless WordPress platform\" \/>\n<meta property=\"og:description\" content=\"Learn about WP engine&#039;s Edge Cache Purge Library which allows you to efficiently manage caching for your headless WordPress site in any frontend framework in the headless WordPress platform with tags or paths!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/\" \/>\n<meta property=\"og:site_name\" content=\"Builders\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-03T22:50:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-31T20:11:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/09\/WPE-Builders-YouTube-ScreenshotLight-1920x1080-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Francis Agulto\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wpebuilders\" \/>\n<meta name=\"twitter:site\" content=\"@wpebuilders\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francis Agulto\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/\"},\"author\":{\"name\":\"Francis Agulto\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/bcdcb4ac0b215c34b6b30e440a24dc54\"},\"headline\":\"WP Engine&#8217;s Node.js Edge Cache Purge Library for our Headless Platform\",\"datePublished\":\"2024-09-03T22:50:47+00:00\",\"dateModified\":\"2025-03-31T20:11:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/\"},\"wordCount\":1034,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"articleSection\":[\"Headless\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/\",\"name\":\"WP Engine's Node.js Edge Cache Purge Library for our Headless Platform - Builders\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\"},\"datePublished\":\"2024-09-03T22:50:47+00:00\",\"dateModified\":\"2025-03-31T20:11:38+00:00\",\"description\":\"Learn about WP engine's Edge Cache Purge Library which allows you to efficiently manage caching for your headless WordPress site in any frontend framework in the headless WordPress platform with tags or paths!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WP Engine&#8217;s Node.js Edge Cache Purge Library for our Headless Platform\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#website\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"name\":\"Builders\",\"description\":\"Reimagining the way we build with WordPress.\",\"publisher\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#organization\",\"name\":\"WP Engine\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"contentUrl\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/WP-Engine-Horizontal@2x.png\",\"width\":348,\"height\":68,\"caption\":\"WP Engine\"},\"image\":{\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/wpebuilders\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCh1WuL54XFb9ZI6m6goFv1g\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/#\\\/schema\\\/person\\\/bcdcb4ac0b215c34b6b30e440a24dc54\",\"name\":\"Francis Agulto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c8a05c76944fc987d57296c96dc368055844527088c0aa44297edbfa8b82546?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c8a05c76944fc987d57296c96dc368055844527088c0aa44297edbfa8b82546?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0c8a05c76944fc987d57296c96dc368055844527088c0aa44297edbfa8b82546?s=96&d=mm&r=g\",\"caption\":\"Francis Agulto\"},\"description\":\"Fran Agulto is a Developer Advocate at WP Engine. He is a lover of all things headless WordPress, Rock Climbing, and overall being stoked for people that love what they do and share that stoke with others! Follow me on Twitter for cool stoked headless WP!\",\"url\":\"https:\\\/\\\/wpengine.com\\\/builders\\\/author\\\/francis-agultowpengine-com-2-2-2-2-2-2-2-2-2-2-2-3\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WP Engine's Node.js Edge Cache Purge Library for our Headless Platform - Builders","description":"Learn about WP engine's Edge Cache Purge Library which allows you to efficiently manage caching for your headless WordPress site in any frontend framework in the headless WordPress platform with tags or paths!","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:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/","og_locale":"en_US","og_type":"article","og_title":"WP engine's Node.js Edge Cache Purge Library for the headless WordPress platform","og_description":"Learn about WP engine's Edge Cache Purge Library which allows you to efficiently manage caching for your headless WordPress site in any frontend framework in the headless WordPress platform with tags or paths!","og_url":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/","og_site_name":"Builders","article_published_time":"2024-09-03T22:50:47+00:00","article_modified_time":"2025-03-31T20:11:38+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/09\/WPE-Builders-YouTube-ScreenshotLight-1920x1080-2.png","type":"image\/png"}],"author":"Francis Agulto","twitter_card":"summary_large_image","twitter_creator":"@wpebuilders","twitter_site":"@wpebuilders","twitter_misc":{"Written by":"Francis Agulto","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/#article","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/"},"author":{"name":"Francis Agulto","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/bcdcb4ac0b215c34b6b30e440a24dc54"},"headline":"WP Engine&#8217;s Node.js Edge Cache Purge Library for our Headless Platform","datePublished":"2024-09-03T22:50:47+00:00","dateModified":"2025-03-31T20:11:38+00:00","mainEntityOfPage":{"@id":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/"},"wordCount":1034,"commentCount":0,"publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"articleSection":["Headless"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/","url":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/","name":"WP Engine's Node.js Edge Cache Purge Library for our Headless Platform - Builders","isPartOf":{"@id":"https:\/\/wpengine.com\/builders\/#website"},"datePublished":"2024-09-03T22:50:47+00:00","dateModified":"2025-03-31T20:11:38+00:00","description":"Learn about WP engine's Edge Cache Purge Library which allows you to efficiently manage caching for your headless WordPress site in any frontend framework in the headless WordPress platform with tags or paths!","breadcrumb":{"@id":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wpengine.com\/builders\/wp-engines-node-js-edge-cache-purge-library-for-the-headless-wordpress-platform\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wpengine.com\/builders\/"},{"@type":"ListItem","position":2,"name":"WP Engine&#8217;s Node.js Edge Cache Purge Library for our Headless Platform"}]},{"@type":"WebSite","@id":"https:\/\/wpengine.com\/builders\/#website","url":"https:\/\/wpengine.com\/builders\/","name":"Builders","description":"Reimagining the way we build with WordPress.","publisher":{"@id":"https:\/\/wpengine.com\/builders\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wpengine.com\/builders\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wpengine.com\/builders\/#organization","name":"WP Engine","url":"https:\/\/wpengine.com\/builders\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/","url":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","contentUrl":"https:\/\/wpengine.com\/builders\/wp-content\/uploads\/2024\/05\/WP-Engine-Horizontal@2x.png","width":348,"height":68,"caption":"WP Engine"},"image":{"@id":"https:\/\/wpengine.com\/builders\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/wpebuilders","https:\/\/www.youtube.com\/channel\/UCh1WuL54XFb9ZI6m6goFv1g"]},{"@type":"Person","@id":"https:\/\/wpengine.com\/builders\/#\/schema\/person\/bcdcb4ac0b215c34b6b30e440a24dc54","name":"Francis Agulto","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0c8a05c76944fc987d57296c96dc368055844527088c0aa44297edbfa8b82546?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0c8a05c76944fc987d57296c96dc368055844527088c0aa44297edbfa8b82546?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c8a05c76944fc987d57296c96dc368055844527088c0aa44297edbfa8b82546?s=96&d=mm&r=g","caption":"Francis Agulto"},"description":"Fran Agulto is a Developer Advocate at WP Engine. He is a lover of all things headless WordPress, Rock Climbing, and overall being stoked for people that love what they do and share that stoke with others! Follow me on Twitter for cool stoked headless WP!","url":"https:\/\/wpengine.com\/builders\/author\/francis-agultowpengine-com-2-2-2-2-2-2-2-2-2-2-2-3\/"}]}},"_links":{"self":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/31705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/comments?post=31705"}],"version-history":[{"count":0,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/posts\/31705\/revisions"}],"wp:attachment":[{"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/media?parent=31705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/categories?post=31705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpengine.com\/builders\/wp-json\/wp\/v2\/tags?post=31705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}