Contentful - Content management als een service

Content Management as a Service

De bestaande grote enterprise CMS'en (Sitecore, EPiServer, etc.) worden steeds uitgebreider en rijker qua functionaliteit. Het content management deel wordt een steeds kleiner deel van de totale set aan functionaliteiten welke tegenwoordig in een enterprise CMS zit. De vraag is of al deze features voor elk project en elke klant toegevoegde waarde biedt. Denk bijvoorbeeld eens aan campagne sites, kleine content sites of omgevingen waar je gewenste functionaliteiten middels micro services wilt ontsluiten. Voor deze scenario's zijn veel van deze features niet nodig en kunnen zelfs een negatieve impact hebben op de ontwikkeling, inrichting en kosten.

Daarnaast kleven er nog een aantal nadelen aan de meeste traditionele enterprise CMS'en

  • (Te) veel features
  • Complex voor editors en developers
  • Huidige enterprise CMS-en zijn duur
  • Hoge initiële inrichtichtings kosten
  • Trage first time to market
  • Dwingt vaak bepaalde technische keuzes af

Kan een lightweight CMaaS (Content Management as a Service) uitkomst bieden? Een lightweight CMaaS, waarbij de focus ligt op content, zou in bovenstaande scenario’s wellicht beter aansluiten. Deze services bieden vaak een REST API aan waardoor je hier techniek en platform onafhankelijk op kunt aansluiten. Om dit te onderzoeken hebben we een POC uitgevoerd. Als team hebben we ervoor gekozen om een blog omgeving op te bouwen. Een blog is niet bijzonder complex maar bevat voldoende functionaliteiten om een indruk te krijgen van de mogelijkheden voor het inzetten van een CMaaS zoals zoeken, koppelen entiteiten (artikel – auteur), paginering, etc.

Voor CMaaS-en heb ik gekeken naar Prismic.io, Osmek en Contentful. De uiteindelijke keuze is gevallen voor Contentful. Contentful is een cloud cms en biedt o.a. multi language support, basis publish workflow, content API, management API, preview API en SDK's voor o.a. Android & iOS. Contentful wordt o.a. vermeldt in Gartners "Magic Quadrant for Web Content Management" en Forresters "Market Overview: Web Content Management For Digital Experiences". Contentful heeft klanten als Disney, Electronic Arts, McAfee en Nike.

Prijzen

Contentful biedt vier verschillende 'plans' aan voor het afnemen van de service.

  • Starter: Free
  • Plus: $99 /month
  • Pro: $199 /month
  • Enterpise: op aanvraag

Meer info:https://www.contentful.com/plans/

First impressions

Contentful Banner

Contentful is overzichtelijk en eenvoudig van opzet. Na inloggen kun je vanuit de hoofdnavigatie naar de diverse onderdelen van het CMS navigeren. Contentful bestaat feitelijk uit drie hoofd onderdelen:

  • Models
    • Hier staan je content type definities
  • Entries
    • Hier staat je content, welke gebaseerd is op een model
  • Assets
    • Hier wordt media beheerd welke gekoppeld kan worden aan een entry

Allereerst dient men content models aan te maken. Aan deze models kan men velden toevoegen van verschillende types. Elk veld kan worden verplicht, kan worden voorzien van validatie en kan als muli language veld worden aangemerkt. Language cultures kun je zelf toevoegen. Let wel op: in de standaard space is de en-US de default culture welke je achteraf niet kunt aanpassen.

Contentful Contenttype Screenshot

Nadat de models zijn aangemaakt kan de content, op basis van de aangemaakte models, worden aangemaakt. Het eerste wat opvalt is dat het niet mogelijk is een content structuur op te zetten. Alle content wordt in één vergaarbak gezet waar men via diverse zoekopties op kan filteren. Het is dus ook niet mogelijk om je navigatie a.d.h.v. een boomstructuur op te bouwen.

Contentful Entries Screenshot

Content wordt standaard opgeslagen als Draft en kan via de Publish knop gepubliseerd worden. De content kan via een API ontsloten worden. Hiervoor dient een API key aangemaakt te worden. Je krijgt zowel een key om de gepubliceerde content op te halen alsmede een key om preview content (Drafts) op te halen. Dit maakt het mogelijk om je content in je applicatie ook te kunnen previewen. Voor beheren van content buiten het CMS is er een aparte content management API beschikbaar.

Content full biedt, afhankelijk van je gekozen plan, een of meerdere Spaces. Een space is een eigenlijk container waar je je content types, entries en media beheerd. Dit maakt het mogelijk om content te scheiden. Je zou spaces ook kunnen inzetten voor je OTAP straat. Voor elke omgeving wil je namelijk een aparte container zodat content niet tussen de omgevingen gedeeld kan worden. De delivery API kan enkel gegevens uit één Space terug geven. Je kunt dus via de API niet zoeken over meerdere spaces heen.

Geen contentboom… en nu?

Zoals eerder aangekaart is het niet mogelijk om een contentboom aan te leggen in het Cloud CMS. Dus kan je niet automatisch een menu opbouwen op basis van een content hierarchie zoals we dat gewend zijn. Er zijn diverse oplossingsrichtingen om toch een navigatie te kunnen beheren vanuit het CMS. Zo zou je b.v. een navigation model kunnen aanmaken waarbij er een lijst met entries (navigatie items) kan worden bijgehouden.

De API

Contentful biedt twee rijke APIs aan. Een content delivery API en een content management API. Met de content delivery api kun je naast entries ophalen ook zoeken naar entries binnen een space. De API biedt diverse zoek en filter mogelijkheden waaronder ranged search (datum / nummers), paged search, full text search en location based search.

Voorbeeld zoeken op specifiek content type cdn.contentful.com/spaces/[spaces]/entries?content_type=article

Voorbeeld full text search met paginering cdn.contentful.com/spaces/cfexampleapi/entries?query=cms&skip=10&limit=10 De content management api maakt het mogelijk om entries te wijzigen of aan te maken. Daarnaast is het ook mogelijk om via de API content models aan te maken en zelfs content models naar een andere space te kopieren. Dit biedt de mogelijkheid om geautomatiseerd content types aan te maken en content terug de OTAP straat in te rollen. We hadden tijdens onze POC helaas geen tijd om hier mee te spelen.

NodeJs, ExpressJs & Swig

Nu de content is aangemaakt was het zaak om deze te tonen op een website. Als webserver hebben we gekozen voor NodeJS icm ExpressJS (http://expressjs.com/). Middels de template engine Swig voegen we de data samen met een html template en serveren we deze. Omdat de content via een API wordt ontsloten is het mogelijk om ook andere techology stacks te gebruiken (java / .net). Het voordeel van NodeJS was dat Contentful hier zelf al een module voor had geschreven zodat het koppelen niet meer was dan de module toevoegen en wat parameters zetten.

Contentful NodeJs

Wat me verbaasde was hoe snel we een werkend prototype hadden zonder dat we (uitgebreide) kennis hadden van Contentful, NodeJs en de diverse modules. Binnen één werkdag hadden we het voor elkaar dat we content uit Contentful konden halen, deze konden verwerken in een template en konden tonen op een web pagina. In een andere blogpost zullen we dieper in gaan op de gebruikte techniek. Door de inzet van Swig zagen we dat de samenwerking tussen FED en DEV veel beter was omdat beide gebruik maakten van dezelfde templates. DEV vulde de templates met de properties uit het CMS en FED vulde de templates aan met de benodigde html. Aanpassingen achteraf hoefden nu dus nog maar op één plek te worden doorgevoerd.

Webhooks

Contentful ondersteunt zogenaamde webhooks. Dit mechanisme zorgt er voor dat er een seintje naar de geconfigureerde service wordt gestuurd indien er een wijziging in het CMS plaats vind. Hiermee zou je b.v. je eigen caching laag kunnen implementeren en de cache voor een specifieke entry kunnen verversen indien de entry is gewijzigd.

Conclusie

Contentful doet precies wat ze zelf zeggen, content management! Niks meer en niks minder. Wat me in het bijzonder aanspreekt is de gebruikersvriendelijkheid van het CMS voor editors en developers. Binnen een uur heb je de basis door en kun je aan de slag.

Contentful leent zich goed voor de iets kleinere sites. De initiële inrichting is snel gerealiseerd wat een korte time-to-market mogelijk maakt en de maandelijkse service kosten zijn relatief laag. Voor grotere sites kan ik me voorstellen dat je het overzicht kwijt raak doordat het niet mogelijk is om visueel structuur aan te brengen in de editor. Wel zul je bij het inrichten van de omgeving rekening moeten houden met de mogelijkheden van dit product. Voor sommige zaken zul je namelijk zelf iets moeten gaan inregelen.

  • Inrichten van je navigatiestructuur
  • User access management
  • Content door de straat uitrollen
  • etc.