我正在使用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路径中,因为服务名称是由它提供的资源名称的重复。我该如何解决这个问题?
答案 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>
公开。