Festlegen von Version und Revision mit Azure API Management

⏱️3 Min
Teilen:

Dieser Artikel beschreibt das Hinzufügen von Versionen und Revisionen mit Azure API Management . apiVersionSets API-Version und apiVersionSets Ressourcen apis und apiVersionSets . Erfahren Sie, wie Sie diese Ressourcen mithilfe der ARM Template bereitstellen.

ARM Template

Schauen wir uns zunächst die gesamte 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}

Schauen apiVersionSets uns apiVersionSets genauer an.

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}

Der name wird als concat(parameters('serviceName'), '/', parameters('apiVersionSetName')) . concat ist eine Art Template-Funktion zum Verketten von Strings. Eine Beschreibung der Vorlagenfunktion finden Sie im offiziellen Dokument 1.

Mit Blick auf das Argument von concat , serviceName und apiVersionSetName sind mit verbunden / . Dies, da die type dieser Ressource ist Microsoft.ApiManagement/service/apiVersionSets , so dass es die nach gestattet type - Hierarchie. Mit Blick auf den type wird er als service/apiVersionSet . Entsprechend ist der Name auch als {service name}/{apiVersionSet name} konfiguriert.

versioningScheme gibt an, wie die API-Version angegeben wird. Es können drei Werte angegeben werden: Segment , Query und Header .

  • Segment : Geben Sie die Version im URL-Pfad an. zB / api / v1 /.
  • Query : Geben Sie die Version im Abfrageparameter an.
  • Header : Geben Sie die Version im Header der Anfrage an.

Schauen Sie sich als nächstes 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 wird entsprechend der hierarchischen Struktur des type wie unter apiVersionSet erläutert. Ein Unterschied besteht darin, dass die Zeichenfolge ;rev={apiRevision} hinzugefügt wird. API Management hat das Konzept von Revisionen, und nur eine Revision wird außerhalb veröffentlicht (die veröffentlichte Revision wird als current revision ). Wenn Sie eine API bereitstellen, ohne dies anzugeben ;rev={apiRevision} , wird die bereitgestellte API zur aktuellen ;rev={apiRevision} . Ich denke jedoch, dass der übliche Ansatz darin besteht, die Revision als eine grüne Umgebung bereitzustellen, sie zu testen und dann zu wechseln, wie bei der Blau / Grün-Bereitstellung. In einem solchen Fall ist es besser, anstatt die bereitgestellte API direkt als aktuelle Revision festzulegen, die Revision hinter den Kulissen zu erstellen und als aktuelle Revision zu wechseln, nachdem die erforderlichen Tests bestanden wurden. Durch Angabe von ;rev={apiRevision} kann die API bereitgestellt werden, ohne die aktuelle ;rev={apiRevision} werden. Vergessen Sie zu diesem Zeitpunkt nicht, isCurrent in den properties als false anzugeben.

Vergessen Sie nicht, dependsOn anzugeben. Dies ist ein Parameter, der Bereitstellungsabhängigkeiten definiert. Die Version kann in apis nicht angegeben werden, wenn apiVersionSet nicht zuerst vorhanden ist. Daher ist es notwendig, die Abhängigkeit hier als dependsOn anzugeben.

Bereitstellen

Zuletzt stellen wir die obige Vorlage bereit.

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>

Dadurch wird die API-Version v1, Revision 20191206, bereitgestellt. Zum Zeitpunkt der ersten Bereitstellung gibt es keine andere Revision. Sie wird daher zwangsweise als aktuelle Revision bereitgestellt. Wenn Sie jedoch bereits über eine Revision verfügen, können Sie diese bereitstellen, ohne auf dem neuesten Stand zu sein.

Zusammenfassung

In diesem Artikel wurde beschrieben, wie Sie Versionen und Revisionen zur API Management hinzufügen. Der Punkt ist, dass Sie durch Hinzufügen von ;rev={revision} zum Revisionsnamen eine Revision hinzufügen können, damit diese nicht zur aktuellen Revision wird.

Footnotes

  1. Azure Resource Manager template functions

Teilen:

Verwandte Artikel