|
1 |
| -# Release procedure |
2 |
| - |
3 |
| -Om een nieuwe versie van deze standaard te publiceren, moeten er nieuwe commits op `main` worden gepusht. |
4 |
| -Dit kan zowel met een losstaande PR (in het geval van kleine patch fixes) of het synchroniseren van `develop` als er een minor/major release klaar wordt gezet. |
5 |
| - |
6 |
| -# Versioning van deze standaard |
7 |
| - |
8 |
| -Deze standaard volgt het [API-standaarden beheermodel](https://gitdocumentatie.logius.nl/publicatie/api/beheermodel/). |
9 |
| -Dit betekent dat deze standaard Semantic Versioning gebruikt in de vorm van MAJOR.MINOR.PATCH. |
10 |
| - |
11 |
| -Hierbij is er wel ambiguïteit in wat Minor versus Major changes zijn, aangezien nieuwe design rules een kleine of grote impact kunnen hebben op bestaande API's die conform de API Design Rules zijn gebouwd. |
12 |
| -Om deze ambiguïteit te verduidelijken beschrijven we in deze sectie wat wel en niet valt onder Major, Minor en Patch changes bij het toevoegen van nieuwe design rules. |
13 |
| - |
14 |
| -Het wijzigen van bestaande design rules blijft een Major release. |
15 |
| - |
16 |
| -## Semantic versioning hangt af van of een API client moet worden aangepast |
17 |
| - |
18 |
| -Aangezien deze standaard allerlei design rules specificeert, komt het regelmatig voor dat nieuwe regels worden toegepast op basis van kennis opgedaan van bestaande implementaties. |
19 |
| -Hierbij kan het voorkomen dat bestaande API's niet meer voldoen aan een nieuwe set van regels in een nieuwe versie. |
20 |
| - |
21 |
| -Op basis van de analyse van leden van het TO, Beheer en publieke consultatie wordt de impact van de nieuwe regel beoordeeld. |
22 |
| -Als een nieuwe regel voor bestaande clients van een API veranderingen vereist, dan is de nieuwe versie Major. |
23 |
| -Echter, als een nieuwe regel enkel veranderingen vereist aan een API en voor de rest niet resulteren in veranderingen van een API client, dan is de nieuwe versie Minor. |
24 |
| - |
25 |
| -### Voorbeeld: gebruik standaard HTTP-methodes is Minor |
26 |
| - |
27 |
| -API's worden vrijwel altijd met HTTP-methodes geïmplementeerd. |
28 |
| -Het expliciet maken van deze requirement voorkomt ambiguïteit en API clients maken hier praktisch altijd gebruik van. |
29 |
| -Een nieuwe versie van de standaard mag een Minor version zijn, omdat de intentie (en verwachting) is dat bestaande API clients compatibel zijn. |
30 |
| - |
31 |
| -### Voorbeeld: vereis versienummer in de URI is Major |
32 |
| - |
33 |
| -Het is een semantische kwestie of het versienummer van een API in de URI moet. |
34 |
| -Dit betekent dat er in principe geen industrie-wijd consensus is over het wel, dan wel niet, toevoegen van een versienummer in de URI. |
35 |
| -Bestaande API's kunnen hier een andere keuze in hebben gemaakt (lees wel: dit is een potentiële situatie; De design rules hebben van de start deze rule bevat). |
36 |
| -Hierdoor is het goed mogelijk dat API clients de URL moeten veranderen. |
37 |
| -Daarom zou het toevoegen van deze design rule onderdeel zijn van een Major release. |
38 |
| - |
39 |
| -## Interpretatie van versioning scheme wat betreft compliance |
40 |
| - |
41 |
| -Aangezien de regels in de toekomst kunnen worden uitgebreid is compliance gelinkt aan versies van de standaard. |
42 |
| -Compliance aan de ADR heeft daarom de volgende eigenschappen: |
43 |
| - |
44 |
| -* Alle design rules in een nieuwe patch versie zullen dezelfde resultaten opleveren als eerdere patch versies binnen de minor release. |
45 |
| - * Dit betekent dat de compliance checks draaien op de nieuwe patch versie dezelfde score oplevert. |
46 |
| -* Bestaande design rules in een nieuwe minor versie zullen dezelfde resultaten opleveren als eerdere minor versies binnen de major release. |
47 |
| -Nieuwe design rules in een minor versie kunnen in een kleine minderheid resulteren in nieuwe issues. |
48 |
| - * Dit betekent dat in de meeste gevallen dat compliance checks draaien op de nieuwe versie, deze meestal dezelfde score oplevert. |
49 |
| - Echter, er kunnen situaties zijn waar bestaande API's op enkele nieuwe regels niet direct compliant zijn. |
50 |
| -* Design rules in een nieuwe major versie kunnen andere resultaten opleveren. |
51 |
| -Hierbij wordt de impact afgewogen ten opzichte van de waarde van de nieuwe design rule. |
52 |
| -Dit kunnen zowel nieuwe design rules die een verwachte grote impact hebben, veranderingen vereisen aan API clients of wijzigingen aan bestaande design rules. |
53 |
| - |
54 |
| -## Waarom wordt hier afgeweken van strict Semantic Versioning op basis van enkel de API's zelf? |
55 |
| - |
56 |
| -Het doel van Semantic Versioning is om inzicht te krijgen in de potentiële impact van een nieuwe versie voor de eindgebruiker. |
57 |
| -Het versienummer is een communicatiemiddel tussen de maintainer en gebruiker. |
58 |
| -Een Major version geeft een signaal af aan de gebruiker dat er een grote impact wordt verwacht. |
59 |
| - |
60 |
| -Deze standaard bevat design rules die limiterend zijn in welke keuzes beheerders van API's kunnen nemen. |
61 |
| -Dit betekent dat keuzes van beheerders in het verleden mogelijk niet meer toe gestaan worden op basis van nieuwe inzichten. |
62 |
| -Als Semantic Versioning strict wordt gevolgd, dan resulteert dit in (zeer) frequente Major releases, aangezien nieuwe regels potentieel bestaande API's non-compliant kunnen maken. |
63 |
| -Het gevolg is dat elke nieuwe design rule van deze standaard een Major release introduceert. |
64 |
| -Dit is in strijd met de intentie van Semantic Versioning, omdat hiermee de verwachtingen voor gebruikers onduidelijk wordt. |
65 |
| -Niet alle nieuwe design rules hebben dezelfde impact, sommige mogelijk helemaal geen (bijvoorbeeld als er gesproken word over "industry standard"). |
66 |
| - |
67 |
| -Om gebruikers van API's zo goed mogelijk te informeren over de impact van wijzigingen wordt er dus gekeken naar de impact op de API clients. |
68 |
| -Deze client impact wordt bepaald op basis van input van beheerders van bestaande API's via de, door de governance bepaalde, relevante gremia. |
69 |
| -Hierbij is het speerpunt dat impact voor beheerders duidelijk moet zijn zodat inschattingen voor planning en prioritisering haalbaar zijn. |
70 |
| -Deze impact inschatting is onhaalbaar als elke release een nieuwe Major version zou opleveren. |
71 |
| - |
72 |
| -Al met al zorgt dit ervoor dat de intentie van een release begrijpelijk is voor API-beheerders en afnemers. |
| 1 | +# Release procedure |
| 2 | + |
| 3 | +Om een nieuwe versie van deze standaard te publiceren, moeten er nieuwe commits op `main` worden gepusht. |
| 4 | +Dit kan zowel met een losstaande PR (in het geval van kleine patch fixes) of het synchroniseren van `develop` als er een minor/major release klaar wordt gezet. |
| 5 | + |
| 6 | +# Versioning van deze standaard |
| 7 | + |
| 8 | +Deze standaard volgt het [API-standaarden beheermodel](https://gitdocumentatie.logius.nl/publicatie/api/beheermodel/). |
| 9 | +Dit betekent dat deze standaard Semantic Versioning gebruikt in de vorm van MAJOR.MINOR.PATCH. |
| 10 | + |
| 11 | +Hierbij is er wel ambiguïteit in wat Minor versus Major changes zijn, aangezien nieuwe design rules een kleine of grote impact kunnen hebben op bestaande API's die conform de API Design Rules zijn gebouwd. |
| 12 | +Om deze ambiguïteit te verduidelijken beschrijven we in deze sectie wat wel en niet valt onder Major, Minor en Patch changes bij het toevoegen van nieuwe design rules. |
| 13 | + |
| 14 | +Het wijzigen van bestaande design rules blijft een Major release. |
| 15 | + |
| 16 | +## Semantic versioning hangt af van of een API client moet worden aangepast |
| 17 | + |
| 18 | +Aangezien deze standaard allerlei design rules specificeert, komt het regelmatig voor dat nieuwe regels worden toegepast op basis van kennis opgedaan van bestaande implementaties. |
| 19 | +Hierbij kan het voorkomen dat bestaande API's niet meer voldoen aan een nieuwe set van regels in een nieuwe versie. |
| 20 | + |
| 21 | +Op basis van de analyse van leden van het TO, Beheer en publieke consultatie wordt de impact van de nieuwe regel beoordeeld. |
| 22 | +Als een nieuwe regel voor bestaande clients van een API veranderingen vereist, dan is de nieuwe versie Major. |
| 23 | +Echter, als een nieuwe regel enkel veranderingen vereist aan een API en voor de rest niet resulteren in veranderingen van een API client, dan is de nieuwe versie Minor. |
| 24 | + |
| 25 | +### Voorbeeld: gebruik standaard HTTP-methodes is Minor |
| 26 | + |
| 27 | +API's worden vrijwel altijd met HTTP-methodes geïmplementeerd. |
| 28 | +Het expliciet maken van deze requirement voorkomt ambiguïteit en API clients maken hier praktisch altijd gebruik van. |
| 29 | +Een nieuwe versie van de standaard mag een Minor version zijn, omdat de intentie (en verwachting) is dat bestaande API clients compatibel zijn. |
| 30 | + |
| 31 | +### Voorbeeld: vereis versienummer in de URI is Major |
| 32 | + |
| 33 | +Het is een semantische kwestie of het versienummer van een API in de URI moet. |
| 34 | +Dit betekent dat er in principe geen industrie-wijd consensus is over het wel, dan wel niet, toevoegen van een versienummer in de URI. |
| 35 | +Bestaande API's kunnen hier een andere keuze in hebben gemaakt (lees wel: dit is een potentiële situatie; De design rules hebben van de start deze rule bevat). |
| 36 | +Hierdoor is het goed mogelijk dat API clients de URL moeten veranderen. |
| 37 | +Daarom zou het toevoegen van deze design rule onderdeel zijn van een Major release. |
| 38 | + |
| 39 | +## Interpretatie van versioning scheme wat betreft compliance |
| 40 | + |
| 41 | +Aangezien de regels in de toekomst kunnen worden uitgebreid is compliance gelinkt aan versies van de standaard. |
| 42 | +Compliance aan de ADR heeft daarom de volgende eigenschappen: |
| 43 | + |
| 44 | +* Alle design rules in een nieuwe patch versie zullen dezelfde resultaten opleveren als eerdere patch versies binnen de minor release. |
| 45 | + * Dit betekent dat de compliance checks draaien op de nieuwe patch versie dezelfde score oplevert. |
| 46 | +* Bestaande design rules in een nieuwe minor versie zullen dezelfde resultaten opleveren als eerdere minor versies binnen de major release. |
| 47 | +Nieuwe design rules in een minor versie kunnen in een kleine minderheid resulteren in nieuwe issues. |
| 48 | + * Dit betekent dat in de meeste gevallen dat compliance checks draaien op de nieuwe versie, deze meestal dezelfde score oplevert. |
| 49 | + Echter, er kunnen situaties zijn waar bestaande API's op enkele nieuwe regels niet direct compliant zijn. |
| 50 | +* Design rules in een nieuwe major versie kunnen andere resultaten opleveren. |
| 51 | +Hierbij wordt de impact afgewogen ten opzichte van de waarde van de nieuwe design rule. |
| 52 | +Dit kunnen zowel nieuwe design rules die een verwachte grote impact hebben, veranderingen vereisen aan API clients of wijzigingen aan bestaande design rules. |
| 53 | + |
| 54 | +## Waarom wordt hier afgeweken van strict Semantic Versioning op basis van enkel de API's zelf? |
| 55 | + |
| 56 | +Het doel van Semantic Versioning is om inzicht te krijgen in de potentiële impact van een nieuwe versie voor de eindgebruiker. |
| 57 | +Het versienummer is een communicatiemiddel tussen de maintainer en gebruiker. |
| 58 | +Een Major version geeft een signaal af aan de gebruiker dat er een grote impact wordt verwacht. |
| 59 | + |
| 60 | +Deze standaard bevat design rules die limiterend zijn in welke keuzes beheerders van API's kunnen nemen. |
| 61 | +Dit betekent dat keuzes van beheerders in het verleden mogelijk niet meer toe gestaan worden op basis van nieuwe inzichten. |
| 62 | +Als Semantic Versioning strict wordt gevolgd, dan resulteert dit in (zeer) frequente Major releases, aangezien nieuwe regels potentieel bestaande API's non-compliant kunnen maken. |
| 63 | +Het gevolg is dat elke nieuwe design rule van deze standaard een Major release introduceert. |
| 64 | +Dit is in strijd met de intentie van Semantic Versioning, omdat hiermee de verwachtingen voor gebruikers onduidelijk wordt. |
| 65 | +Niet alle nieuwe design rules hebben dezelfde impact, sommige mogelijk helemaal geen (bijvoorbeeld als er gesproken word over "industry standard"). |
| 66 | + |
| 67 | +Om gebruikers van API's zo goed mogelijk te informeren over de impact van wijzigingen wordt er dus gekeken naar de impact op de API clients. |
| 68 | +Deze client impact wordt bepaald op basis van input van beheerders van bestaande API's via de, door de governance bepaalde, relevante gremia. |
| 69 | +Hierbij is het speerpunt dat impact voor beheerders duidelijk moet zijn zodat inschattingen voor planning en prioritisering haalbaar zijn. |
| 70 | +Deze impact inschatting is onhaalbaar als elke release een nieuwe Major version zou opleveren. |
| 71 | + |
| 72 | +Al met al zorgt dit ervoor dat de intentie van een release begrijpelijk is voor API-beheerders en afnemers. |
0 commit comments