<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>vortex &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/vortex/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:19:52 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>vortex &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Voorbij aan REST: Event-Driven APIs</title>
		<link>https://www.smalsresearch.be/event-driven-apis/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 30 Nov 2021 10:23:22 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Eventual Consistency]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[reactive]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[vortex]]></category>
		<guid isPermaLink="false">/?p=16655</guid>

					<description><![CDATA[We hadden het op deze blog reeds uitvoerig over het gebruik van APIs als bouwsteen voor herbruikbare software. RESTful APIs hebben uiteraard heel wat voordelen, maar toch moeten we opletten dat we ze niet altijd en overal gaan inzetten. Er zijn namelijk ook nadelen verbonden aan deze manier van werken. Met deze blog willen we [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft size-full is-resized"><a href="/wp-content/uploads/2021/11/EventAPI-1.png"><img decoding="async" src="/wp-content/uploads/2021/11/EventAPI-1.png" alt="" class="wp-image-16720" width="179" height="179" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/11/EventAPI-1.png 240w, https://www.smalsresearch.be/wp-content/uploads/2021/11/EventAPI-1-150x150.png 150w" sizes="(max-width: 179px) 100vw, 179px" /></a></figure></div>



<p class="justify-text">We hadden het op deze blog reeds uitvoerig over het gebruik van <a href="/the_api_event/" data-type="post" data-id="15137">APIs als bouwsteen</a> voor <a href="/hergebruik-de-dos-en-donts/" data-type="post" data-id="13002">herbruikbare software</a>. <a href="/data-centric-it-met-rest/" data-type="post" data-id="9535">RESTful APIs</a> hebben uiteraard heel wat voordelen, maar toch moeten we opletten dat we ze niet altijd en overal gaan inzetten. Er zijn namelijk ook nadelen verbonden aan deze manier van werken. Met deze blog willen we er op wijzen dat asynchrone, <a href="/het-event-als-leidend-voorwerp-in-software-engineering/" data-type="post" data-id="8942">Event-Driven communicatie</a> tussen de systemen soms een veel beter resultaat oplevert, dan het zuivere gebruik van RESTful APIs.</p>



<span id="more-16655"></span>



<h2 class="wp-block-heading">REST: de gouden standaard</h2>



<p class="justify-text">We hebben er zelf reeds enkele malen op gehamerd: <a href="/groei-van-rest-json-standaarden-voor-identity-management/" data-type="post" data-id="2327">RESTful APIs zijn al jaren de de facto standaard</a> voor de communicatie tussen services en hebben ons tal van voordelen gebracht. Zo maken ze het b.v. eenvoudig om diensten te kunnen ontwikkelen op een technologie-agnostische manier, zolang de API maar goed gestandaardiseerd is. Een REST API geeft je ook rechtstreekse controle over wat een service voor jou doet en laat toe om <a href="/newsql-een-upgrade-voor-je-oude-database/" data-type="post" data-id="13610">gedistribueerde transacties</a> uit te voeren.</p>



<p class="justify-text">Het belangrijkste voordeel van REST is dat de technologie heel goed ingeburgerd en breed geaccepteerd is. Het is daardoor makkelijk om ontwikkelaars te vinden die ermee om kunnen gaan. Ondertussen zijn er ook tal van goede raamwerken rond gebouwd en ook standaarden voor de definitie en omschrijving van APIs, waardoor RESTful APIs de ultieme <a href="/hergebruik-de-dos-en-donts/" data-type="post" data-id="13002">bouwstenen van herbruikbaarheid</a> zijn geworden.</p>



<p class="justify-text">Het gevaar is echter dat RESTful APIs zó nuttig zijn, dat ze als een gouden hamer gaan worden gebruikt: deze RESTful hamer werkt zo goed, dat elk project en elk probleem als een spijker wordt beschouwd. Kortom, de technologie wordt steevast toegepast, daar waar soms andere keuzes een betere oplossing kunnen vormen. Er zijn namelijk een aantal nadelen verbonden aan een aanpak enkel en alleen gebaseerd op APIs&#8230;</p>



<h2 class="wp-block-heading">De pure API aanpak</h2>



<p class="justify-text">Wanneer we tegenwoordig <a href="/architecturale-evoluties-deel-1/" data-type="post" data-id="11434">software ontwikkelen</a>, zullen we dit niet meer monolitihisch doen. Om de beschikbaarheid te verhogen en om elastisch schaalbare diensten te bouwen, zullen we de functionaliteit zo goed mogelijk verdelen over een aantal <a href="/van-n-tier-naar-microservices/" data-type="post" data-id="9702">zo klein mogelijke services, mogelijks zelfs microservices</a>. Deze zullen dan samen, onderling communicerend, alle functionaliteit voor een applicatie, of meerdere applicaties, implementeren. Bij een enigszins naïeve aanpak zal men al deze communicatie eenvoudigweg voorzien d.m.v. het gebruik van RESTful APIs, en zal elke dienst de andere diensten synchroon oproepen wanneer deze de functionaliteit ervan nodig heeft.</p>



<p class="justify-text">Voor alle duidelijkheid: een synchrone oproep is een oproep die onmiddellijk antwoord verwacht van de tegenpartij. Een asynchroon bericht is éénrichtingsverkeer (al kan er &#8211; later &#8211; wel een antwoord komen in de vorm van een ander asynchroon bericht; het verschil is dat de eerste partij niet wacht op een antwoord en gewoon zijn werk verder zet).</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="/wp-content/uploads/2021/11/PureApi-1.png"><img fetchpriority="high" decoding="async" width="703" height="368" src="/wp-content/uploads/2021/11/PureApi-1.png" alt="" class="wp-image-16673" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/11/PureApi-1.png 703w, https://www.smalsresearch.be/wp-content/uploads/2021/11/PureApi-1-300x157.png 300w" sizes="(max-width: 703px) 100vw, 703px" /></a><figcaption>Figuur 1: De Webstore, met enkel synchrone communicatie (via APIs) tussen microservices.</figcaption></figure></div>



<p class="justify-text">Laten we het voorbeeld in Figuur 1 bespreken: Het betreft een webwinkel, opgebouwd via een microservices aanpak, waarbij alle microservices met elkaar communiceren via hun APIs. In de figuur staan 14 point-to-point afhankelijkheden; we zullen deze overlopen aan de hand van een typisch scenario. </p>



<ol class="justify-text wp-block-list"><li>De gebruiker logt in (REST call van Webstore Site naar Customer voor de gebruikersgegevens)</li><li>Customer doet ook een call naar Cart om een eerder opgeslagen winkelkarretje in te laden</li><li>De gebruiker winkelt: calls naar Catalog (query) en calls naar Cart (update)</li><li>Op zijn beurt zal Catalog de Inventory service aanroepen om te zien wat voorradig is</li><li>De gebruiker wil afrekenen: call van Site naar Checkout</li><li>Checkout roept Customer en Cart op, om de adresgegevens van de klant in te laden en de inhoud van het karretje</li><li>Call van Checkout naar Shipping voor de verzendingskost</li><li>Achter de schermen roept Shipping hiertoe mogelijks een externe API op van de koerier</li><li>De betaling wordt gestart: call van Checkout naar Payment</li><li>Payment roept Customer op voor de opgeslagen betalingsgegevens</li><li>Na de betaling werkt de Checkout module het order af met een Call naar Shipping en naar Inventory</li><li>Ook Orders krijgt een call om het afgewerkte order op te slaan</li><li>De klant kijkt zijn bestellingen nog eens na: call van Customer naar Orders</li></ol>



<p class="justify-text">Zoals we kunnen zien heeft de microservices approach al een<a href="/architecturale-evoluties-deel-2/" data-type="post" data-id="11475"> voordeel tegenover de monolithische aanpak</a>: er mogen een paar services plat zijn, en mensen kunnen toch winkelen (zonder in te loggen zijn enkel cart, catalog en eventueel inventory nodig). Enkel tijdens een checkout zijn zowat alle services nodig (behalve de catalog).</p>



<p class="justify-text">Dit laatste blijft natuurlijk een probleem: door de vele onderlinge afhankelijkheden tussen de services, kunnen er cascades ontstaan: de onbeschikbaarheid van één service kan de werking van vele andere verstoren en zelfs verhinderen. Daarnaast moet men met al deze afhankelijkheden rekening houden wanneer men een nieuwe versie van een service wil bouwen. Verder is het ook zo dat we van alles impliciet een transactie maken (en als één stap faalt, faalt de hele transactie), terwijl dit misschien niet noodzakelijk is op business niveau. Dit transactionele aspect verplicht ons ook om telkens alle stappen opnieuw te doorlopen in geval van een fout, en kan er, indien er zaken weggeschreven worden tijdens de transactie, ook voor zorgen dat we zaken terug actief ongedaan moeten maken indien er een fout is opgetreden, om te vermijden dat de achterliggende <a href="/data-quality-anomalies-transactions-management-system-atms-prototype-work-in-progress/" data-type="post" data-id="14866">data corrupt wordt</a>.</p>



<p class="justify-text">De directe koppeling tussen de vele diensten heeft nog een ander gevolg: de onafhankelijkheid van de microservices komt in het gedrang. Het hoofddoel van een microservices aanpak, is dat men een collectie onafhankelijk opererende diensten verkrijgt, die afzonderlijk van elkaar kunnen opereren en evolueren. Hoe sterker ze echter gekoppeld zijn aan elkaar, hoe minder groot deze onafhankelijkheid wordt.</p>



<h2 class="wp-block-heading">Richting asynchrone communicatie</h2>



<p class="justify-text">We hebben reeds in vorige blogs besproken wat <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">Event-Driven Architecture (EDA) is en welke geavanceerde toepassingen er bestaan</a>, gebaseerd op dat paradigma. Kort herhaald, gaat het hier over asynchrone communicatie tussen toepassingen, doordat ze events publiceren en zich op events van andere systemen kunnen abonneren. Dit zorgt voor een extra indirectie tussen de toepassingen, en op die manier kunnen ze onafhankelijker van elkaar opereren. Een EDA systeem is ook erg uitbreidbaar: je kan altijd extra services toevoegen aan het geheel, die reeds bestaande events gaan gebruiken om nieuwe functionaliteit te implementeren, en die op hun beurt nieuwe events kunnen publiceren. <a href="/architecturale-evoluties-deel-2/" data-type="post" data-id="11475" target="_blank" rel="noreferrer noopener">Op die manier krijg je een groeiend ecosysteem van nuttige Events, net zoals je ook met APIs een ecosysteem kan ontwikkelen</a>.</p>



<p class="justify-text">De wereld heeft echter niet stilgestaan sinds onze vorige posts over EDA en ondertussen zijn er op technologisch vlak al heel wat interessante evoluties bijgekomen. Het is nu zelfs vrij gemakkelijk geworden om ook de front-ends van applicaties aan te sluiten op een Event-Driven omgeving. Je kan je natuurlijk gaan afvragen of er ondertussen ook nog geen standaarden bestaan voor EDA, op basis waarvan we herbruikbare zaken kunnen gaan ontwikkelen, en die zijn er ook stilaan. Het voornaamste wat we kunnen doen om EDA goed te kunnen gebruiken, is echter eerst en vooral ze als &#8220;first class citizen&#8221; gaan beschouwen vanaf de business analyse, en niet langer als een louter technische vernuftigheid die een aantal problemen in systemen kan oplossen.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Beschouw Events als First Class Citizen: neem ze mee in je visie en vanaf de business analyse.</p></blockquote>



<p class="justify-text">De meeste business domeinen zijn intrinsiek Event-gebaseerd. Denk maar aan een aangifte die binnenkomt, een betaling die moet worden gedaan, een taak die is uitgevoerd, &#8230; Dit zijn allemaal &#8220;gebeurtenissen&#8221; die in de business zelf voorkomen en aldus <em>business events</em>. Eén van de taken die zou moeten gebeuren aan de start van elke analyse, is de tijd nemen om aan <strong><a href="/radar-2021/business-radar-2021/" data-type="page" data-id="15411">Event Storming</a></strong> te doen: een soort brainstorm naar alle business events die zich in een bepaald process of domein afspelen. Daarna kan de functionele analyse hier mee verder gaan om te bepalen hoe de communicatie tussen de te ontwikkelen systemen zich zal afspelen en hoe de business processen zullen worden geïmplementeerd.</p>



<p class="justify-text">Op IT vlak zullen de business events, en daarbijkomend waarschijnlijk nog een aantal eerder technische events, zich dan uiteindelijk vertalen in de events die over de bus worden gestuurd en deel kunnen gaan uitmaken van een ecosysteem van herbruikbare events. Daartoe is het ook echter van belang dat de events, net zoals herbruikbare APIs, <em>gecatalogiseerd en goed gedocumenteerd</em> worden, zodat er maximaal voordeel uit het bestaan van deze events kan worden gedistilleerd in nieuwe toepassingen. Wat we dus willen zeggen met &#8220;first class citizen&#8221;, is dat events op dezelfde manier zouden moeten worden behandeld als APIs, in een Event-first strategie. We willen echter niet afdoen van APIs, daarom wordt het een <strong>API+Event-first strategie</strong>.</p>



<h3 class="wp-block-heading">Standaarden voor Asynchrone APIs</h3>



<p>Zoals daarnet aangehaald, zijn er op technisch vlak dus ondertussen verschillende goed ingeburgerde technologieën om asynchrone communicatie te voorzien tussen systemen, en waarmee men dus Events kan ondersteunen. <a href="/de-stille-cloud-machtsgreep/" data-type="post" data-id="5543">De Cloud</a> heeft deze evolutie enorm versneld. We sommen er een aantal op:</p>



<div class="wp-block-image"><figure class="alignright size-full"><a href="https://www.asyncapi.com/blog/openapi-vs-asyncapi-burning-questions"><img decoding="async" width="296" height="235" src="/wp-content/uploads/2021/11/asyncopenapi.jpg" alt="" class="wp-image-16706"/></a><figcaption>Figuur 2: AsyncAPI, de veelbelovende industriestandaard voor Event Driven APIs, vult perfect OpenAPI aan (de standaard voor REST).</figcaption></figure></div>



<ul class="justify-text wp-block-list"><li><strong>Webhooks / REST hooks</strong>. <a href="https://zapier.com/blog/what-are-webhooks/">Ook wel reverse APIs genoemd</a>. Via webhooks kan men nog steeds RESTful werken: er wordt een API aangeboden waar een client een adres van een zogenaamde &#8220;callback API&#8221; kan gaan posten. Later zal de server via dit adres de client kunnen antwoorden. Het voordeel van deze manier van werken is dat men ze op kan laten gaan in de RESTful aanpak. Het nadeel is dat er nog steeds van een synchrone connectie sprake is op het moment van de registratie en op het moment van de callback. Daarnaast is de performantie en veiligheid ook minder dan met de andere methodes.</li><li><strong>Websockets</strong>. Dit is het <a href="https://en.wikipedia.org/wiki/WebSocket">hippe nieuwe protocol voor de browser</a>, waarmee deze een full-duplex kanaal met een webserver kan onderhouden. Full-duplex will zeggen dat men in beide richtingen kan communiceren en dat eender welke kant de communicatie kan starten. Op deze manier kan men dus een webtoepassing in de browser live updaten via events die van de server komen. Deze technologie is dus specifiek nuttig voor het UI-gedeelte van een gedistribueerd systeem: ze zorgt ervoor dat de asynchrone communicatie tot bij de eindgebruiker kan worden gebracht.</li><li><strong>Server Side Events</strong>. Dit is <a href="https://www.w3schools.com/html/html5_serversentevents.asp">een specificatie ingebakken</a> in <a href="/html-5-een-rijke-ervaring-zonder-plugins/" data-type="post" data-id="1426">HTML 5</a>, en daardoor compatibeler dan het nieuwere websockets. Het betreft echter éénrichtingsverkeer, maar dan van de server naar de clients, waardoor men dus een eenvoudigere manier heeft om toch events naar een browser te sturen.</li><li><strong>GraphQL</strong>. Een vrij recente query taal om APIs te beschrijven en bijhorende runtime. Deze technologie wordt gepromoot als meer gericht op de client dan op de server. Dit is omdat de client precies kan uitdrukken wat hij van de server wil krijgen, in plaats van enkel gebruik te kunnen maken van op voorhand vastgelegde zaken, zoals in REST. <a rel="noreferrer noopener" href="https://www.mobilelive.ca/blog/graphql-vs-rest-what-you-didnt-know/" target="_blank">Dit is dus in principe eerder een concurrent voor REST</a>. Je kan echter in GraphQL zogenaamde &#8220;subcriptions&#8221; aanmaken, waardoor de server je op de hoogte kan houden van een aantal zaken, en aldus is ook hier sprake van asycnhrone communicatie waarmee men aan EDA kan doen.</li><li><strong>gRPC</strong>. Dit is een raamwerk dat wordt gepromoot door de Cloud Native Computing Foundation (CNCF). Het is bedoeld om performant Remote Procedure Calls (RPCs) te kunnen maken en aldus eveneens een concurrent voor REST. <a href="https://grpc.io/">gRPC</a> bieft een streaming API aan (<a href="/de-reactive-hype/" data-type="post" data-id="14280">erg handig bij gebruik van de Reactive principes</a>), waarmee ook asynchrone stromen van berichten (en dus ook Events) kunnen worden behandeld.</li><li><strong>CloudEvents</strong>. Ook dit is een <a href="https://cloudevents.io/">initiatief</a> van de &#8220;Serverless Working Group&#8221; van de CNCF. Het betreft een standaardisering van het beschrijven van events op Publisher niveau, waarbij men zich vooral richt op standaard manieren om de metadata te beschrijven. Een jaar geleden kwam versie 1.0.1 uit. Men werkt verder aan verschillende SDK&#8217;s voor talen en er zijn ook specificaties van hoe de standaard te koppelen aan bepaalde technologieën, zoals Event Brokers (de technologie achter de EventBus).</li><li><strong>AsyncAPI</strong>. <a href="https://www.asyncapi.com/">Dit initiatief is de industriestandaard aan het worden. AsyncAPI</a> doet voor EDA wat <a href="https://www.openapis.org/">OpenAPI</a> reeds doet voor RESTful APIs; de twee worden samen ondersteund door de Linux Foundation. Het betreft hier een specificatie van zowel de Events zelf, als de producers en consumers ervan, op een manier die door een computer kan worden verwerkt. Daardoor kan men dan automatisch goede documentatie genereren, aslook stubs voor code, die kan worden gebruikt in de systemen die met de Events zullen omgaan. Deze specificatie gaat veel verder dan CloudEvents, en trekt ook meer aandacht van developers. Ze zit ondertussen aan versie 2.2.0. Op dit moment zijn er ook al verschillende technologieën ondersteund voor de effectieve implementatie van de Events: o.a. Apache Kafka, AMQP, IBM MQ, MQTT, SNS, WebSockets, en JMS.</li></ul>



<p class="justify-text">Ondanks alle nieuwe ontwikkelingen op gebied van EDA, willen we hier echter niet gaan beweren dat alles nu Event-Driven moet worden, en al zeker niet dat we APIs zouden moeten afschaffen. Events zijn, evenmin as APIs, het antwoord op alles. Ook EDA heeft een aantal nadelen: de asynchrone communicatie inherent aan Events, zorgt ervoor dat systemen die events van elkaar willen gebruiken, op een bepaald niveau &#8220;Eventually Consistent&#8221; worden, en dus niet meer transactioneel zijn. Dit kan in principe voordelig zijn op een aantal punten, maar het zorgt ervoor dat het minder makkelijk is om erover te redeneren indien men gewend is dat alles ten allen tijde consistent wordt gehouden. Het zijn dus systemen die soms iets ingewikkelder in elkaar zitten en minder gemakkelijk te voorspellen zijn: je hebt, binnen één systeem, geen directe controle over wat er allemaal zal gebeuren als gevolg van een Event dat je de wereld instuurt (je hebt enkel controle over wat je kan doen met inkomende Events). Dit alles zorgt ervoor dat het niet altijd even gemakkelijk is om zulke (groepen) systemen te testen en debuggen, temeer omdat er ook minder veel mensen te vinden zijn die er ervaring mee hebben.</p>



<p class="justify-text">Maar, zoals reeds gezegd, EDA kan heel krachtig zijn, en leunt vaak sterk aan bij het business model. Het ideale antwoord over wat we nu best gebruiken, zal dus, zoals gewoonlijk, ergens in het midden liggen&#8230;</p>



<h2 class="wp-block-heading">De gebalanceerde aanpak: APIs plus Events</h2>



<p class="justify-text">Zoals we hebben aangetoond in de vorige sectie, heeft een Eventgedreven aanpak een aantal sterke pluspunten; niet in het minst een resiliënter systeem dat beter voorzien is op toekomstige aanpassingen en uitbreidingen en dus tot op business niveau agile is. Uiteraard zijn er ook een aantal beperkingen, en we gaan dus zeker geen pleidooi houden om vanaf nu alle services zuiver Event-driven te maken. Het antwoord zal een hybride aanpak zijn.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="/wp-content/uploads/2021/11/hybrid.png"><img loading="lazy" decoding="async" width="855" height="422" src="/wp-content/uploads/2021/11/hybrid.png" alt="" class="wp-image-16681" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/11/hybrid.png 855w, https://www.smalsresearch.be/wp-content/uploads/2021/11/hybrid-300x148.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/11/hybrid-768x379.png 768w" sizes="auto, (max-width: 855px) 100vw, 855px" /></a><figcaption>Figuur 3: De webstore, met een combinatie van synchrone API calls en asynchrone Events</figcaption></figure></div>



<p class="justify-text">We gaven vroeger al een <a href="/architecturale-evoluties-deel-2/" data-type="post" data-id="11475">een eerder abstract voorbeeld van hoe deze verschillende zaken kunnen worden gecombineerd in onze blogs</a>. Nu zullen we dit iets concreter maken: in figuur 3 overlopen we hetzelfde voorbeeld als dat van figuur 1, maar dan met een combinatie van API gebruik en Events.</p>



<ol class="justify-text wp-block-list"><li>De gebruiker logt in (API call naar Customer; &#8220;Login&#8221;-Event 1 )</li><li>De Cart Service ziet event 1 en verstuurt zelf een event met de vorige inhoud van het karretje (&#8220;Cart Updated&#8221;-Event 2 )</li><li>De front-end ziet event 2 en laat de kar-inhoud zien aan de gebruiker</li><li>De gebruiker winkelt (API calls naar Catalog; &#8220;Product Chosen&#8221;-Event 3 )</li><li>De Cart Service ziet event 3 en past het karretje aan (nogmaals &#8220;Cart Updated&#8221;-Event zoals 2, niet apart getoond)</li><li>Ook Checkout ziet de &#8220;Cart Updated&#8221; events en bewaart de aankopen (&#8220;Cart Updated&#8221;-Event zoals 2, niet getoond)</li><li>De gebruiker wil een checkout doen (API calls naar checkout en shipping, voor de verzendingskost)</li><li>De gebruiker bevestigt het order (API call naar checkout; &#8220;Order Confirmed&#8221;-Event 4 )</li><li>Event 4 wordt opgepikt door Cart (kar leegmaken) en Orders (order bewaren)</li><li>Event 4 wordt eveneens gezien door Inventory (Inventory wordt gereserveerd)</li><li>De gebruiker wordt ook omgeleid naar Payment en voert de betaling uit (API call naar payment)</li><li>Er gebeurt een succesvolle betaling (&#8220;Payment Received&#8221;-Event 5 )</li><li>De Orders Service ziet event 5 en stuurt zelf een event (&#8220;Order Ready-to-Pack&#8221;-Event 6 )</li><li>De Shipping Service vangt event 6 en regelt het versturen bij de koerier</li><li>Ook de Inventory service ziet event 6 (Inventory wordt finaal aangepast en pak-opdracht gaat naar magazijn)</li><li>De klant die zijn orders raadpleegt, kan dat nog via een API call (De Orders Service kunnen we via <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">CQRS</a> bouwen: het deel dat actief zaken verwerkt en business beslissingen neemt is volledig Event-Driven; een tweede component van de service observeert alle gerelateerde events en bouwt een resulterend relationeel model op, dat makkelijk kan worden gequeried)</li><li>Hier stopt het voorbeeld van Fig. 1, maar we zouden nog verder kunnen gaan: wanneer het pakket klaar staat, zal er opnieuw een event hiervoor zijn en kan de effectieve verzending gebeuren via de koerier. Daarna zijn er nog tracking events, enz.</li></ol>



<p class="justify-text">Een aantal extra opmerkingen betreffende deze manier van aanpakken:</p>



<ul class="justify-text wp-block-list"><li>In dit scenario zien we dat de front-end meer rechtstreeks gebruik maakt van een aantal achterliggende diensten, en er dus in principe van afhankelijk wordt. We moeten echter onthouden dat dit geen alles-of-niets afhankelijkheid is, zoals een aantal van de point-to-point verbindingen in het eerste scenario. De afhankelijkheid geldt enkel voor welbepaalde functionaliteiten, die afzonderlijk van elkaar onbeschikbaar kunnen zijn.</li><li>We hebben hier ook de mogelijkheid de betaling achteraf in orde te brengen indien de betaling zou mislukken of de Payment Service niet beschikbaar is. Shipping schiet pas in actie nadat het event &#8220;Payment Received&#8221; is gepasseerd. In beide scenario&#8217;s hebben we eventuele 3rd party API calls naar Betalingsfirma&#8217;s (b.v. PayPal) achterwege gelaten, wat een extra kans op falen introduceert. In het eerste scenario zou hierdoor de volledige transactie van de bestelling mislukken (hetgeen ook het geval is bij vele echt bestaande webshops, maar b.v. niet bij een geavanceerde webshop als Amazon, waar men de betaling asynchroon achter de schermen kan regelen).</li><li>Zowel de Cart als de Checkout service houden een winkelmandje bij, maar toch verschillen ze. De Cart service is verantwoordelijk voor de opslag van het mandje overheen verschillende gebruikersessies (en kan eventueel nog wishlists en favorieten en dergelijke functionaliteiten aanbieden). De Checkout service houdt het enkel gedurende één sessie bij tot het een effectief order wordt, en voegt de bestemming en de verzendingskost toe. We zouden hier echter kunnen overwegen om de checkout functies ook in Cart onder te brengen.</li><li>Merk op dat we in geen van beide scenario&#8217;s (zuivere API aanpak en hybride) een laatste check van de inventory doen bij het bestellen. Indien echt nodig op business niveau, zouden we dit in beide gevallen synchroon (en transactioneel) doen (met gevolgen voor de resiliency en klantentevredenheid). We kiezen er echter voor op business niveau dit niet te doen en een eventueel stocktekort op business niveau aan te pakken (<a href="/eventual-consistency-1/" data-type="post" data-id="15544">zie het voorbeeld in de blogpost over Eventual Consistency</a>).</li><li>Om de afhankelijkheid van de externe shipping API te reduceren, kunnen we er in beide scenario&#8217;s voor zorgen dat we de prijzen cachen, of zelf op business niveau vastleggen zonder dit dynamisch op te vragen bij de koerier. Op die manier bestaat de afhankelijkheid enkel op het moment van het effectieve aanmaken van de verzending (en later bij het traceren; wat in principe ook best Event-Driven is, maar in externe APIs is dit vaak niet voorzien).</li></ul>



<p class="justify-text">Zoals we kunnen zien aan de hand van dit voorbeeld, kan een hybride aanpak interessante voordelen hebben: de services zijn heel wat minder sterk afhankelijk van elkaar en zijn zelfstandiger. Men kan kiezen op welke events te reageren en welke events uit te sturen, zonder een API te wijzigen; de service kan op deze manier makkelijker evolueren of verplaatst worden. Er is ook een verbeterde resiliëntie: wanneer een service uitvalt, blijven een aantal events onbehandeld. Maar wanneer de service terug online komt, kan dit werk worden ingehaald en gaat het proces gewoon verder. Er is dus sprake van tijdelijke degradatie en uitstel, maar niet van verloren gegane transacties of een cascade van falen. Men moet er wel op letten dat de EventBus een hoog niveau van beschikbaarheid heeft, net zoals de <a href="/productiviteitsverhoging-met-paas/" data-type="post" data-id="5995">andere middleware platformen</a> waar men de applicaties op bouwt, en de onderliggende infrastructuur.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p class="justify-text">Een Software Development strategie gebaseerd op het bouwen van RESTful APIs is een goed startpunt. We mogen ons echter niet blindstaren op de voordelen van REST en alleen maar van deze oplossing gebruik maken.</p>



<p class="justify-text">Een Eventgedreven aanpak heeft een aantal sterke pluspunten; niet in het minst een resiliënter systeem dat beter voorzien is op toekomstige aanpassingen en uitbreidingen, en dus tot op business niveau agile is.</p>



<p class="justify-text">In een optimaal gebalanceerde Softwareontwikkelingsstrategie is dus zeker ook ruimte voorzien voor asynchrone communicatie en eventual consistency, door gebruik te maken van Event Driven Architecture. Het is dan ook van groot belang hiermee rekening te houden vanaf het vormen van een visie, tijdens de business analyse en daarna doorheen het hele ontwikkelingsproces.</p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Het eGovernment als Horizontale Dienstverlener?</title>
		<link>https://www.smalsresearch.be/het-egovernment-als-horizontale-dienstverlener/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 24 May 2017 07:53:16 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[cost cutting]]></category>
		<category><![CDATA[data-centric]]></category>
		<category><![CDATA[digital transformation]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[G-Cloud]]></category>
		<category><![CDATA[Managing IT costs]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[vortex]]></category>
		<guid isPermaLink="false">/?p=10290</guid>

					<description><![CDATA[We bevinden ons in een wervelstorm van technologische evoluties, die in vele omgevingen aanleiding geven tot nieuwe business modellen. Ook bij het eGovernment, van oudsher gestructureerd in verticale silo&#8217;s, is er een evolutie begonnen naar meer horizontale synergie. Aan de horizon staan echter nog vele opportuniteiten te wachten! In een vorige blog had ik het reeds [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft wp-image-10738" src="/wp-content/uploads/2017/05/be-logo-150x150.png" alt="" width="127" height="127" />We bevinden ons in een <a href="/de-vortex-van-enablers/">wervelstorm van technologische evoluties</a>, die in vele omgevingen aanleiding geven tot nieuwe business modellen. Ook bij het eGovernment, van oudsher gestructureerd in verticale silo&#8217;s, is er een evolutie begonnen naar meer horizontale synergie. Aan de horizon staan echter nog vele opportuniteiten te wachten!</p>
<p><span id="more-10290"></span></p>
<p style="text-align: justify;">In een <a href="/van-chipkaart-naar-smartphone-naar-arm/">vorige blog</a> had ik het reeds over het uitbesteden van gemeenschappelijke zaken, nodig voor meerdere ondernemingen, applicaties &amp; diensten, aan een derde, hierin gespecialiseerde partij. Hetgeen deze laatste partij doet, noemen we &#8220;horizontale dienstverlening&#8221;; men opereert namelijk in een <a href="https://en.wikipedia.org/wiki/Horizontal_market">horizontale markt</a>.</p>
<p style="text-align: justify;">Nu wil ik graag enkele voorbeelden geven van hoe de overheid hetzelfde zou kunnen doen via een <a href="/data-centric-it-met-rest/">data-centric</a> eGovernment (bovenop de vele zaken die ze reeds doet, met b.v. sterke eID authenticatie, de <a href="https://www.gcloud.belgium.be/">G-Cloud</a>, en het eHealth platform).</p>
<h3>Een aantal voorbeelden:</h3>
<ol style="list-style-type: decimal;">
<li>
<h2>Chipkaarten</h2>
<p style="text-align: justify;">In diezelfde <a href="/van-chipkaart-naar-smartphone-naar-arm/">vorige blog</a> vernoemde ik de voordelen die er zouden ontstaan indien we het beheer van chipkaarten zouden afzonderen bij één horizontale chipkaartenbeheerder, en alle gebruikers van deze kaarten dan hiervan gebruik zouden kunnen maken. In een vergevorderd sta<img loading="lazy" decoding="async" class="alignright wp-image-6684" src="/wp-content/uploads/2014/01/export-300x294.png" alt="" width="215" height="211" srcset="https://www.smalsresearch.be/wp-content/uploads/2014/01/export-300x294.png 300w, https://www.smalsresearch.be/wp-content/uploads/2014/01/export.png 376w" sizes="auto, (max-width: 215px) 100vw, 215px" />dium zou het zo in principe zelfs mogelijk worden dat we via één enkele chipkaart van allerlei diensten, aangeboden door verschillende bedrijven (overheid of privé) gebruik kunnen maken, en we dus niet met een <a href="/help-mijn-portefeuille-is-te-dik/">veelheid van de plastieken ondingen in onze portefeuille zouden moeten rondlopen</a>. Dergelijke dienstverlener zou zelfs via een SaaS platform ook aan kleine ondernemingen een paar opties kunnen geven om b.v. aan een bestaande QR code op de chipkaart van een persoon, een klantenkaart te koppelen. Kortom, &#8220;<a href="/one-card-to-rule-them-all/">one card to rule them all</a>&#8220;. Misschien zou de overheid dit kunnen aanbieden via de eID?</p>
</li>
<li>
<h2>&#8220;Waar-woon-ik-as-a-Service&#8221;</h2>
<p style="text-align: justify;">Een eenvoudig, maar krachtig voorbeeld van nuttige en toch min of meer private data, zijn <strong>adressen en adreswijzigingen</strong>. Wat als elke adreswijziging die iemand onderging, onmiddellijk door alle (overheids-)diensten, door de post, door koeriers, en eventueel door een resem andere belanghebbenden was geweten? Dit scenario werkt als volgt:</p>
<ol style="list-style-type: decimal;">
<li>De burger verhuist, en de nodige (fysieke) controles gebeuren.</li>
<li style="text-align: justify;">De gemeenteambtenaar voert dit gegeven in (Dit gegeven valt trouwens onder de noemer &#8220;<a href="https://gcn.com/articles/2016/05/24/civic-moments.aspx">civic moment</a>&#8220;: een belangrijke gebeurtenis in de levensloop van een burger (of bedrijf), die een aantal administratieve gevolgen kan triggeren).</li>
<li style="text-align: justify;">Vanaf dan zijn deze gegevens (zowel het nieuwe adres als de adres<em>verandering</em>) automatisch beschikbaar voor alle overheidsdiensten die er sowieso recht op hebben. Dit is mogelijk via het opvragen van de gegevens (b.v. via <a href="/data-centric-it-met-rest/">REST</a> APIs), maar evenzeer kunnen sommige applicaties onmiddellijk op de hoogte worden gebracht (via <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Events</a>). Bijgevolg kunnen deze diensten dus automatisch eventuele veranderde rechten en plichten van de burger die van zijn adres afhangen, aanpassen, en uiteraard ook hun briefwisseling naar het nieuwe adres richten.
<p><figure id="attachment_9582" aria-describedby="caption-attachment-9582" style="width: 391px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-9582" src="/wp-content/uploads/2016/03/eda-rest-e1458906104781.png" alt="" width="391" height="216" /><figcaption id="caption-attachment-9582" class="wp-caption-text">Een microservices architectuur, waarin losgekoppelde applicaties op verschillende manieren kunnen communiceren.</figcaption></figure></li>
<li style="text-align: justify;">Daarnaast kan de overheid, als <em>data custodian </em>(zo noemen we de horizontale dienst van het databeheer), ook een applicatie aanbieden aan de burger zelf, waar deze de mogelijkheid krijgt om applicaties van andere bedrijven toegang te geven tot deze gegevens. Dit zou een beetje kunnen werken zoals een Google of Facebook account: ook tot deze accounts kan men (beperkte en specifieke) <a href="/rest-iam-part-2-oauth/">toegang verlenen</a> aan andere applicaties. De burger zou dus b.v. op die manier aan Bpost de toestemming kunnen geven om deze gegevens automatisch te ontvangen. Vanaf dan zou de post automatisch naar het nieuwe adres kunnen worden doorgestuurd. Sterker nog: men zou het zo kunnen regelen, dat men brieven kan versturen op naam (en/of eventueel een unieke identifier die een burger voor zichzelf kan genereren in de toepassing), en dat de post deze dan vanzelf aan het juiste adres levert. Op die manier zou men niet meer overal zijn échte adres moeten opgeven en verhoogt men dus zelfs de <strong>privacy van de burger</strong>.</li>
<li style="text-align: justify; margin-bottom: 2em;">Ook andere koeriersbedrijven zouden op deze dienst kunnen intekenen en door de burger geauthenticeerd kunnen worden om gebruik te maken van diens door de service gekende adres. Ik wacht trouwens nog steeds op de mogelijkheid om een account te creëren bij een koeriersbedrijf en daarna niet meer mijn adres te moeten geven in elke aparte webshop die ik gebruik, maar gewoon te kunnen aanvinken dat mijn gekozen koerier mijn adres reeds kent!</li>
</ol>
<p style="text-align: justify;">In het voorbeeld maakte ik abstractie van een eventueel apart correspondentie-adres, of het gebruik van meerdere adressen, maar deze zou men even goed door de burger zelf kunnen laten beheren in een centraal aangeboden toepassing.</p>
</li>
<li>
<h2>Civiele &#8220;Half-Open&#8221; Data</h2>
<p style="text-align: justify;">Naast het adres heeft de overheid nog een schat van andere informatie over haar burgers en bedrijven. We moeten uiteraard rekening houden met de privacy van dergelijke data, maar desalniettemin kan deze functie van <em>Data Custodian</em> worden uitgebreid met heel wat interessante mogelijkheden. (Ik verwees in de chipkaartenblog reeds naar het gescheiden beheer van gegevensnetwerken versus de applicaties die ervan gebruik maken. De <a href="/de-vortex-van-enablers/">vortex van enablers</a> maakt dit reeds perfect mogelijk.)</p>
<p style="text-align: justify;">Men zou bijvoorbeeld automatisch rechten kunnen afleiden uit bepaalde situaties die burgers ondergaan (verlies van werk, fysiek letsel, &#8230;) indien deze gebeurtenissen (dit zijn Civic Moments en <a href="/geavanceerd-event-driven-engineering/">Events</a>!) en hun corresponderende nieuwe gegevens snel en automatisch door alle nodige diensten werden opgevangen.</p>
<p style="text-align: justify;">In het voorbeeld van het fysiek letsel zou de burger aan een dokter de toestemming kunnen geven om gegevens i.v.m. langdurige werkonbekwaamheid automatisch door te sturen naar instanties die hiervoor uitkeringen betalen. Een gelijktijdig gevolg, met communicatie naar de Fod SZ, zou kunnen zijn dat de burger automatisch een parkeerkaart voor personen met een handicap zou krijgen toegestuurd.</p>
<p>Deze, en nog vele andere mogelijkheden die ontstaan door de juiste data op het juiste moment op de juiste plaats te krijgen, tonen nogmaals aan dat <a href="/data-centric-it-met-rest/">data-centric IT</a> meer dan ooit van belang is (en &#8211; niet te vergeten &#8211; <a href="/data-centric-security-model/">data-centric security</a>).</li>
</ol>
<h3><a id="digi_trans"></a>Digitale transformatie</h3>
<p style="padding-left: 30px; text-align: justify;">Het eGovernment heeft onlangs reeds een fenomenale stap vooruit gezet als horizontale dienstverlener via de G-Cloud, die ervoor zorgt dat men op infrastructuur- en middlewarevlak synergieën kon creëren. Nu is stilaan het moment aangebroken om verder te beginnen denken: ook bovenop de infrastructuur, binnen en tussen applicaties en vooral door hergebruik van gegevens, ligt er nog een goudmijn van mogelijkheden op ons te wachten. In dergelijke context praat men momenteel dan ook graag over &#8220;Digital Transformation&#8221; (een evolutie die eigenlijk <a href="https://en.wikipedia.org/wiki/Digital_transformation">al heel lang gaande</a> is).</p>
<p style="padding-left: 30px; text-align: justify;">Tot nu toe focuste deze trend zich <img loading="lazy" decoding="async" class="alignright wp-image-10751" src="/wp-content/uploads/2017/05/belgdigital-300x243.png" alt="" width="371" height="302" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/05/belgdigital-300x243.png 300w, https://www.smalsresearch.be/wp-content/uploads/2017/05/belgdigital-1024x830.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2017/05/belgdigital.png 1101w" sizes="auto, (max-width: 371px) 100vw, 371px" />binnen de overheid daarbij vooral op <strong>kostenbesparingen</strong>: hoe hetzelfde doen, maar dan op een efficiëntere manier? Dit is uiteraard nuttig, maar Digitale Transformatie gaat veel verder dan dat (ook volgens de <a href="https://www.infoworld.com/article/3152507/it-strategy/the-5-myths-of-digital-transformation.html">blogosphere</a>, en ook wanneer het specifiek over <a href="https://www.govtech.com/featured/Cloud-Is-More-Than-Cost-Savings.html">Cloud</a> gaat). De ware kracht van deze trend mag niet verloren gaan in oeverloze discussies over hoe alles goedkoper kan, of hoe de bestaande zaken met de nieuwe technologie efficiënter kunnen worden gemaakt.</p>
<p style="padding-left: 30px; text-align: justify;">Ik durf hierbij zelfs <a href="https://www.infoworld.com/author/Bob-Lewis/">Bob Lewis</a> bij te treden: IT plannen moeten niet gedreven worden door de noden van de business, maar <strong>de business strategie moet gedreven worden door de nieuw beschikbare technologische mogelijkheden!</strong></p>
<p style="padding-left: 30px; text-align: justify;">Welnu: de technologieën die een grote evolutie mogelijk maken, zijn gearriveerd. Laten we onze inspiratie de vrije teugels geven, en bedenken wat voor interessante diensten we nog kunnen bieden, aan zowel de ambtenaren van ons land, als aan zijn burgers en bedrijven.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>De &#8216;Vortex&#8217; van Enablers</title>
		<link>https://www.smalsresearch.be/de-vortex-van-enablers/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 21 Feb 2017 08:14:01 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[vortex]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<guid isPermaLink="false">/?p=10419</guid>

					<description><![CDATA[In de software engineering wereld zijn de voorbije jaren, en nu nog altijd, een aantal indrukwekkende evoluties aan de gang. Verschillende technologieën samen bieden nu nieuwe perspectieven en kunnen de business transformeren. In deze blog een korte opsomming van een aantal van deze ontwikkelingen. Later kunnen we inzoomen op de impact ervan op de business. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">In de software engineering wereld zijn de voorbije jaren, en nu nog altijd, een aantal indrukwekkende evoluties aan de gang. Verschillende technologieën samen bieden nu nieuwe perspectieven en kunnen de business transformeren. In deze blog een korte opsomming van een aantal van deze ontwikkelingen. Later kunnen we inzoomen op de impact ervan op de business.</p>
<p style="text-align: justify;"><span id="more-10419"></span></p>
<h1 style="text-align: justify;">&#8220;Digitale Transformatie&#8221;</h1>
<p style="text-align: justify;">Wanneer men het tegenwoordig heeft over <a href="https://www.infoworld.com/article/3152507/it-strategy/the-5-myths-of-digital-transformation.html">bovenstaand buzzword</a>, zal men steevast een aantal technologische evoluties opsommen die een verregaande impact op onze wereld hebben, en bijgevolg ook op de business, (in het bijzonder de IT business). We denken dan <a href="/analytics-behind-the-scenes-humans-and-computers-versus-big-data/">Big Data + Analytics</a>, <a href="/ce-quun-reseau-social-peut-nous-apprendre/">Sociale Media</a>, <a href="/cloud-metaforen-elektriciteit-goud/">Cloud</a> en <a href="/van-chipkaart-naar-smartphone-naar-arm/">Mobile</a>; de zogenaamde &#8220;<a href="https://www.gartner.com/technology/research/nexus-of-forces/">Nexus of Forces</a>&#8220;.</p>
<p style="text-align: justify;">Het is wel waar dat deze <em>nexus</em> nogal wat furore maakt, maar die kan dat, doordat er, onderliggend, een aantal andere technologische evoluties spelen, die het de software engineering wereld mogelijk maken om al deze krachten voldoende te ondersteunen. Evoluties die, als het ware, ervoor zorgen dat de software die deze nexus draaiende houdt, kan worden gebouwd en ontplooid op een beheersbare manier, zonder dat ontwikkelaars ten onder gaan aan de groeiende complexiteit. Een aantal van die evoluties vatten we hier nu samen onder de noemer <em><strong>&#8220;Vortex of Enablers&#8221;</strong></em>. (Over vele van deze technologieën hadden we het reeds eerder &#8211; volg de links voor meer informatie.)</p>
<h1 style="text-align: justify;">Enablers 1 en 2: Verregaande Virtualisatie met Cloud &amp; Containers</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft wp-image-10540" src="/wp-content/uploads/2017/02/containers-300x225.png" alt="" width="184" height="140" />De <a href="/de-stille-cloud-machtsgreep/">Cloud</a> is niet meer weg te denken, maar welke technologie gaat er precies achter schuil? Oorspronkelijk werden er enorme sprongen voorwaarts gemaakt door het virtualiseren van machines, en infrastructuur in het algemeen (<a href="/as-a-service-een-waaier-aan-mogelijkheden/">IaaS</a>). Maar nu zien we de platformen pas echt ook voor ontwikkelaars tot wasdom komen. <a href="/productiviteitsverhoging-met-paas/">PaaS</a> platformen zijn, dankzij de verschroeiend harde introductie van Container technologie, uitgegroeid tot de <a href="https://www.docker.com/"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-10538" src="/wp-content/uploads/2017/01/moby-300x192.png" alt="" width="300" height="192" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/01/moby-300x192.png 300w, https://www.smalsresearch.be/wp-content/uploads/2017/01/moby.png 525w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>virtualisatiekeuze bij uitstek. Het worden nu zelfs vaker en vaker in de eerste plaats &#8220;<a href="/disruptie-in-de-cloud-stack-caas/">Container Platformen</a>&#8220;. Momenteel zijn Containers niet meer weg te denken uit Software Engineering, en ze zijn ook een belangrijke enabler voor <a href="https://en.wikipedia.org/wiki/DevOps">DevOps</a>. Maar het verhaal zal hier nog niet eindigen. Aan de horizon duikt reeds een nog hoger niveau van virtualisatie op: het zogenaamde <a href="https://en.wikipedia.org/wiki/Serverless_computing">Serverless Computing</a> (zie ook onze <a href="/radar/approaches-radar-2017/">research radar</a>).</p>
<h1 style="text-align: justify;">Enabler 3: MicroServices</h1>
<p style="text-align: justify;"><a href="/van-n-tier-naar-microservices/"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9733" src="/wp-content/uploads/2016/06/logomicro-150x150.png" alt="" width="150" height="150" />MicroServices</a> zijn de manier bij uitstek waarmee we complexe IT systemen kunnen opdelen in vele kleinere en makkelijker onderhoudbare componenten. Ze zorgen ervoor dat we een verzameling van toepassingen kunnen bouwen die allemaal potentieel klant zijn van elkaar en elk hun stukje van het geheel uitvoeren. Daarnaast zijn ze typisch klein en onafhankelijk, waardoor ze ideaal zijn om uitgerold te worden via een container platform.</p>
<h1 style="text-align: justify;">Enabler 4: Event Driven Software Engineering</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9123" src="/wp-content/uploads/2015/10/event-150x150.png" alt="" width="150" height="150" />Over Events hadden we het al uitgebreid in <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">vorige blogs</a>. In het algemeen merken we dat dit mechanisme aan populariteit wint om een dynamisch en snel veranderende wereld, die continu nieuwe data genereert, te kunnen vatten in IT.</p>
<p style="text-align: justify;">Events lenen zich dan ook heel goed voor het capteren van data: alles wat in een computersysteem binnenkomt, kan namelijk worden gezien als een Event, en het gebruik hiervan als <a href="/geavanceerd-event-driven-engineering/">primaire databron</a> is soms handiger dan wanneer men de ervan afgeleide data zou gaan bewaren. In een overheidscontext zien we bijvoorbeeld de notie van <a href="https://gcn.com/articles/2016/05/24/civic-moments.aspx">civic moments</a> aan belang winnen, hetgeen eigenlijk niet minder dan business Events zijn voor overheidstoepassingen.</p>
<h1 style="text-align: justify;">Enabler 5: Steeds Betere Web Raamwerken</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft wp-image-7833" src="/wp-content/uploads/2014/12/html5_javascript_js-300x175.png" alt="" width="220" height="132" />Het venster dat de klant krijgt op een IT-toepassing, is de client. Het is dan ook enorm belangrijk dat deze goed is gebouwd en vooral handig is in gebruik. De meeste client toepassingen zijn momenteel webgebaseerd of mobiel, en ook in deze laatste categorie wint webtechnologie gestaag aan belang. Het trio <a href="/html-5-een-rijke-ervaring-zonder-plugins/">Html, Css en Javascript</a> blijft dan ook de manier bij uitstek om een eindgebruikerstoepassing te bouwen, en elk jaar zien we wel een <a href="/de-frameworks-blob/">nieuw raamwerk populair worden</a> in deze wereld; raamwerken die het makkelijker maken om sneller grotere, complexere en mooiere toepassingen te bouwen. Daarnaast wordt deze technologie ook steeds beter ondersteund door de technologie die er aan server-zijde bij komt: we krijgen haast onbeperkte schaalbaarheid en robuustheid wanneer we toestandsloze webtoepassingen gaan hosten op container platformen, gebruik makende van microservices als backend, op hun beurt ontsloten door (vaak <a href="/data-centric-it-met-rest/">RESTful</a>) API&#8217;s (en, waarom niet, werkend via <a href="/javascript-altijd-en-overal/">node.js</a>).</p>
<h1 style="text-align: justify;">Enabler 6: API&#8217;s</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-10541" src="/wp-content/uploads/2017/02/api-150x150.png" alt="" width="150" height="150" />Het aanbieden van een degelijke API is de ideale manier om de functionaliteiten van een IT systeem beschikbaar te stellen aan andere. API&#8217;s hebben reeds een hele evolutie achter de rug: eerst waren er vooral (taal-specifieke) programmatorische API&#8217;s, daarna werden componenten steeds beter interoperationeel dankzij eerst SOAP-, en daarna REST-gebaseerde API&#8217;s. Momenteel zijn er heuse API Management platformen, die, naast beheer van API&#8217;s, ook voor de interoperabiliteit van heel wat communicatieprotocollen kunnen zorgen.</p>
<p style="text-align: justify;">Via API&#8217;s kan men een sterk hergebruik van data bekomen: gegevens die reeds verwerkt zijn door één toepassing, worden op die manier beschikbaar voor een hele resem andere; vaak zijn dit dan microservices, maar ook frequent client-toepassingen op het web. De API&#8217;s worden bovendien vaak ook aangeboden aan derde partijen en daarbij soms ook gemonetariseerd. Uiteindelijk <a href="/data-centric-it-met-rest/">ontstaat er een hele &#8220;API Economy&#8221;</a>: meer en meer toepassingen ontstaan eenvoudigweg doordat de data die ze nodig hebben, reeds beschikbaar is, en makkelijk consumeerbaar via zo&#8217;n API.</p>
<h1 style="text-align: justify;">De Vortex</h1>
<p style="text-align: justify;">De relaties tussen de verschillende opgesomde technologische evoluties hier beschreven, zijn duidelijk waar te nemen: dit blijkt reeds uit de tekst. Op dit moment hebben we dan ook een unieke smeltkroes: de effecten van deze <em>enablers</em> op software engineering versterken elkaar, en vormen zo het fundament van de vele zaken die er bovenop worden gebouwd: de digitale economie.</p>
<p style="text-align: justify;"><a href="/wp-content/uploads/2017/02/vortex.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10542" src="/wp-content/uploads/2017/02/vortex.png" alt="" width="762" height="608" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/02/vortex.png 762w, https://www.smalsresearch.be/wp-content/uploads/2017/02/vortex-300x239.png 300w" sizes="auto, (max-width: 762px) 100vw, 762px" /></a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
