我想询问是否有可能通过从函数应用程序导入所有函数来实现 API 管理端点的一致性。这将使我们能够拥有所有端点的单一事实来源,并确保我们的功能以最有效的方式得到利用。您能否提供有关如何实现这一目标的任何见解或建议?
更多详情: 目前,我们有许多使用 C# .NET Core 开发的功能应用程序驻留在 azure 门户中。
功能应用1 -> 所有用户相关功能
功能应用2 -> 所有用户服务相关功能
功能应用3 -> 所有用户预约相关功能
如果 APIM 主机名:https://dev-contoso-apim.azure-api.net
我们的做法是在API管理中将每个功能应用作为API导入,进行多种操作。我们为每个函数应用程序规划了一组专用的前缀端点。
功能应用1 -> 所有用户相关功能 -> api/v1.0/profiles
功能应用2 -> 所有用户服务相关功能 -> api/v1.0/services
功能应用3 -> 所有用户预约相关功能 -> api/v1.0/appointments
API 管理的预期基本端点,
所有用户相关功能 -> https://dev-contoso-apim.azure-api.net/api/v1.0/profiles
所有用户服务功能 -> https://dev-contoso-apim.azure-api.net/api/v1.0/services
所有用户预约功能 -> https://dev-contoso-apim.azure-api.net/api/v1.0/appointments
我尝试了各种方式使用 POC,最终遇到了很多关于如何在 API 管理和函数路由中管理前缀的问题。
以下是我尝试过的几个选项,但没有按预期工作。 用户预约可用日期 API 示例,
预期 APIM 端点:
选项1:我在C#中将函数Api Route设置为Route =
"v1.0/appointments/availableDates/"
as并将APIM前缀URL设置为空,API管理端点不是预期的端点,但API正在成功工作。
实际 APIM 端点:
注意
/api
在实际 APIM 端点中不存在。
选项2:如果我在服务器端将函数api路由更改为Route=
"availableDates"
并将APIM前缀url添加为"api/v1.0/appointments"
,则APIM端点将按预期显示,如下所示并成功工作。
查询:我不希望像将来一样提供 APIM 前缀 URL 如果我需要 V2 版本,我无法使用相同的路由在服务器端添加新功能。
选项3: 如果我将 C# 中函数 Api 的路由设置为
"v1.0/appointments/availableDates/"
并将 APIM 前缀 url 设置为 "api"
,则 APIM 端点是预期端点,但 APIM API 无法正常工作。
错误:找不到资源。
如何设置我的 APIM 前缀和路由?
我还创建了三个功能应用程序并通过以下方式导入到APIM-
api/v1.0/profiles
。因此基本 URL 将是
https://{apim-name}.azure-api.net/api/v1.0/profiles
。但所有操作都将有自己的 URL 模板,在访问该操作时该模板将被修改为基本 URL。 URL 模板充当我们在 Azure 函数中使用的路由参数。
将
/Function1
作为路由值,对于 GET 操作,我的端点将是 https://{apim-name}.azure-api.net/api/v1.0/profiles/Function1
。
api/v1.0/services
的功能应用。我在访问它时得到了预期的输出。
这样,您也可以添加第三个API,API后缀为api/v1.0/appointments。但是两个 API 不能使用完全相同的 API 后缀,APIM 不允许这样做。