Filter cached REST-Data vs multiple REST-calls

Issue

I’m building an Angular Shop-Frontend which consumes a REST-API with Restangular.

To get the articles from the API, I use Restangular.all("articles") and I setup Restangular to cache this request.

When I want to get one article from the API, for example on the article-detail page by it’s linkname and later somewhere else (on the cart-summary) by it’s id, I would need 3 REST-calls:

  • /api/articles
  • /api/articles?linkname=some_article
  • /api/articles/5

But actually, the data from the two later calls is already available from the cached first call.

So instead I thought about using the cached articles and filter them to save the additional REST-calls.
I built these functions into my ArticleService and it works as expected:

function getOne(articleId) {
  var article = $q.defer();
  restangular.all("articles").getList().then(function(articles) {
    var filtered = $filter('filter')(wines, {id: articleId}, true);
    article.resolve((filtered.length == 1) ? filtered[0] : null);
  });
  return article.promise;
}

function getOneByLinkname(linkname) {
  var article = $q.defer();
  restangular.all("articles").getList().then(function(articles) {
    var filtered = $filter('filter')(articles, {linkname: linkname}, true);
    article.resolve((filtered.length == 1) ? filtered[0] : null);
  });
  return article.promise;
}

My questions concerning this approach:

Are there any downsides I don’t see right now? What would be the correct way to go? Is my approach legitimate, to have as little REST-calls as possible?

Thanks for your help.

Solution

Are there any downsides I don’t see right now?

Depends on how the functionality of your application. If it requires real time data, then having REST calls performed to obtain the latest data would be a requirement.

What would be the correct way to go? Is my approach legitimate, to have as little REST-calls as possible?

Depends still. If you want, you can explore push data notifications, such that when your data from the server is changed or modified, you could push those info to your client. That way, the REST operations happens based on conditions you would have defined.

Answered By – Batuta

Answer Checked By – Willingham (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.