top of page

DRY January #3

  • thim90
  • Jan 29
  • 3 min read

Custom API

Dry January gaat niet alleen over stoppen, maar misschien nog wel meer over volhouden.

En daarmee zijn we aangekomen bij de derde en laatste blog van mijn Dry January-reeks.


In de vorige blogs ging het vooral over de client.

Eerst door logica expliciet te maken, daarna door UI consistent te houden.


Maar dat blijft allemaal aan de buitenkant van het platform.

En als we DRY écht serieus nemen, dan wil je dat belangrijke logica op één plek wordt onderhouden.

Alleen de client is daarvoor vaak niet voldoende.


In deze blog gaan we daarom een laag dieper.

Richting een van mijn favoriete onderdelen binnen het Power Platform: Dataverse Custom APIs.


Wanneer DRY client-side niet meer genoeg is

Zolang logica bedoeld is om:

  • de gebruiker te begeleiden

  • feedback te geven

  • de ervaring voorspelbaar te maken

dan is client-side een prima plek.


Maar zodra een regel:

  • altijd moet gelden

  • onafhankelijk is van het kanaal

  • data mag blokkeren of corrigeren


Dan hoort die regel niet meer in de client. Op dat moment moet het platform het overnemen.

En daar komen Custom APIs en plugins in beeld.


Eerst even scherp: Actions, Custom APIs en plugins

Deze begrippen worden vaak door elkaar gebruikt. Dat is logisch, want ze raken elkaar.


Maar hun rol is verschillend.

Actions zijn de klassieke manier om gedrag te modelleren in Dataverse.

Ze bestaan al sinds de XRM-tijd en werden vaak gebruikt in combinatie met workflows of plugins.

Een Action:

  • wordt expliciet aangeroepen

  • heeft input- en outputparameters

  • kent geen automatische trigger zoals een CRUD-event


De implementatie van een Action gebeurt meestal via:

  • een plugin die aan de Action is gekoppeld

  • of via geconfigureerde stappen, vergelijkbaar met classic workflows


Een belangrijk verschil met classic workflows is dat Actions transactiebewust kunnen zijn.

Dat betekent dat je kunt instellen dat de volledige operatie wordt teruggedraaid bij een fout.


Custom APIs zijn de moderne opvolger van dit Action concept.


Wat is een Custom API eigenlijk?

Een Custom API is een expliciete operatie in Dataverse.

Geen tabel. Geen event. Maar een gedefinieerde actie met een contract.



Net als bij Actions definieer je:

  • inputparameters

  • outputparameters


Tip 💡: zelf gebruik ik vaak de Custom API Manager in de XrmToolbox voor het aanmaken en wijzigen van Custom API's


Maar anders dan bij Actions configureer je geen stappen in de API zelf

Een Custom API beschrijft wat er gebeurt, niet hoe het wordt uitgevoerd.


Een Custom API:

  • wordt expliciet aangeroepen

  • kan synchroon of asynchroon draaien

  • respecteert Dataverse-security

  • is aanroepbaar vanuit o.a.:

    • Canvas Apps

    • Custom Pages

    • Model-Driven Apps (JavaScript)

    • Power Automate

    • externe integraties


Custom API aanroepen vanuit een Canvas App
Custom API aanroepen vanuit een Canvas App
Custom API aanroepen vanuit een Model-Driven App (Command Bar)
Custom API aanroepen vanuit een Model-Driven App (Command Bar)

Custom API aanroepen vanuit PowerAutomate
Custom API aanroepen vanuit PowerAutomate

Kort gezegd: één actie, meerdere consumers.

Hoe de logica wordt uitgevoerd, hangt af van hoe je de Custom API implementeert.



Functions in Microsoft Dataverse (preview)

Sinds kort biedt Microsoft Dataverse Functions aan (preview).

Dit zijn low-code implementaties van Custom APIs.

Technisch gezien:

  • definieer je een Custom API

  • koppel je daar Power Fx-logica aan

  • en wordt die logica uitgevoerd wanneer de Custom API wordt aangeroepen


Je kunt dit zien als low-code plugins.

Voor relatief eenvoudige validaties of bewerkingen kan dit een interessant alternatief zijn voor C#-plugins.

Maar belangrijk om te benoemen: low-code betekent niet automatisch beter.


Voor complexere logica, performance kritische processen of transacties die niet mogen falen, blijft een klassieke plugin vaak de beste keuze.


Custom APIs betekenen dus niet automatisch custom code.

Sterker nog, soms betekenen ze vooral: expliciet maken wat er gebeurt.


Custom APIs als orkestratiepunt

Een Custom API kan ook puur dienen als signaal.

Power Automate kent namelijk de trigger: When an action is performed.


Deze trigger gaat af nadat de Custom API is uitgevoerd. Eventuele logica die direct aan de API is gekoppeld,wordt dus eerst afgehandeld.


Daarna kan Power Automate:

  • dezelfde inputparameters ontvangen

  • outputparameters verwerken

  • aanvullende stappen uitvoeren

Trigger PowerAutomate wanneer een Custom API is aangeroepen
Trigger PowerAutomate wanneer een Custom API is aangeroepen

In dit model gebruik je de Custom API als orkestratiepunt.

Niet om alles zelf te doen,maar om gedrag expliciet te maken.


Custom APIs en plugins (pro-code)

Zodra gedrag:

  • complex wordt

  • performance kritisch is

  • onderdeel is van een transactie

  • niet mag falen

kom je vrijwel altijd uit bij plugins.


Een plugin draait server-side, is transactiebewust en werkt kanaal onafhankelijk.

Dat maakt plugins de juiste plek voor:

  • afdwingen van businessregels

  • waarborgen van data-integriteit

  • consistente platformlogica


In de praktijk zie je vaak dit patroon:

De Custom API definieert wat er gebeurt. De plugin implementeert hoe dat gebeurt.

De API fungeert als contract. De plugin als uitvoering.

Dat maakt verantwoordelijkheden expliciet en voorkomt dat logica “verstopt” raakt in losse plugins of flows.



DRY stopt niet bij de UI. En zeker niet bij de client.

Wie DRY serieus neemt, zal uiteindelijk bij Custom APIs en plugins uitkomen.

Zeker logica die op meerdere plekken binnen een applicatie of proces noodzakelijk is.


Recent Posts

See All

Comments


Stay in touch! Sign up to my newsletter!

Thanks for submitting!

bottom of page