У меня есть требование, согласно которому мой клиент хотел бы предоставить спецификацию OpenAPI для создания API с операциями и попросить разработчиков создать политики операций. Я понимаю, что это можно сделать для всех операций API, однако политика каждой операции различна. Возможно ли через Bicep использовать OpenAPI, а затем использовать bicep для назначения другой политики XML?
param apiName string = 'reallycool-api-dev'
param apimName string = 'apim-coolness-01'
resource apimServiceResource 'Microsoft.ApiManagement/service@2022-04-01-preview' existing = {
name: apimName
}
resource apiService 'Microsoft.ApiManagement/service/apis@2023-05-01-preview' = {
name: apiName
parent: apimServiceResource
properties: {
displayName : 'ReallyCool-API-dev'
isCurrent : true
description : 'ReallyCool API-dev'
protocols : ['https']
subscriptionRequired : true
format: 'openapi+json'
value : loadTextContent('OpenAPI ReallyCoolAPI.json')
path : 'reallycool/dev'
subscriptionKeyParameterNames: {
header : 'Ocp-Apim-Subscription-Key'
query : 'subscription-key'
}
}
}
resource firstOperationPolicy 'Microsoft.ApiManagement/service/apis/operations/policies@2022-09-01-preview' = {
name: '${apimName}/api/operations/operationNamefromOpenAPIspec/policy'
parent: apiService properties: {
format: 'rawxml'
value: loadTextContent('TestPolicy.xml')
}
}
Я получаю следующую ошибку:
Error BCP170: Expected resource name to not contain any "/" characters. Child resources with a parent resource reference (via the parent property or via nesting) must not contain a fully-qualified name.


Ошибка BCP170: Ожидаемое имя ресурса не содержит символов «/». Дочерние ресурсы со ссылкой на родительский ресурс (через родительское свойство или через вложение) не должны содержать полное имя.
Я попытался выполнить код в своей среде и получил то же сообщение об ошибке, что и вы.
Ошибка связана с форматом аргумента name, передаваемого в ресурсе политики работы API. Вы можете просто передать name: 'policy', поскольку он уже определил родительские ресурсы с соответствующими поставщиками ресурсов для конкретных операций службы управления API (API).
Модифицированный код:
resource firstOperationPolicy 'Microsoft.ApiManagement/service/apis/operations/policies@2022-09-01-preview' = {
name: 'policy'
parent: apiOperationExample
properties: {
format: 'rawxml'
value: loadTextContent('vcs.xml')
}
}
Развертывание выполнено успешно:


Необходимо знать идентификатор операции в спецификации openAPI.json относительно того, к какой политике вам нужно применить policy.xml.
формат: '${apimName}/${apiName}/operationIdfromOpenAPIspec/policy'
Необходимо указать полное имя ресурса политики, т.е.:
param apiName string = 'reallycool-api-dev'
param apimName string = 'apim-coolness-01'
resource firstOperationPolicy 'Microsoft.ApiManagement/service/apis/operations/policies@2022-09-01-preview' = {
name: '${apimName}/${apiName}/operationIdfromOpenAPIspec/policy'
properties: {
format: 'rawxml'
value: loadTextContent('TestPolicy.xml')
}
}