在Azure API Management中管理多个REST API

时间:2017-01-04 06:01:05

标签: rest azure asp.net-web-api swagger azure-api-management

我正在使用MicroServices构建REST API,这意味着我有不同的服务来提供不同的资源。假设我有以下服务:

ServiceA 正在通过以下网址提供资源资源A 资源A1 https://my-internal-endpoint-for-serviceA/resourcesA https://my-internal-endpoint-for-serviceA/resourcesA1

ServiceB 正在使用以下网址提供资源 resourcesB resourcesB1 https://my-internal-endpoint-for-serviceB/resourcesB https://my-internal-endpoint-for-serviceB/resourcesB1

现在,我想在Azure API Management中管理它们。要发布它们(通过从服务导入Swagger文档),API Management门户需要API路径进行发布。因此,serviceA和serviceB可以发布如下: https://my-api-azure-api.net/serviceA/resourcesA https://my-api-azure-api.net/serviceA/resourcesA1 https://my-api-azure-api.net/serviceB/resourcesB https://my-api-azure-api.net/serviceB/resourcesB1

但是为了更多基于资源的API管理,我希望发布的API更像下面的内容: https://my-api-azure-api.net/resourcesA https://my-api-azure-api.net/resourcesA1 https://my-api-azure-api.net/resourcesB https://my-api-azure-api.net/resourcesB1

不幸的是,API管理不允许我将2个API(serviceA和serviceB)发布到相同的路径(在这种情况下是根路径)。我不想将服务名称(或等效的东西)放在URL路径中,因为服务名称是由它提供的资源名称的重复。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Azure API管理策略可以在此为您提供帮助,特别是具有转发请求功能的控制流。文档在这里:https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-reference

我会通过将资源设置为单个API来实现此目的,方法是通过swagger添加一个,然后将其他服务添加到此服务中以使其完整(因为您希望它显示为单个完整服务)。一旦到位,您就可以自由地应用这些政策。

注意:您可能必须按以下方式扩展资源路径

https://my-api-azure-api.net/mynewservice/resourcesA
https://my-api-azure-api.net/mynewservice/resourcesA1
https://my-api-azure-api.net/mynewservice/resourcesB
https://my-api-azure-api.net/mynewservice/resourcesB1

答案 1 :(得分:0)

也许这个问题的答案可以帮助: How to chain APIs using Azure API management

您可以使用相同的策略将API Management中同一API的多个操作映射到不同的后端API。 但通常所有API都以<myGateway>.azure-api.net/<myApi>/<myOperation>公开。