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

Эта статья была опубликована более года назад. Информация может быть устаревшей.
В этой статье описывается, как добавлять версии и редакции с помощью Azure API Management . Чтобы установить версию и версию API, разверните ресурсы apis и apiVersionSets . Давайте узнаем, как развернуть эти ресурсы с помощью ARM Template .
ARM Template
Во-первых, давайте посмотрим на весь ARM Template .
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": false69 },70 "path": "api",71 "protocols": ["https"],72 "isCurrent": false,73 "subscriptionRequired": false74 },75 "resources": []76 }77 ]78}Давайте внимательнее посмотрим на apiVersionSets .
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 .
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": false16 },17 "path": "api",18 "protocols": ["https"],19 "isCurrent": false,20 "subscriptionRequired": false21 },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 .
Развертывание
Наконец, давайте развернем шаблон выше.
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} к имени ревизии, вы можете добавить ревизию, чтобы она не стала текущей ревизией.

