使用Azure API管理设置版本和修订

⏱️约2分钟
分享:

本文介绍如何使用Azure API Management添加版本和修订。要设置API版本和修订版,请部署apisapiVersionSets资源。让我们学习如何使用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的参数, serviceNameapiVersionSetName/连接。这是因为此资源的typeMicrosoft.ApiManagement/service/apiVersionSets ,因此根据type层次结构对其进行命名。查看type ,它描述为service/apiVersionSet 。相应地,该名称也配置为{service name}/{apiVersionSet name}

versioningScheme指定如何指定API版本。可以指定三个值: SegmentQueryHeader

  • 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是根据apiVersionSet说明的type的层次结构指定的。 一个区别是添加了字符串;rev={apiRevision}API Management具有修订的概念,并且仅在外部发布一个修订(发布的修订称为current revision )。 如果您在未指定此;rev={apiRevision}的情况下部署API, ;rev={apiRevision}部署的API将成为当前版本。 但是,我认为通常的方法是将修订版部署为绿色环境,对其进行测试,然后再进行切换,例如蓝/绿部署。 在这种情况下,与其直接将已部署的API设置为当前版本,不如在幕后创建该版本并将其通过当前测试后切换为当前版本。 通过指定;rev={apiRevision} ,可以在不成为当前版本的情况下部署API。此时,不要忘记在properties中将isCurrent指定为false

别忘了还要指定dependsOn 。这是定义部署依赖关系的参数。 如果apiVersionSet首先不存在,则无法在apis指定版本。因此,有必要在此处将依赖性指定为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

分享:

相关文章

将后端连接到Azure API管理
Guides

将后端连接到Azure API管理

了解如何使用ARM模板向API管理添加API。使用operations、policy和backend资源连接到后端。

mark241
将Azure资源描述为ARM Template
Guides

将Azure资源描述为ARM Template

ARM Template是定义Azure资源的json文件。本文介绍如何高效创建ARM Template来部署新资源。

mark241