Hoe werken MKG API-aanroepen?

In deze handleiding lees je in detail over aanroepen via de MKG API. We behandelen onder andere de opbouw van URL's, hoe je meerdere of specifieke records aanroept en hoe je filters gebruikt.

Voor deze handleiding gaan we ervan uit dat de MKG API is geïnstalleerd, de MKG Exchange-licentie is afgenomen, een API-key is aangemaakt en een gebruiker met de benodigde rechten is aangemaakt. Ga voor meer informatie naar de Getting Started.

 

Basis-URL

De basis-URL voor de MKG API v3 is op de volgende manier opgebouwd:

{{basisUrl}} = https://{{server}}:{{port}}/{{root}}

Voorbeeld: https://mkgapi.domeinnaam.nl:443/mkg

De server of de domeinnaam en de poort waarop de MKG API beschikbaar is, zijn binnen MKG op te vragen. Ga hiervoor binnen MKG links bovenin naar het Help-icoon (?) en kies vervolgens voor MKG API. Hier staan de API-servernaam en het API-poortnummer.

De poort is over het algemeen 443 of 8443, maar hier kan bij on-premise-installaties van afgeweken zijn.

Met de root kan worden gekozen voor de live omgeving of de oefenomgeving van MKG.

On-premise

Live omgeving: {{basisUrl}} = https://{{server}}:{{port}}/mkg
Oefenomgeving: {{basisUrl}} = https://{{server}}:{{port}}/mkgoefenclient

MKG Cloud

Live omgeving: {{basisUrl}} = https://saas*.mkg.eu:443/mkg
Oefenomgeving: {{basisUrl}} = https://saas*-oefen.mkg.eu:443/mkgoefenclient

 

Inloggen

Voor het inloggen met de MKG API is de volgende URL benodigd:

{{authUrl}} = {{basisUrl}}/static/auth

Om in te loggen gebruiken we de volgende aanroep:

POST {{authUrl}}/j_spring_security_check

Voorbeeld-URL: https://mkgapi.domeinnaam.nl:443/mkg/static/auth/j_spring_security_check 

Headers:
Accept: application/json
Content-Type: application/x-www-form-urlencoded 

Body:
j_username:{{username}}
j_password:{{password}}

 

Bij een succesvolle aanroep (HTTP-statuscode 200) zal in de response header een JSESSIONID worden teruggeven.

Set-Cookie: "JSESSIONID=[...].mkg"

Deze JSESSIONID zal bij elke vervolgaanroep moeten worden meegegeven in de header als:

Cookie: "JSESSIONID=[...].mkg"

 

Sessie

Als je succesvol bent ingelogd, wordt een sessie-ID teruggegeven. Deze sessie kan worden hergebruikt tot deze verlopen is. Over het algemeen verloopt een sessie 30 minuten na het laatste gebruik. Een verlopen sessie zal resulteren in een HTTP-statuscode 401.

 

HTTP-statuscodes

 

Voor informatie over HTTP-statuscodes, zie HTTP-statuscodes.

 

Opbouw aanroep

De URL voor een aanroep begint als volgt:

{{restUrl}} = {{basisUrl}}/web/v3/MKG

Aan de restUrl kan vervolgens het endpoint worden toegevoegd.

{{restUrl}}/Documents/{{endpoint}}

 

Een specifiek record van een endpoint kan worden opgevraagd door na het endpoint de primary key van het record toe te voegen.

{{restUrl}}/Documents/{{endpoint}}/{{Primary Key}}

Wanneer de primary key meerdere velden bevat, worden deze aan elkaar gekoppeld met het +-teken. Als alternatief kan de RowKey van het specifieke record worden gebruikt in plaats van de primary key. De RowKey is alleen op te vragen via de API en is niet bekend bij de gebruiker of in de MKG Client.

{{restUrl}}/Documents/{{endpoint}}/{{RowKey}}

 

URL Percent-Encoding

Voor verschillende gedeeltes van de URL gelden verschillende regels.

Voorbeeld URL:

https://{{server}}:{{port}}/mkg/web/v3/MKG/Documents/vorh/1+30240258?Fieldlist=vorh_num

path = /mkg/web/v3/MKG/Documents/vorh/1+30240258
query = Fieldlist=vorh_num

Path
Bij het opgeven van een primary key voor een specifiek record mag de alleen gebruik worden gemaakt van alfanumerieke tekens, spaties, koppeltekens en underscores ( [a-z] [A-Z] [0-9] SPACE - _ ). Het +-teken wordt gebruikt om de primary key op te bouwen.

Query
Voor het querygedeelte van de URL dient Percent-Encode te worden gebruikt, waarbij een spatie vertaald dient te worden naar een %20.

 

Headers

Bij elke aanroep moet in de headers de cookie worden gevuld met de sessie-ID. Daarnaast dient X-CustomerID te worden gevuld met de API-key uit MKG.

Cookie:  "JSESSIONID=[...].mkg"
X-CustomerID: {{APIKey}}
Accept: application/json
Content-Type: application/json

 

Voorbeeld GET-aanroep:

Voorbeeld voor het ophalen van verkooporder 30240258 uit administratie 1:

GET {{restUrl}}/Documents/vorh/1+30240258

Headers:

Cookie:  "JSESSIONID=1050E02F91B6EA25933ADDBE86B5B2955D7DF77FB53E.mkg"
X-CustomerID:  "ced6600c-e15a-eabd-8414-35844cd10b34"
Accept: application/json
Content-Type: application/json

 

Verzamelingen

Vanuit een endpoint zijn soms ook verzamelingen aanwezig. Met een verzameling kan vanuit het endpoint in een onderliggende tabel informatie worden opgehaald die behoort bij het endpoint.

GET {{restUrl}}/Documents/{{endpoint}}/{{primary_key}}/{{verzameling}}

Voorbeeld: Vanuit het endpoint Verkooporders (vorh) geeft de API door middel van de verzameling vorh_vorr alle aan deze verkooporder gekoppelde regels uit de Verkooporderregels (vorr) terug.

GET {{restUrl}}/Documents/vorh/1+30240258/vorh_vorr/

Om een specifieke regel vanuit de verzameling te selecteren, kan de volgende aanroep worden gebruikt:

GET {{restUrl}}/Documents/{{endpoint}}/{{primary_key}}/{{verzameling}}/{{key}}

Voorbeeld: Vanuit het endpoint Verkooporders (vorh) geeft de API door middel van de verzameling vorh_vorr met toevoeging van het regelnummer, verkooporderregel 2 uit de Verkooporderregels (vorr) terug behorend bij de verkooporder.

GET {{restUrl}}/Documents/vorh/1+30240258/vorh_vorr/2

 

Data dictionary

Ga naar onze Data dictionary in de MKG Client voor het achterhalen van endpoints, velden, primary keys, verzamelingen en services.

 

Voor informatie over endpoints, velden en acties, zie onze Data Dictionary.

 

Veldnaam opvragen in MKG

Binnen de MKG Client kun je een veldnaam ophalen door in een veld van een formulier te gaan staan en op  Ctrl+F11  te klikken.

 

Postman-collectie

 

Voor voorbeelden van API-aanroepen, zie onze Postman API-collectie.

 

GET-aanroep

Voor het opvragen van gegevens wordt gebruikgemaakt van een GET-aanroep. Het is mogelijk om meerdere records op te halen of één specifiek record.

Parameters
FieldList:  Door komma's gescheiden lijst van velden, waarvan de waarde wordt teruggegeven.
Filter:  Filter dat wordt toegepast op de data.
NumRows:  Aantal regels dat maximaal als resultaat mag worden teruggegeven.
SkipRows: Aantal regels dat moet worden overgeslagen.
Sort:  Door komma's gescheiden lijst van velden waarop moet worden gesorteerd. Met een min-teken voor het veld wordt er aflopend gesorteerd.

 

Specifiek record

Specifiek record van een endpoint kan worden opgevraagd door na het endpoint de primary key of de RowKey van het record toe te voegen. In de module Data Dictionary in MKG kunnen de endpoints, velden en ook de primary key worden opgevraagd.

GET {{restUrl}}/Documents/{{endpoint}}/{{Primary Key}}

Voorbeeld voor het ophalen van verkooporder 30240258 uit administratie 1 met een aantal velden:

GET {{restUrl}}/Documents/vorh/1+30240258?FieldList=vorh_num,debi_num,vorh_ref_onze,vorh_ref_uw,vorh_dat_levering

 

FieldList

Met de FieldList-parameter worden de gewenste velden van het betreffende endpoint opgegeven waarvan de waarde moet worden teruggegeven. Wanneer geen FieldList wordt meegegeven, zal deze alleen de primary-key-velden teruggeven.

Het is mogelijk om door te punten naar een veld van een andere gekoppeld endpoint.

Voorbeeld voor het doorpunten vanuit de verkooporder (vorh) naar de debiteur (debi) om de debiteurnaam op te halen:

GET {{restUrl}}/Documents/vorh/1+30240258?FieldList=vorh_num,debi_num,debi_num.debi_naam

 

Filter

Met een fiter is het mogelijk om meerdere records van een endpoint op te vragen die aan een voorwaarde voldoen.

De volgende operators zijn mogelijk bij het gebruik van de Filter-parameter:

Operator Filter
= gelijk aan opgegeven waarde
< kleiner dan opgegeven waarde
> groter dan opgegeven waarde
<= kleiner dan of gelijk aan opgegeven waarde
>= groter dan of gelijk aan opgegeven waarde
in een met een opgegeven komma gescheiden lijst met waardes
NotIn niet een met een opgegeven komma gescheiden lijst met waardes
startswith begint met opgegeven waarde
endswith eindigt op opgegeven waarde
contains bevat opgegeven waarde

 

Functies bij het gebruik van de Filter-parameter op een datumveld:

Functie Filter
= Yesterday gelijk aan gisteren
= Today gelijk aan vandaag *
= Tomorrow gelijk aan morgen
= GreaterThanToday in de toekomst *
= LessThanToday in het verleden *
= Prev7Days in de afgelopen 7 dagen
= Next7Days in de komende 7 dagen
= PrevDays() in de afgelopen # dagen
= NextDays() in de komende # dagen
= PrevWeek in de vorige week
= ThisWeek in de huidige week
= NextWeek in de komende week
= PrevWeeks() in de afgelopen # weken
= NextWeeks() in de komende # weken
= PrevMonth in de afgelopen maand
= ThisMonth in de huidige maand
= NextMonth in de komende maand
= PrevMonths() in de afgelopen # maanden
= NextMonths() in de komende # maanden
= PrevQuarter in het afgelopen kwartaal
= ThisQuarter in het huidige kwartaal
= NextQuarter in het komende kwartaal
= PrevQuarters() in de afgelopen # kwartalen
= NextQuarters() in de komende # kwartalen
= PrevYear in het afgelopen jaar
= ThisYear in het huidige jaar
= NextYear in het komende jaar
= PrevYears() in de afgelopen # jaren
= NextYears() in de komende # jaren
= PrevFiscalYear in het afgelopen boekjaar
= ThisFiscalYear in het huidige boekjaar
= NextFiscalYear in het komende boekjaar
= PrevFiscalYears() in de afgelopen # boekjaren
= NextFiscalYears() in de komende # boekjaren


* Optioneel kun je hier een plus- of min-aantal opgeven. Voorbeeld: sys_dat_aanm = Today(3) --> vandaag plus 3 dagen.

Meerdere filters kunnen worden gekoppeld door middel van de operators AND en OR.