Velden
Zodra je collecties hebt aangemaakt, ga je bepalen welke informatie elk item binnen zo’n collectie moet bevatten. Dat doe je met velden. Een veld beschrijft een enkel stukje data binnen een item: van de naam van een product tot de publicatiedatum van een blogpost of de voorraadstatus in een magazijn. Velden vormen daarmee het skelet van je gegevensstructuur — ze bepalen wat er wél en niet mag worden opgeslagen.
Wat is een veld?
Een veld is een eigenschap van een item binnen een collectie. Elk veld heeft een naam en een datatype: zo kun je
bijvoorbeeld aangeven dat het veld description
tekst bevat, dat price
een getal is, of published
een datum.
Daarnaast kun je met aanvullende properties zoals required
, min
, max
en default
precies aangeven hoe de data wel
of niet geaccepteerd wordt.
Stel: je bouwt een webshop en je wilt producten opslaan. Dan wil je bijvoorbeeld een veld name
, price
en imageUrl
.
Een price
-veld mag geen negatieve getallen bevatten, dus stel je de minimumwaarde in op 0
. Voor een blogpost zou je
misschien velden willen zoals title
,content
, author
en publishedAt
, waarbij de publicatie-datum altijd de datum
is waarop deze blogpost aan de database is toegevoegd.
Veldstructuur
In de NOVI Dynamic API definieer je velden via het fields
-gedeelte in je JSON-configuratie. Elk veld bevat minimaal
de volgende onderdelen:
name
: de naam van het veld (bijvoorbeeld "price")type
: het datatype (zoals "string" of "number")required
: geeft aan of het veld verplicht is if niet ("true" of "false")
Daarnaast kun je extra validatieregels toevoegen:
min
: de minimale lengte (bij tekst) of minimale waarde (bij getallen)max
: de maximale lengte (bij tekst) of maximale waarde (bij getallen)default
: de standaardwaarde die ingevuld wordt als er niks wordt opgegeven
{ "collections": [ { "name": "products", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "price", "type": "number", "required": false, "min": 0, "default": 0 } ], "permissions": { // Zie hoofdstuk 'Rollen en Permissies' } } ] }
Let op: elke collectie moet minimaal een verplicht id
-veld bevatten. Dit is de unieke sleutel waarmee elk item
wordt geïdentificeerd.
Ondersteunde datatypes
De API ondersteunt de volgende datatypes:
Type | Beschrijving | Voorbeeld |
---|---|---|
string |
Tekst | "type": "string" |
number |
Getal (geheel of decimaal) | "type": "number" |
boolean |
Waar of niet waar | "type": "boolean" |
date |
Datum in ISO-formaat | "type": "date" |
image |
Afbeelding met metadata en base64-inhoud* | "type": "image" |
reference |
Verwijzing naar een item in een andere collectie | "type": "reference:categories" |
*Voor meer informatie over het gebruik van afbeeldingen, zie Afbeeldingen.
Validatieregels
Je kunt verschillende validatieregels instellen om de invoer te beperken:
Regel | Betekenis | Voorbeeld |
---|---|---|
required |
Veld is verplicht | "required": true |
min |
Minimale waarde (bij number ) of lengte (bij string ) |
"min": 1 |
max |
Maximale waarde of lengte | "max": 100 |
default |
Standaardwaarde als er geen waarde wordt opgegeven | "default": 0 |
Let op: Gebruik een default-waarde alleen bij velden die niet verplicht zijn. Als een veld wél verplicht is (
required: true
), dan móét de gebruiker daar zelf iets invullen voordat het item opgeslagen kan worden. Een
standaardwaarde heeft dan geen effect, want die wordt toch nooit gebruikt.
Tip: wil je datum-veld automatisch laten invullen met de datum van vandaag? Dat kan op de volgende manier:
{ "name": "createdAt", "type": "date", "required": false, "default": "CurrentDate" }
Dit veld hoeft dan niet telkens ingevuld te worden door de gebruiker, het systeem vult dit veld zelf in bij het aanmaken van een nieuw item.
Relaties via referentievelden
Met het reference
-type kun je relaties tussen collecties definiëren:
{ "name": "categoryId", "type": "reference:categories", "required": true }
Dit geeft aan dat categoryId
verwijst naar een item in de collectie categories
. Gebruik altijd namen die eindigen op
-Id
om duidelijk te maken dat het een verwijzing is naar een ander item.
Ontwerptips voor velden
1. Sla nooit overbodige data op Elk veld dat je toevoegt, komt terecht in de database én in elke API-respons. Voeg dus alleen velden toe die je daadwerkelijk nodig hebt — en waarvan je weet dat je ze gaat gebruiken in je app of frontend.
2. Gebruik default
om gebruikersinput eenvoudiger te maken
Als je weet dat een veld meestal dezelfde waarde heeft bij aanmaak (zoals status: "draft"
of isActive: true
), stel
dan een standaardwaarde in en maak het veld niet verplicht. Daarmee voorkom je dat de gebruiker dit handmatig moet
invullen en verklein je de kans op fouten of onvolledige data.
3. Beperk vrije tekst waar mogelijk Hoe meer je de gebruiker zelf laat invullen, hoe meer risico je loopt op inconsistente of vervuilde data. Gebruik bij voorkeur een beperkte set keuzewaarden door in de frontend te werken met checkboxes, radio-buttons of select-boxes waar mogelijk.
4. Gebruik áltijd validatie bij tekstvelden
Bij string
-velden zonder min
of max
bestaat de kans dat gebruikers lege waarden opslaan, of juist extreem lange
invoer meesturen. Stel duidelijke grenzen in voor wat je verwacht — bijvoorbeeld een titel tussen de 5 en 100 tekens.
5. Kies voor duidelijke en consistente naamgeving
Geef velden korte maar beschrijvende namen in het Engels en gebruik camelCase. Dus liever productName
dan
name_of_the_product
of NaamProduct
.
6. Bouw relaties bewust op met reference
-velden
Relaties maken je data krachtig, maar ze brengen ook complexiteit met zich mee. Gebruik reference
alleen als je echt
afhankelijk bent van data in een andere collectie — en geef het veld een duidelijke naam zoals categoryId
of
authorId
.
7. Gebruik het juiste type — niet alleen het makkelijke type
Een datum is geen string
, en een boolean is geen number
. Zorg dat je types aansluiten bij het soort data én de
manier waarop je app ermee werkt. Dat voorkomt conversieproblemen in je frontend.