private static PutApiInApim GetPutApiInApim()

in tools/code/publisher/Api.cs [524:555]


    private static PutApiInApim GetPutApiInApim(IServiceProvider provider)
    {
        var serviceUri = provider.GetRequiredService<ManagementServiceUri>();
        var pipeline = provider.GetRequiredService<HttpPipeline>();
        var logger = provider.GetRequiredService<ILogger>();

        return async (name, dto, graphQlSpecificationContentsOption, cancellationToken) =>
        {
            logger.LogInformation("Putting API {ApiName}...", name);

            var revisionNumber = Common.GetRevisionNumber(dto);
            var uri = getRevisionedUri(name, revisionNumber);

            // APIM sometimes fails revisions if isCurrent is set to true.
            var dtoWithoutIsCurrent = dto with { Properties = dto.Properties with { IsCurrent = null } };

            await uri.PutDto(dtoWithoutIsCurrent, pipeline, cancellationToken);

            // Put GraphQl schema
            await graphQlSpecificationContentsOption.IterTask(async graphQlSpecificationContents =>
            {
                var (_, contents) = graphQlSpecificationContents;
                await uri.PutGraphQlSchema(contents, pipeline, cancellationToken);
            });
        };

        ApiUri getRevisionedUri(ApiName name, ApiRevisionNumber revisionNumber)
        {
            var revisionedApiName = ApiName.GetRevisionedName(name, revisionNumber);
            return ApiUri.From(revisionedApiName, serviceUri);
        }
    }