public async Task <APITemplateResource> CreateAPITemplateResourceAsync(APIConfig api, bool isSplit, bool isInitial) { // create api resource APITemplateResource apiTemplateResource = new APITemplateResource() { name = $"[concat(parameters('ApimServiceName'), '/{api.name}')]", type = ResourceTypeConstants.API, apiVersion = GlobalConstants.APIVersion, properties = new APITemplateProperties(), dependsOn = new string[] { } }; // add properties depending on whether the template is the initial, subsequent, or unified if (!isSplit || isInitial) { // add metadata properties for initial and unified templates // protocols can be pulled by converting the OpenApiSpec into the OpenApiDocument class OpenAPISpecReader openAPISpecReader = new OpenAPISpecReader(); OpenApiDocument doc = await openAPISpecReader.ConvertOpenAPISpecToDoc(api.openApiSpec); // supplied via optional arguments apiTemplateResource.properties.apiVersion = api.apiVersion; apiTemplateResource.properties.subscriptionRequired = api.subscriptionRequired; apiTemplateResource.properties.apiRevision = api.revision; apiTemplateResource.properties.apiRevisionDescription = api.revisionDescription; apiTemplateResource.properties.apiVersionDescription = api.apiVersionDescription; apiTemplateResource.properties.authenticationSettings = api.authenticationSettings; apiTemplateResource.properties.path = api.suffix; apiTemplateResource.properties.isCurrent = api.isCurrent; apiTemplateResource.properties.displayName = api.name; apiTemplateResource.properties.protocols = this.CreateProtocols(doc); // set the version set id if (api.apiVersionSetId != null) { // point to the supplied version set if the apiVersionSetId is provided apiTemplateResource.properties.apiVersionSetId = $"[resourceId('Microsoft.ApiManagement/service/apiVersionSets', parameters('ApimServiceName'), '{api.apiVersionSetId}')]"; } // set the authorization server id if (api.authenticationSettings != null && api.authenticationSettings.oAuth2 != null && api.authenticationSettings.oAuth2.authorizationServerId != null && apiTemplateResource.properties.authenticationSettings != null && apiTemplateResource.properties.authenticationSettings.oAuth2 != null && apiTemplateResource.properties.authenticationSettings.oAuth2.authorizationServerId != null) { apiTemplateResource.properties.authenticationSettings.oAuth2.authorizationServerId = $"[resourceId('Microsoft.ApiManagement/service/authorizationServers', parameters('ApimServiceName'), '{api.authenticationSettings.oAuth2.authorizationServerId}')]"; } } if (!isSplit || !isInitial) { // add swagger properties for subsequent and unified templates Uri uriResult; bool isUrl = Uri.TryCreate(api.openApiSpec, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); // used to escape sequences in local swagger json object deserializedFileContents = isUrl ? null : JsonConvert.DeserializeObject <object>(this.fileReader.RetrieveLocalFileContents(api.openApiSpec)); // if openApiSpec is a url inline the url, if it is a local file inline the file contents apiTemplateResource.properties.format = isUrl ? "swagger-link-json" : "swagger-json"; apiTemplateResource.properties.value = isUrl ? api.openApiSpec : JsonConvert.SerializeObject(deserializedFileContents); // supplied via optional arguments apiTemplateResource.properties.path = api.suffix; } return(apiTemplateResource); }
public async Task <APITemplateResource> CreateInitialAPITemplateResourceAsync(CreatorConfig creatorConfig) { // protocols can be pulled by converting the OpenApiSpec into the OpenApiDocument class OpenAPISpecReader openAPISpecReader = new OpenAPISpecReader(); OpenApiDocument doc = await openAPISpecReader.ConvertOpenAPISpecToDoc(creatorConfig.api.openApiSpec); // create api resource with properties APITemplateResource apiTemplateResource = new APITemplateResource() { name = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}')]", type = "Microsoft.ApiManagement/service/apis", apiVersion = "2018-06-01-preview", properties = new APITemplateProperties() { // supplied via optional arguments apiVersion = creatorConfig.api.apiVersion, subscriptionRequired = creatorConfig.api.subscriptionRequired, apiRevision = creatorConfig.api.revision, apiRevisionDescription = creatorConfig.api.revisionDescription, apiVersionDescription = creatorConfig.api.apiVersionDescription, authenticationSettings = creatorConfig.api.authenticationSettings, path = creatorConfig.api.suffix, displayName = creatorConfig.api.name, protocols = this.CreateProtocols(doc) }, // if the template is not linked the depends on for the apiVersionSet needs to be inlined here dependsOn = new string[] { } }; string versionSetId = (creatorConfig.apiVersionSet != null && creatorConfig.apiVersionSet.id != null) ? creatorConfig.apiVersionSet.id : "versionset"; // if the template is linked and a version set was created, the initial api depends on it if (creatorConfig.linked == false && creatorConfig.apiVersionSet != null) { apiTemplateResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/api-version-sets', parameters('ApimServiceName'), '{versionSetId}')]" }; } // set the version set id if (creatorConfig.apiVersionSet != null) { apiTemplateResource.properties.apiVersionSetId = $"[resourceId('Microsoft.ApiManagement/service/api-version-sets', parameters('ApimServiceName'), '{versionSetId}')]"; } else if (creatorConfig.api.apiVersionSetId != null) { apiTemplateResource.properties.apiVersionSetId = $"{creatorConfig.api.apiVersionSetId}"; } return(apiTemplateResource); }