In het Common Ground API-landschap worden straks alle gegevens netjes ontsloten middels een API. Er is een API die Kadastergegevens ontsluit, een API voor Zaken, Documenten, Personen, Medewerkers, etc.
Op dit moment wordt er hard gewerkt aan een set API’s die bij elkaar de kern vormen voor de API’s voor Zaakgericht werken. Deze bestaan op het moment van schrijven uit de Zaken API, Documenten API, Catalogi API en Besluiten API. Deze maken op hun beurt weer gebruik van de Autorisaties API en de Notificaties API.
Een Zaak kent typisch een of meer Betrokkenen zoals een
Natuurlijk Persoon of Vestiging. Ook gaat een Zaak meestal over een of
meer ZaakObjecten zoals een Buurt, Kunstwerkdeel, Ligplaats of Wijk.
Allemaal objecten.
Deze objecten “leven” in eigen registraties die middels API’s benaderd moeten worden. Aangezien de API’s voor Zaakgericht werken de eerste set API’s is die beschikbaar komt als VNG API standaard, is het API-landschap nog beperkt.
De objecten achter de Zaak-relaties Betrokkenen en Zaakobjecten kunnen
daarom niet worden ontsloten middels een API. Er kan dus niet een URI opgegeven
worden die verwijst naar zo’n object, zoals bijvoorbeeld hieronder is
weergegeven:
GET https://zaken.api.haarlem.nl/v1/zaakobjecten/c9a651 HTTP/1.0
{
"url": "https://zaken.api.haarlem.nl/v1/zaakobjecten/c9a651",
"zaak": "https://zaken.api.haarlem.nl/v1/zaken/66a38b",
"object": "https://objecten.api.haarlem.nl/v1/wijken/3fa723",
"relatieomschrijving": "Speelt alleen in deze wijk",
"type": "Wijk"
}
Er wordt bij het Zaakobject aan de ene kant prima gerefereerd naar een Zaak
(attribuut zaak) maar er kan nog niet verwezen worden naar een Wijk
(attribuut object).
Dit zijn de grenzen van het API-landschap. Een API verwijst naar een object dat nog niet ontsloten wordt middels een API.
Het RSGB definieert zogenaamde “matchinggegevens” van alle objecten. Een set aan gegevens die nodig zijn om een object uniek te identificeren en op te zoeken. Deze staan het meest helder vermeld in de gepubliceerde XSDs van o.a. RGBZ en RSGB, onder de (onhandige) naam “kerngegevens”.
De beoogde oplossing is nu om de “matchinggegevens” op te nemen in het bericht als er niet met een URI kan worden verwezen naar het object. Voor alle andere objecten kunnen elders gedefinieerde gegevens worden opgenomen om het object te identificeren.
In het eerder getoonde voorbeeld Wijk zijn de “matchinggegevens”: wijkCode,
wijkNaam en gem.gemeenteCode. Deze zijn opgenomen in het bericht, in het
attribuut objectIdentificatie. Ook is de registratiedatum opgenomen om
de opgenomen gegevens, of de URL-verwijzing, in het juiste tijdsperspectief
te plaatsen:
GET https://zaken.api.haarlem.nl/v1/zaakobjecten/c9a651 HTTP/1.0
{
"url": "https://zaken.api.haarlem.nl/v1/zaakobjecten/c9a651",
"zaak": "https://zaken.api.haarlem.nl/v1/zaken/66a38b",
"object": null,
"objectIdentificatie": {
"wijkCode": "0145",
"wijkNaam": "Schalkwijk",
"gemGemeenteCode": "0392"
},
"registratiedatum": "2019-06-17T17:41:22Z",
"relatieomschrijving": "Speelt alleen in deze wijk",
"type": "Wijk"
}
Het object attribuut is nu leeg, want er is geen API beschikbaar die Wijken
ontsluiten. Zowel object als objectIdentificatie mogen gevuld zijn om
compatibiliteitsredenen en met het oog op het ontstaan van toekomstige API’s.
Beide attributen mogen echter niet tegelijk leeg zijn.
Het type attribuut omschrijft, in het geval van Zaakobjecten, het type
object waar naar verwezen wordt en beïnvloed tevens welke attributen zich
bevinden in objectIdentificatie. In de Open API specificatie wordt dit
opgelost middels polymorfisme waarbij attribuut type optreedt als
“discriminator”.
Het voorbeeld van Wijk is eenvoudig generiek te trekken naar alle grenzen van
het API-landschap.
Indien in een resource een relatie wordt gelegd naar een andere bron die nog niet is gestandaardiseerd in het nieuwe gegevenslandschap op basis van API’s, dan moeten identificerende gegevens worden opgenomen in deze resource die deze relatie mogelijk maakt zonder URL-verwijzing, als volgt:
{
"<attribuutnaam>": "<URL-waarde naar andere bron>",
"<attribuutnaam>Identificatie": {
// Attributen die de relatie identificeert.
},
"registratiedatum": "<datetime>"
}
Resource “rollen”
De resource rollen kent een attribuut betrokkene. Deze kan verwijzen naar
meerdere type objecten waarvan nog geen bron is gestandaardiseerd.
Hieronder volgt een overzicht van matchinggegevens per objecttype.
Natuurlijk persoon
inpBsn (=inp.bsn)anpIdentificatie (=anp.identificatie)inpA_nummer (=inp.a-nummer)geslachtsnaamvoorvoegselGeslachtsnaamvoorlettersvoornamengeslachtsaanduidinggeboortedatumverblijfsadressubVerblijfBuitenland (=sub.verblijfBuitenland)Niet-natuurlijk persoon
innNnpId (=inn.nnpId)annIdentificatie (=ann.identificatie)statutaireNaaminnRechtsvorm (=inn.rechtsvorm)bezoekadressubVerblijfBuitenland (=sub.verblijfBuitenland)Vestiging
vestigingsNummerhandelsnaamverblijfsadressubVerblijfBuitenland (=sub.verblijfBuitenland)Organisatorische eenheid
identificatienaamisGehuisvestIn (genest JSON object)
vestigingMedewerker
identificatieachternaamvoorlettersvoorvoegselAchternaamResource “zaakobjecten”
De resource zaakobjecten kent een attribuut object. Deze kan verwijzen naar
meerdere type objecten waarvan nog geen bron is gestandaardiseerd.
N.B. Het attribuut authentiek wordt achterwege gelaten omdat geen van deze
gegevens worden aangemerkt als authentiek.
Hieronder volgt een overzicht van matchinggegevens per objecttype.
adres
identificatieauthentiekwplWoonplaatsNaam (=wpl.woonplaatsNaam)gorOpenbareRuimteNaam (=gor.openbareRuimteNaam)huisnummerhuisletterhuisnummertoevoegingpostcodebesluit
Niet van toepassing: URL-verwijzing mogelijk naar Besluiten API besluit
buurt
buurtCodebuurtNaamgem.gemeenteCodewykWijkCode (=wyk.wijkCode)enkelvoudigDocument
Niet van toepassing: URL-verwijzing mogelijk naar Documenten API enkelvoudiginformatieobject
gemeente
gemeenteCodegemeenteNaamgemeentelijkeOpenbareRuimte
identificatieopenbareRuimteNaamhuishouden
nummerisGehuisvestIn (genest JSON object)
terreinGebouwdObjectinrichtingselement
typeidentificatienaamkadastraleOnroerendeZaak
kadastraleIdentificatiekadastraleAanduidingkunstwerkdeel
typeidentificatienaammaatschappelijkeActiviteit
kvkNummerhandelsnaammedewerker
Gelijk aan Rol.betrokkene voor Medewerker.
natuurlijkPersoon
Gelijk aan Rol.betrokkene voor Natuurlijk persoon.
nietNatuurlijkPersoon
Gelijk aan Rol.betrokkene voor Niet-natuurlijk persoon.
openbareRuimte
identificatiewplWoonplaatsNaam (=wpl.woonplaatsNaam)gorOpenbareRuimteNaam (=gor.openbareRuimteNaam)organisatorischeEenheid
Gelijk aan Rol.betrokkene voor Organisatorische eenheid.
pand
identificatiesamengesteldDocument
spoorbaandeel
typeidentificatienaamstatus
Niet van toepassing: URL-verwijzing mogelijk naar Zaken API status
terreindeel
typeidentificatienaamterreinGebouwdObject
identificatieadresAanduidingGrp (genest JSON object)
numIdentificatie (=num.identificatie)oaoIdentificatie (=oao.identificatie)wplWoonplaatsNaam (=wpl.woonplaatsNaam)gorOpenbareRuimteNaam (=gor.openbareRuimteNaam)aoaPostcode (=aoa.postcode)aoaHuisnummer (=aoa.huisnummer)aoaHuisletter (=aoa.huisletter)aoaHuisnummertoevoeging (=aoa.huisnummertoevoeging)ogoLocatieAanduiding (=ogo.locatieAanduiding)vestiging
Gelijk aan Rol.betrokkene voor Vestiging.
waterdeel
typeidentificatienaamwegdeel
typeidentificatienaamwijk
wijkCodewijkNaamgemGemeenteCode (=gem.gemeenteCode)woonplaats
identificatiewoonplaatsNaamwozDeelobject
nummerWOZDeelObjectisOnderdeelVan (genest JSON object)
Zie: wozObjectwozObject
wozObjectNummeraanduidingWOZobject (genest JSON object)
aoaIdentificatie (=aoa.identificatie)wplWoonplaatsNaam (=wpl.woonplaatsNaam)aoaPostcode (=aoa.postcode)gorOpenbareRuimteNaam (=gor.openbareRuimteNaam)aoaHuisnummer (=aoa.huisnummer)aoaHuisletter (=aoa.huisletter)aoaHuisnummertoevoeging (=aoa.huisnummertoevoeging)locatieOmschrijvingwozWaarde
waardepeildatumisVoor (genest JSON object)
Zie: wozObjectzakelijkRecht
identificatieavrAard (=avr.aard)heeftBetrekkingOp (genest JSON object)
Zie: kadastraleOnroerendeZaakheeftAlsGerechtigde (genest JSON object)
natuurlijkPersoon (genest JSON object)
natuurlijkPersoonnietNatuurlijkPersoon (genest JSON object)
nietNatuurlijkPersoonoverige (voor onbekende/niet-gestandaardiseerde objecten)