Stel versie en revisie in met Azure API Management

⏱️3 min
Delen:

In dit artikel wordt beschreven hoe u versies en revisies toevoegt met Azure API Management . Om set API-versie en revisie, implementeren apis en apiVersionSets middelen. Laten we eens kijken hoe we deze bronnen kunnen implementeren met behulp van de ARM Template .

ARM Template

Laten we eerst de volledige ARM Template .

json
1{
2 "$schema": "https://schema.management.azure.com/schemas/2018-05-01/deploymentTemplate.json#",
3 "contentVersion": "1.0.0.0",
4 "parameters": {
5 "apiRevision": {
6 "type": "string",
7 "metadata": {
8 "description": "API Revision"
9 }
10 },
11 "apiVersion": {
12 "type": "string",
13 "metadata": {
14 "description": "API Version"
15 }
16 },
17 "serviceName": {
18 "type": "string",
19 "metadata": {
20 "description": "API Management Service Name"
21 }
22 },
23 "apiVersionSetName": {
24 "type": "string",
25 "metadata": {
26 "description": "API Management Version Set Name"
27 }
28 },
29 "apiName": {
30 "type": "string",
31 "metadata": {
32 "description": "API Name"
33 }
34 },
35 "apiDisplayName": {
36 "type": "string",
37 "metadata": {
38 "description": "API Display Name"
39 }
40 }
41 },
42 "variables": {},
43 "resources": [
44 {
45 "name": "[concat(parameters('serviceName'), '/', parameters('apiVersionSetName'))]",
46 "type": "Microsoft.ApiManagement/service/apiVersionSets",
47 "apiVersion": "2019-01-01",
48 "properties": {
49 "description": "version sets of my apis.",
50 "displayName": "[parameters('apiVersionSetName')]",
51 "versioningScheme": "Segment"
52 }
53 },
54 {
55 "name": "[concat(parameters('serviceName'), '/', parameters('apiName'), ';rev=', parameters('apiRevision'))]",
56 "type": "Microsoft.ApiManagement/service/apis",
57 "apiVersion": "2019-01-01",
58 "dependsOn": [
59 "[resourceId('Microsoft.ApiManagement/service/apiVersionSets', parameters('serviceName'), parameters('apiVersionSetName'))]"
60 ],
61 "properties": {
62 "description": "my api",
63 "displayName": "[parameters('apiDisplayName')]",
64 "apiVersionSetId": "[resourceId('Microsoft.ApiManagement/service/apiVersionSets', parameters('serviceName'), parameters('apiVersionSetName'))]",
65 "apiVersion": "[parameters('apiVersion')]",
66 "apiRevision": "[parameters('apiRevision')]",
67 "authenticationSettings": {
68 "subscriptionKeyRequired": false
69 },
70 "path": "api",
71 "protocols": ["https"],
72 "isCurrent": false,
73 "subscriptionRequired": false
74 },
75 "resources": []
76 }
77 ]
78}

Laten we apiVersionSets eens nader bekijken.

json
1{
2 "name": "[concat(parameters('serviceName'), '/', parameters('apiVersionSetName'))]",
3 "type": "Microsoft.ApiManagement/service/apiVersionSets",
4 "apiVersion": "2019-01-01",
5 "properties": {
6 "description": "version sets of my apis.",
7 "displayName": "[parameters('apiVersionSetName')]",
8 "versioningScheme": "Segment"
9 }
10}

Kijkend naar name , wordt het uitgedrukt als concat(parameters('serviceName'), '/', parameters('apiVersionSetName')) . concat is een soort sjabloonfunctie om tekenreeksen samen te voegen. Zie het officiële document 1 voor een beschrijving van de sjabloonfunctie.

Kijkend naar het argument van concat , zijn serviceName en apiVersionSetName verbonden met / . Dit komt omdat de type van deze middelen is Microsoft.ApiManagement/service/apiVersionSets , dus het is genoemd naar het type hiërarchie. Kijkend naar type , wordt dit beschreven als service/apiVersionSet . Dienovereenkomstig wordt de naam ook geconfigureerd als {service name}/{apiVersionSet name} .

versioningScheme geeft aan hoe de API-versie moet worden opgegeven. Er kunnen drie waarden worden opgegeven: Segment , Query en Header .

  • Segment : geef de versie op in het URL-pad. bijv. / api / v1 /.
  • Query : geef de versie op in de parameter query.
  • Header : Geef de versie op in de koptekst van het verzoek.

Bekijk vervolgens apis .

json
1{
2 "name": "[concat(parameters('serviceName'), '/', parameters('apiName'), ';rev=', parameters('apiRevision'))]",
3 "type": "Microsoft.ApiManagement/service/apis",
4 "apiVersion": "2019-01-01",
5 "dependsOn": [
6 "[resourceId('Microsoft.ApiManagement/service/apiVersionSets', parameters('serviceName'), parameters('apiVersionSetName'))]"
7 ],
8 "properties": {
9 "description": "my api",
10 "displayName": "[parameters('apiDisplayName')]",
11 "apiVersionSetId": "[resourceId('Microsoft.ApiManagement/service/apiVersionSets', parameters('serviceName'), parameters('apiVersionSetName'))]",
12 "apiVersion": "[parameters('apiVersion')]",
13 "apiRevision": "[parameters('apiRevision')]",
14 "authenticationSettings": {
15 "subscriptionKeyRequired": false
16 },
17 "path": "api",
18 "protocols": ["https"],
19 "isCurrent": false,
20 "subscriptionRequired": false
21 },
22 "resources": []
23}

name wordt gespecificeerd volgens de hiërarchische structuur van het type zoals uitgelegd bij apiVersionSet . Een verschil is dat de string ;rev={apiRevision} is toegevoegd. API Management heeft het concept van revisies en er wordt slechts één revisie buiten gepubliceerd (de gepubliceerde revisie wordt de current revision ). Als u een API implementeert zonder dit op te geven ;rev={apiRevision} , wordt de geïmplementeerde API de huidige revisie. Ik denk echter dat de gebruikelijke aanpak is om de revisie in te zetten als een groene omgeving, deze te testen en vervolgens om te schakelen, zoals de implementatie van Blauw / Groen. In dat geval is het beter om, in plaats van de geïmplementeerde API direct in te stellen als de huidige revisie, de revisie achter de schermen te maken en om te schakelen naar de huidige revisie nadat de nodige tests zijn doorstaan. Door ;rev={apiRevision} , kan de API worden geïmplementeerd zonder de huidige revisie te worden. Vergeet op dit moment niet om isCurrent in properties als false .

Vergeet niet ook dependsOn te specificeren. Dit is een parameter die afhankelijkheden van de implementatie definieert. De versie kan niet worden opgegeven in apis als apiVersionSet niet eerst bestaat. Daarom is het noodzakelijk om de afhankelijkheid zo opgeven dependsOn hier.

Inzetten

Laten we tot slot de bovenstaande sjabloon gebruiken.

powershell
1az group deployment create --resource-group <resourceGroupName> --template-file ./apis.json --parameters apiRevision="20191206" apiVersion="v1" serviceName=<serviceName> apiVersionSetName=<versionSetName> apiName=<apiName> apiDisplayName=<displayName>

Hiermee wordt API-versie v1, revisie 20191206 geïmplementeerd. Wat betreft de revisie, er is geen andere revisie op het moment van de eerste implementatie, dus deze wordt met kracht geïmplementeerd als de huidige revisie. Als u echter al een revisie heeft, kunt u deze implementeren zonder actueel te worden.

Samenvatting

In dit artikel wordt beschreven hoe u versies en revisies kunt toevoegen aan API Management . Het punt is dat door het toevoegen van ;rev={revision} aan de revisie naam, u een revisie kunt toevoegen zodat deze niet de huidige revisie wordt.

Footnotes

  1. Azure Resource Manager template functions

Delen:

Gerelateerde artikelen

Beschrijf Azure-resources als ARM Template
Guides

Beschrijf Azure-resources als ARM Template

ARM Template is een json-bestand dat Azure-resources definieert. Leer hoe u efficiënt ARM Templates kunt maken.

mark241