Implementing caching in an API function Last updated: 26. Jun 2025

This function implements caching for an API endpoint by checking the 'If-Modified-Since' header and returning a 304 status if the content has not been modified.

Implementation steps:

  1. Server-Side (API): setHeader "Last-Modified" and check If-Modified-Since

  2. Client-Side: Make sure caching is enabled (if so, nothing needs to be changed)

  3. Testing: Make sure you haven't disabled caching in the developer toolbar

  1. Server-Side: setHeader "Last-Modified" and check If-Modified-Since

// Format the site's last modified date
let formattedSiteModifiedDate = docly.format(request.sitemodified, "R");
docly.setHeader("Last-Modified", formattedSiteModifiedDate);

// Retrieve the 'If-Modified-Since' header from the request
let ifModifiedSinceHeader = docly.getHeader("If-Modified-Since");
if (ifModifiedSinceHeader) {
    // Convert the 'If-Modified-Since' header to a Date object
    let ifModifiedSinceDate = new Date(ifModifiedSinceHeader);

    // Calculate the difference between the 'If-Modified-Since' date and the site's last modified date
    let dateDifference = docly.dateDiff(ifModifiedSinceDate, request.sitemodified);
    
    // If the difference in seconds is less than 1, set the result code to 304 (Not Modified)
    if (dateDifference.TotalSeconds < 1) {
        let formattedSiteModifiedDate = docly.format(request.sitemodified, "R");
        docly.setHeader("Last-Modified", formattedSiteModifiedDate);
        return docly.setResultCode(304);
    }
}

// Return an embedded file?
// docly.downloadEmbeded(file, embeddedId, "filename.pdf");

// Return what ever object you want here (not cached)
return {
    "ifModified": ifModifiedSinceHeader,
    "siteModified": formattedSiteModifiedDate,
    "diff": dateDifference.TotalSeconds
};

  1. Client-Side: Make sure caching is enabled (if so, nothing needs to be changed)

Modern browsers generally cache responses based on HTTP headers (like Last-Modified or ETag). While the standard fetch API respects these headers, jQuery's AJAX functions (like $.get or $.ajax) might append a cache-busting parameter (_={timestamp}) by default for certain data types.

To ensure caching is allowed for a $.get request, explicitly set the cache option to true:

// Example: Using $.get with caching explicitly enabled
$.get("API/test").then(function(data) {
   // Handle the response data here
   console.log("Data received:", data);
}).fail(function(jqXHR, textStatus, errorThrown) {
   // Handle errors
   console.error("Request Failed:", textStatus, errorThrown);
});

  1. Testing: Make sure you haven't disabled caching in the developer toolbar

When testing API caching, ensure that the "Disable cache" option is not checked in your browser's developer toolbar. This setting is typically found under the "Network" tab.