Cache API Calls
This code sample will allow you to cache API calls for a super fast UX.
function makeApiCall(url, cbk, apiCallneedsRefresh, args) { if (localStorage.getItem("apiResp-" + url) && !apiCallneedsRefresh && (!args || JSON.stringify(args) == "{}")) { console.log("Will use cached " + url + " API response."); var resp = JSON.parse(localStorage.getItem("apiResp-" + url)); cbk(resp); return; } var req = new XMLHttpRequest(); if (args) { req.args = args; req.open("POST", url, true); //req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req.setRequestHeader("Content-type", "application/json"); } else { req.open("GET", url, true); } req.url = url; req.onerror = function (e) { var errMsg=""; if (e.position === 0 && e.totalSize === 0) { errMsg="No connection ☹"; } else { errMsg="API Error
" + JSON.stringify(e) + "
" + req.status + " - " + req.statusText; } alert(errMsg); console.log("API Error
" + JSON.stringify(e)); }; req.onload = function (evt) { if (req.status === 404) { alert("Whoops, something went wrong.
Resource not found."); return; } else if (req.status === 401) { alert("Unauthorized."); return; } else if (req.status === 500) { alert("Currently unavailable: server error"); return; } var resp = JSON.parse(evt.target.responseText); cbk(resp); if (!args) { localStorage.setItem("apiResp-" + url, evt.target.responseText); console.log("Api call to " + url + " cached.", resp); } else { console.log("Api call to " + url + " completed.", args, resp); } }; req.send(JSON.stringify(args)); }
Directions:
- url is the full url you want to retrieve.
- cbk is the callback function to be executed when a response is received.
- apiCallneedsRefresh is a boolean variable to force a fresh call.
- args is a JSON object to be POSTed.
- sample usage: makeApiCall("http://google.com/API/search", function(r){console.log(r);}, true, {name:"John",last_name:"Doe"});
Note:
This snippet focuses on iOS development. Make sure to verify/adapt any vendor prefixes. Back to main listing.
Published: Sun, Jan 10 2016 @ 18:23:03
Back to Blog