【问题标题】:Import APIs to Azure API Management (APIM) progrmatically using Microsoft.Azure.Management.ApiManagement使用 Microsoft.Azure.Management.ApiManagement 以编程方式将 API 导入 Azure API 管理 (APIM)
【发布时间】:2021-02-02 08:51:18
【问题描述】:

我想使用 Microsoft.Azure.Management.ApiManagement 将 API 从 swagger/open api 规范导入到 Azure Api Management (APIM)

使用 powershel 很容易做到:

Import-AzApiManagementApi -Context $ApiMgmtContext  -SpecificationFormat "Swagger" -SpecificationPath $swaggerOutputFilePath -Path $apiPath -ApiType "Http" -Protocol "Https"

我有一个技术需求,需要通过Microsoft.Azure.Management.ApiManagement 使用 Azure SDK 以务实的方式使用 C# 进行此操作

我从这个post开始:

  • 实现ServiceClientCredentials 以检索有效令牌并将其添加到标头授权中
public class AzureApiManagementServiceCredentials : ServiceClientCredentials
{
    private string AuthenticationToken { get; set; }
    public override void InitializeServiceClient<T>(ServiceClient<T> client)
    {
         var authenticationContext = new AuthenticationContext("https://login.windows.net/{tenantID}");
         var credential = new ClientCredential(clientId: "xxxxx-xxxx-xx-xxxx-xxx", clientSecret: "{clientSecret}");
         var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", clientCredential: credential);

         if (result == null)
         {
             throw new InvalidOperationException("Failed to obtain the JWT token");
         }
         AuthenticationToken = result.AccessToken;
   }

   //  override ProcessHttpRequestAsync to use the authentication token as an Authorization header:
   public override async Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   {
       if (request == null) throw new ArgumentNullException("request");

       if (AuthenticationToken == null) throw new InvalidOperationException("Token Provider Cannot Be Null");

       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AuthenticationToken);
       request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

       await base.ProcessHttpRequestAsync(request, cancellationToken);
   }
}

另一方面,我有一个 AzureApiManagementService 类来处理 API 和产品:

public async Task<ApiContract> CreateApi(ApimCreateApi apimCreateApi )
{
     var serviceCredentials = new AzureApiManagementServiceCredentials(); 
     ApiManagementClient myClient = new ApiManagementClient(serviceCredentials);

    //here where I stuck 
    //I can use  myClient.Api.CreateOrUpdateAsync(...)
    //but it's going to create just an empty API on APIM
    myClient.
    ...
}

我只能创建一个 API 实体,我找不到从 openApi 规范 /swagger 创建/导入 API 的正确方法。

所以我发布这个是为了获得更多想法并在这个主题上挑战我!

谢谢!

【问题讨论】:

    标签: c# azure api azure-api-management azure-sdk-.net


    【解决方案1】:

    从 APIM 的角度来看,导入与创建新 API 的手势相同(下面的 PUT 调用相同),所以我希望这会在 ApimCreateContract 上公开,寻找类似于 REST API 构建方式的格式/值属性:@987654321 @

    【讨论】:

    • 我的用例依赖于开放的 api 规范 json 数据,这是我的输入。如何使用我输入的 SDK 创建新的 API?最难的一步如何添加相同的操作
    猜你喜欢
    • 2022-07-25
    • 1970-01-01
    • 2020-07-06
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多