-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Discussiepunt: wel of geen minLength op optionele properties #131
Comments
Ook m.b.t. security zijn er argumenten aan te dragen die het zo strak als mogelijk definiëren van validatieregels op alle properties ondersteunen. Zie daarvoor bijv. issue #911 van HC BRP en issue #913 van HC BRP. |
issue #911 is denk ik niet van toepassing, want die gaat over requestparameters, terwijl dit issue gaat over responseproperties. |
Kan dat een doel zijn? Daarvoor hebben we toch OAS specificaties? Gaat het hier over het bedienen van ontwikkelaars die geen OAS kunnen lezen? |
ik kan me allerlei redenen bedenken om ook lege waarden terug te krijgen. Op dit moment in de HC API's kan je om verschillende redenen een veld niet terugkrijgen:
Wij hebben ervoor gekozen om hier geen onderscheid in te maken en in al deze gevallen het gegeven niet te leveren, omdat voor de gebruikers dit onderscheid niet relevant is en afhandelen van verschillende leegwaarden, null-waarden en onbekendwaarden ingewikkeld en foutgevoelig is. Opnemen van onbekendwaarden, "magic strings" is bovendien een vorm van tight coupling. |
Hoe zou dit er trouwens uit moeten zien voor hele objecten? Bijvoorbeeld een persoon die geen partner heeft, moet die dan toch een heel object partner krijgen met alleen null waarden? Hoe ga je dan als gebruiker vaststellen dat de persoon geen partner heeft? |
De minLength wordt gebruikt om gegevensvalidatie te kunnen doen en in het contract (oas) af te spreken aan welke restricties een veld moet voldoen. Door deze weg tel aten kan niet alleen een lege property worden doorgegeven, maar ook een property die niet voldoet aan de restricties die er op die property gelden. |
Tijdens het Design Rule overleg geeft @michielverhoef aan het eens te zijn met de in dit issue geopperde bedenkingen en argumenten. @melsk-r gaat op basis van dit issue een voorstel voor een Design Rule formuleren. |
De vraag is of we in de get -actie een null-waarde terug wil geven bij een optioneel veld met een minimale lengte of een pattern.
Ook een punt van discussie is het retourneren van lege strings bij optionele velden waar een enumeration, pattern of een minlength van toepassing is. Nog een punt van discussie is of de nillable van belang kan zijn bij het uitvoeren van een patch-actie. Als een optioneel veld een waarde heeft en vervolgens als "leeg"gewijzigd moet worden terwijl er wel een pattern, enumeration of minlength op dit veld zit, hoe wordt dit dan meegegeven in de patch-actie. @HenriKorver opperde nog een uitzoek-actie (die hij gaat uitvoeren) op de ZGW-API's omtrent het gebruik van nillable en lege strings versus het (waarschijnlijk onterecht) afwezig zijn van minlength, enumeration of patterns. Daarbij is de vraag of de API meer ruimte toelaat dan functioneel wenselijk is. |
In onderstaand JSON Schema conflicteren null, minlength, enumeration (etc.) niet met elkaar. {
"$schema": "http://json-schema.org/schema#",
"description": "Comment describing your JSON Schema",
"type": "object",
"properties": {
"street_name": {
"type": [
"string",
"null"
],
"minLength": 1
},
"street_type": {
"type": [
"string",
"null"
],
"enum": [
"Street",
"Avenue",
"Boulevard",
null
]
},
"city_name": {
"type": [
"string",
"null"
],
"minLength": 1
},
"city_type": {
"type": [
"string",
"null"
],
"enum": [
"Big",
"Small",
null
]
}
}
} Onderstaand JSON voorbeeld valideert prima tegen bovenstaand schema. {
"street_name": null,
"street_type": null,
"city_name": "A"
} Zie XMLSpy voor het bewijs: |
Hieronder een random zaak die ik heb opgevraagd vanuit de referentie-implementatie van de Zaken API met Postman. Interessant om te kijken naar de diverse vormen van lege waarden:
{
"url": "https://zaken-api.vng.cloud/api/v1/zaken/58d7425e-9baa-4d47-90dd-19e9bc3914ba",
"uuid": "58d7425e-9baa-4d47-90dd-19e9bc3914ba",
"identificatie": "ZAAK-2019-0000001813",
"bronorganisatie": "000000000",
"omschrijving": "string",
"toelichting": "string",
"zaaktype": "https://catalogi-api.vng.cloud/api/v1/zaaktypen/f2cc91ef-c241-4516-afef-c0abf257eb3a",
"registratiedatum": "2019-04-09",
"verantwoordelijkeOrganisatie": "000000000",
"startdatum": "2019-04-09",
"einddatum": null,
"einddatumGepland": "2019-04-20",
"uiterlijkeEinddatumAfdoening": "2019-04-09",
"publicatiedatum": "2019-04-09",
"communicatiekanaal": "",
"productenOfDiensten": [],
"vertrouwelijkheidaanduiding": "openbaar",
"betalingsindicatie": "geheel",
"betalingsindicatieWeergave": "De met de zaak gemoeide kosten zijn geheel betaald.",
"laatsteBetaaldatum": null,
"zaakgeometrie": {
"type": "Point",
"coordinates": [
53.0,
5.0
]
},
"verlenging": {
"reden": "",
"duur": null
},
"opschorting": {
"indicatie": true,
"reden": "string"
},
"selectielijstklasse": "",
"hoofdzaak": null,
"deelzaken": [],
"relevanteAndereZaken": [],
"eigenschappen": [],
"status": null,
"kenmerken": [],
"archiefnominatie": null,
"archiefstatus": "nog_te_archiveren",
"archiefactiedatum": null,
"resultaat": null,
"opdrachtgevendeOrganisatie": ""
} Observaties:
|
Tijdens de bespreking kwamen we tot het in mijn ogen elegante compromis. Beiden leiden tot de volgende nieuwe Design Rules:
Over de wijze waarop lege arrays moeten worden uitgedrukt is nog geen duidelijkheid, dat moet nog bediscussieerd worden. |
Binnen de ZGW API's is het blijkbaar een best practice om op optionele properties geen minLength te definiëren. De gedachte die daar achter zit is dat je daarmee een ontwikkelaar de mogelijkheid geeft te achterhalen welke velden er in een response kunnen zitten door een response op te vragen waarin alle velden zitten ook als ze leeg zijn. Dit is niet mogelijk als optionele velden een minLength hebben aangezien ze dan niet meegezonden worden als ze leeg zijn.
Ik heb bij deze best practice zo mijn bedenkingen.
Het komt er op neer dat je af ziet van functionaliteit die noodzakelijk kan zijn om properties te valideren alleen om de ontwikkelaar nog een extra mogelijkheid te geven te achterhalen welke properties deze kan verwachten. Ik ben helemaal voor Developer friendliness maar heb het idee dat we hiermee wat doorslaan.
Ik ben heel benieuwd hoe anderen daarover denken.
The text was updated successfully, but these errors were encountered: