Установите версию и ревизию с помощью Azure API Management

⏱️2 мин
Поделиться:

В этой статье описывается, как добавлять версии и редакции с помощью Azure API Management . Чтобы установить версию и версию API, разверните ресурсы apis и apiVersionSets . Давайте узнаем, как развернуть эти ресурсы с помощью ARM Template .

ARM Template

Во-первых, давайте посмотрим на весь 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}

Давайте внимательнее посмотрим на apiVersionSets .

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}

Если посмотреть на name , оно выражается в виде concat(parameters('serviceName'), '/', parameters('apiVersionSetName')) . concat - это своего рода шаблонная функция для объединения строк. См. Официальный документ 1 для описания функции шаблона.

Глядя на аргументе concat , serviceName и apiVersionSetName связаны с / . Это связано с тем, что type этого ресурса - Microsoft.ApiManagement/service/apiVersionSets , поэтому он называется в соответствии с иерархией type . Глядя на type , он описывается как service/apiVersionSet . Соответственно, имя также настраивается как {service name}/{apiVersionSet name} .

versioningScheme указывает, как указать версию API. Можно указать три значения: Segment , Query и Header .

  • Segment : укажите версию в URL-пути. например / api / v1 /.
  • Query : укажите версию в параметре запроса.
  • Header : укажите версию в заголовке запроса.

Далее взгляните на 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 указывается в соответствии с иерархической структурой type как описано в apiVersionSet . Единственное отличие состоит в том, что добавлена строка ;rev={apiRevision} . API Management есть концепция версий, и снаружи публикуется только одна версия (опубликованная версия называется current revision ). Если вы развертываете API без указания этого ;rev={apiRevision} , развернутый API становится текущей ;rev={apiRevision} . Тем не менее, я думаю, что обычный подход состоит в том, чтобы развернуть ревизию в качестве зеленой среды, протестировать ее, а затем переключить, как в случае сине-зеленого развертывания. В таком случае вместо прямой установки развернутого API в качестве текущей ревизии, лучше создать закулисную ревизию и переключить ее в качестве текущей ревизии после прохождения необходимых тестов. Указав ;rev={apiRevision} , API можно развернуть, не став текущей версией. В это время не забудьте указать isCurrent в properties как false .

Не забудьте также указать dependsOn от. Это параметр, который определяет зависимости развертывания. Версия не может быть указана в apis если apiVersionSet не существует первым. Следовательно, здесь необходимо указать зависимость как dependsOn .

Развертывание

Наконец, давайте развернем шаблон выше.

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>

Будет развернута версия API v1, редакция 20191206. Что касается редакции, то во время первого развертывания другой редакции не существует, поэтому она принудительно развернута как текущая редакция. Однако, если у вас уже есть ревизия, вы можете развернуть ее, не становясь актуальной.

Резюме

В этой статье описывается, как добавлять версии и ревизии в API Management . Дело в том, что, добавив ;rev={revision} к имени ревизии, вы можете добавить ревизию, чтобы она не стала текущей ревизией.

Footnotes

  1. Azure Resource Manager template functions

Поделиться:

Связанные статьи