Distributed Content: Delivering an Episerver Web Experience with Contentful Content

blog header image

The move in the market towards headless could also be seen as a tendency towards a deeper decoupling between content and experience delivery. Inspired by a few discussions, I've tried my hands on an uncommon combination: Contentful providing content delivered through an Episerver web experience layer.

For quite a while there has been a lot of focus on the so-called 'move' in the CMS market towards headless CMS, a CMS with an editorial backend and some kind of developer API (typically REST) instead of a front end. A move that Episerver followed with the Content Delivery API. The advantage of course being that developers can build whatever frontend they like in their preferred language, for any channel - going from web and phones to apps, smart-watches, billboards, print and so on. 

Typically, though a headless CMS is focused around 'pure' content management though - and when you consider a system like Episerver today, all the main sellable features are around experience management on the web delivery channel (I include mobile web here as well).

With this in mind I tend to agree with some of the thoughts shared by fellow EMVP Deane Barker here: The Future Might be Distributed. A topic he also did a great presentation on in early february '19 at the Episerver Partner Close-up event.

I can definitely see cases where it will make great sense to pull content from various providers and distribute them out through a number of delivery/experience channels managed in different experience management platforms. In fact, I would argue that it already happens massively today (and has done for a while) if we simply broaden the "content" concept a bit:

  • DAM systems (like my friends @ Digizuite) manage and deliver binary content (with metadata) to many different consumers (Episerver being one) that then create and manage channel experiences with it.
  • PIM systems deliver structured product content to many consumers, Episerver Commerce included
  • Syndication hubs as our very own Episerver world aggregates and syndicates content produced by many other different content hubs, through rss/atom syndication (which is probably how you found this blog)
  • And historically I certainly still remember all the hours I've wasted on CMIS which was supposed to be the standard that would change the world when it came sharing content between platforms (but that's another story all together best explained here).


Episerver Content Providers

For more than 10 years Episerver CMS has had a neat little feature known as Content Providers. And if you browse around my blog you'll see I have historically written many examples of them - and this seemed like a perfect opportunity to do that again.

I recently spend some time getting to know Contentful a SaaS based Contenthub that's pretty neat for pure content management with a powerful API. I figured this would be a great opportunity to build a simple integration that would mimick how you could use Episerver to orchestrate Contentful content on a web channel(see screenshot above).

I signed up for a free account, added the proper nuget package to my Episerver solution and started to code a pretty basic Content Provider.  You can find the code in a gist below.

In the initialization I map up a custom block model I created in Episerver to the Contentful content model for a blog post, and in my web.config I have configured the content provider and attached it to an entrypoint in my Block folders.

Here is a filtered list of my Contentful content (blog posts): 


And here I have my node with the blog posts automagically appearing below.


Disclaimer: This code is only a PoC to show how the distributed scenario discussed could work in real life. Currently the provider is read-only, single-language, not security aware and with no built-in resilience. Feel free to be inspired, but use at your own risk.


Also, feel free to drop me a line in the comments below and let me know how you think the systems will play together in a distributed future!

Recent posts