JAMstack appeal

Where I dive into JAMstack stuff for a little while
Published on Tuesday, 16 May 2023

What is JAMstack?

Short for "JavaScript, API, and Markup". In short, the idea is that a website/webapp doesn't need server side processing, but can be precompiled to a set of markup files and scripts that communicate with APIs to deliver dynamic and data-bound features.

In fact, this site - my blog - is built around the same philosophy. It is built on Statiq, which is a static site generator that works with .NET. (I had originally tried out 11ty, which was also fine, but built on Nodejs, and I really loathe the Nodejs ecosystem at this point)

What is this post about then?

I wanted to get more into this whole JAMstack way of thinking and see how easy it would be to integrate a data service through an API. So for a little experiment I will hook up Datatables JS library to communicate with a simple little dummy service. The service will have server-side processing and run separately from the blog, and then the blog should be able to keep living as a static side and still have meaningful functionality.

It is not that interesting really, because of course that'll work, but I still want to build out an example to show how it works, so keep reading if you want to stick around for the ride 😉

Time for examples

With a lot of local HTML and some JS, I can get this fancy table. It is still all local data though:

$(document).ready(function () {
    $('#example').DataTable();
});
Name Position Office Age Start date Salary
Tiger Nixon System Architect Edinburgh 61 2011-04-25 $320,800
Garrett Winters Accountant Tokyo 63 2011-07-25 $170,750
Ashton Cox Junior Technical Author San Francisco 66 2009-01-12 $86,000
Cedric Kelly Senior Javascript Developer Edinburgh 22 2012-03-29 $433,060
Airi Satou Accountant Tokyo 33 2008-11-28 $162,700
Brielle Williamson Integration Specialist New York 61 2012-12-02 $372,000
Herrod Chandler Sales Assistant San Francisco 59 2012-08-06 $137,500
Rhona Davidson Integration Specialist Tokyo 55 2010-10-14 $327,900
Colleen Hurst Javascript Developer San Francisco 39 2009-09-15 $205,500
Sonya Frost Software Engineer Edinburgh 23 2008-12-13 $103,600
Jena Gaines Office Manager London 30 2008-12-19 $90,560
Quinn Flynn Support Lead Edinburgh 22 2013-03-03 $342,000
Charde Marshall Regional Director San Francisco 36 2008-10-16 $470,600
Haley Kennedy Senior Marketing Designer London 43 2012-12-18 $313,500
Tatyana Fitzpatrick Regional Director London 19 2010-03-17 $385,750
Michael Silva Marketing Designer London 66 2012-11-27 $198,500
Paul Byrd Chief Financial Officer (CFO) New York 64 2010-06-09 $725,000
Gloria Little Systems Administrator New York 59 2009-04-10 $237,500
Bradley Greer Software Engineer London 41 2012-10-13 $132,000
Dai Rios Personnel Lead Edinburgh 35 2012-09-26 $217,500
Jenette Caldwell Development Lead New York 30 2011-09-03 $345,000
Yuri Berry Chief Marketing Officer (CMO) New York 40 2009-06-25 $675,000
Caesar Vance Pre-Sales Support New York 21 2011-12-12 $106,450
Doris Wilder Sales Assistant Sydney 23 2010-09-20 $85,600
Angelica Ramos Chief Executive Officer (CEO) London 47 2009-10-09 $1,200,000
Gavin Joyce Developer Edinburgh 42 2010-12-22 $92,575
Jennifer Chang Regional Director Singapore 28 2010-11-14 $357,650
Brenden Wagner Software Engineer San Francisco 28 2011-06-07 $206,850
Fiona Green Chief Operating Officer (COO) San Francisco 48 2010-03-11 $850,000
Shou Itou Regional Marketing Tokyo 20 2011-08-14 $163,000
Michelle House Integration Specialist Sydney 37 2011-06-02 $95,400
Suki Burks Developer London 53 2009-10-22 $114,500
Prescott Bartlett Technical Author London 27 2011-05-07 $145,000
Gavin Cortez Team Leader San Francisco 22 2008-10-26 $235,500
Martena Mccray Post-Sales support Edinburgh 46 2011-03-09 $324,050
Unity Butler Marketing Designer San Francisco 47 2009-12-09 $85,675
Howard Hatfield Office Manager San Francisco 51 2008-12-16 $164,500
Hope Fuentes Secretary San Francisco 41 2010-02-12 $109,850
Vivian Harrell Financial Controller San Francisco 62 2009-02-14 $452,500
Timothy Mooney Office Manager London 37 2008-12-11 $136,200
Jackson Bradshaw Director New York 65 2008-09-26 $645,750
Olivia Liang Support Engineer Singapore 64 2011-02-03 $234,500
Bruno Nash Software Engineer London 38 2011-05-03 $163,500
Sakura Yamamoto Support Engineer Tokyo 37 2009-08-19 $139,575
Thor Walton Developer New York 61 2013-08-11 $98,540
Finn Camacho Support Engineer San Francisco 47 2009-07-07 $87,500
Serge Baldwin Data Coordinator Singapore 64 2012-04-09 $138,575
Zenaida Frank Software Engineer New York 63 2010-01-04 $125,250
Zorita Serrano Software Engineer San Francisco 56 2012-06-01 $115,000
Jennifer Acosta Junior Javascript Developer Edinburgh 43 2013-02-01 $75,650
Cara Stevens Sales Assistant New York 46 2011-12-06 $145,600
Hermione Butler Regional Director London 47 2011-03-21 $356,250
Lael Greer Systems Administrator London 21 2009-02-27 $103,500
Jonas Alexander Developer San Francisco 30 2010-07-14 $86,500
Shad Decker Regional Director Edinburgh 51 2008-11-13 $183,000
Michael Bruce Javascript Developer Singapore 29 2011-06-27 $183,000
Donna Snider Customer Support New York 27 2011-01-25 $112,000

However, with serverside processing, I can point the table to a service endpoint with a matching API and work with data from that.

This, in theory will let this bundle of precompiled documents serve as a dynamic frontend for data APIs that live independently.

Below is an example of a table generated based on an external API:

$(document).ready(function () {
    $('#example2').DataTable({
        processing: true,
        serverSide: false,
        ajax: 'https://simpledatatablesapi.azurewebsites.net/WeatherForecast',
        columns: [
            { data: 'date' },
            { data: 'temperatureC' },
            { data: 'temperatureF' },
            { data: 'summary' },
        ]
    });
});
Date Temperature C Temperatur F Summary

Conclusion

It isn't very surprising that this works, but I think it is interesting that:

  • It is so easy to do, while still keeping the UI application as "just documents"
  • It promotes a healthy separation of services. What is UI and what is data? This of course without going overboard with microservices and message-busses and all that noise

I know I shouldn't feel too excited about this. It really is just going back to the basics. But it certainly is a breath of fresh air after being used to huge monolithic do-all-the-things services.



Blog Logo

Hi! thanks for dropping in to pick my brain

I write on this blog for my own benefit. I write because I like to, and because it helps me process topics. It is also my own little home on the web and a place for me to experiment.

Since you're here though, I'd love to hear your thoughts on what you've read here, so please leave a comment below. Also, if you like what you read and want to give a small tip, fell free to:

Buy Me A Coffee