我正在使用微服务构建 REST API,这意味着我有不同的服务来提供不同的资源。假设我有以下服务:
ServiceA 正在通过以下 URL 提供资源 resourcesA 和 resourcesA1
https://my-internal-endpoint-for-serviceA/resourcesA
https://my-internal-endpoint-for-serviceA/resourcesA1
ServiceB 正在通过以下 URL 提供资源 resourcesB 和 resourcesB1
https://my-internal-endpoint-for-serviceB/resourcesB
https://my-internal-endpoint-for-serviceB/resourcesB1
现在,我想在 Azure API 管理中管理它们。要发布它们(通过从服务导入 Swagger 文档),API 管理门户需要一个用于发布的 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 路径中,因为服务名称是其提供的资源名称的重复项。我该如何解决这个问题?
Azure API 管理策略可以在这方面为您提供帮助,特别是具有转发请求能力的控制流。文档位于:https://learn.microsoft.com/en-us/azure/api-management/api-management-policy-reference
我会通过将资源设置为单个 API 来解决此问题,通过 swagger 添加一个 API,然后将其他服务添加到该 API 中以使其完整(因为您希望它显示为单个完整服务)。一旦到位,您就可以自由应用这些政策。
注意:您可能需要通过以下方式扩展资源路径
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
也许这个问题的答案可以有所帮助: 如何使用 Azure API 管理链接 API
您可以使用相同的策略将API管理中同一API的多个操作映射到不同的后端API。 但一般来说,所有 API 都公开为
<myGateway>.azure-api.net/<myApi>/<myOperation>
。
您可能需要考虑像 Zuplo 这样的多云解决方案,让您的生活更轻松。一切都基于 OpenAPI,因此管理多个 API 非常容易。