有关三种流行的HTTP路由模式的高级概述,在文中,当Azure Functions上下文中引用HTTP路由时,是指基于路径的路由。Azure Functions中的HTTP路由负责将请求URI映射到终结点,并将HTTP请求路由到那些终结点。此外,Azure Functions可以从请求中包含的URI中提取值,并将这些值用于请求处理。后者是将多个参数传递给HTTP触发器的有用方法。
路由前缀
顾名思义,您可以在Azure Functions中为HTTP触发器自定义或删除默认的“ api”路由前缀。要对其进行更改,请修改host.json文件并添加以下配置设置:
{
"extensions": {
"http": {
"routePrefix": "foo"
}
}
}
在上面的示例中,我们将路由前缀设置为“ foo”。请注意:此设置是“全局”设置,因为如果您在功能应用程序中托管多个功能,则此设置将适用于所有功能。考虑到该设置的全局性质,在修改默认设置方面我没有发现太多价值。
路线参数
如上所述,HTTP路由可以在Azure功能中用于两个目的:将请求URI映射到终结点或请求处理。路由在function.json文件中定义,并在启动功能应用程序时进行配置。根据文档,路由参数名称必须为非空并且不能包含以下字符:{,},/。
将请求URI映射到端点
到目前为止,这种模式最容易实现。让我们来看一个示例,在该示例中,您希望在同一函数应用程序中托管两个版本的HTTP触发函数。
在此示例中,我们有一个名为“ FirstName”的HTTP触发函数。要将版本添加到路由,只需修改function.json文件并添加以下配置设置:
"route": "v1/FirstName",
现在,您可以创建一个类似的名为“ FirstName2”的HTTP触发函数,修改function.json文件并添加以下配置设置:
"route": "v2/FirstName",
您可以使用此功能来确保不破坏与您发布的功能的兼容性或将流量路由到给定的端点。
使用HTTP路由参数进行请求处理
让我们来看一个使用route参数来自定义请求处理的示例。考虑默认的HTTP触发器模板,该模板将传递给“ name”参数的数据作为输入,然后输出传递给函数的数据。假设您要扩展此功能以同时使用名字和姓氏,则可以将以下内容添加到function.json文件中:
"route": "FirstNameLastName/{firstname}/{lastname}"
然后,您将修改功能代码以反映以下内容:
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
firstname = req.route_params.get('firstname')
lastname = req.route_params.get('lastname')
return func.HttpResponse(f"Hello {firstname} {lastname}! ")
请注意,您使用“ route_params”属性而不是“ params”属性。Python的HTTPRequest类的完整文档在这里。
在本地运行函数时,您会注意到URL已从默认值修改:
FirstNameLastName: [GET]
路线约束
在route参数中添加约束可以使您限制如何匹配function.json中的路由。通用语法为“ {parameter:constraint}”。例如,如果我们想限制我们的FirstNameLastName 该函数仅接受我们先前定义的两条路由的字母字符,我们将在function.json中对其进行配置,如下所示:
"route": "FirstNameLastName/{firstname:alpha}/{lastname:alpha}",
考虑到Azure Functions的按交易付费性质,这是一种确保您的功能应用程序仅处理有效交易的绝佳方法。
请注意:路由约束的处理不是由功能应用程序执行,而是由Azure功能主机执行。如果您提供的URI错误,Azure函数主机将返回404。我将在以后的博客文章中介绍有关调试路由参数的内容。
强制与可选路由参数
您可以将HTTP路由参数标记为可选,从而在代码中提供一些灵活性。'?' 字符将参数标记为可选参数,并且只能出现在参数末尾。例如,如果我们想在上一个示例中将姓氏路由参数标记为可选,则可以在function.json中对其进行配置,如下所示:
"route": "FirstNameLastName/{firstname:alpha}/{lastname:alpha?}",
请注意,如果您没有将lastname传递给上述URI,则功能代码中lastname变量的值将为None。
以上就是关于如何使用Python在Azure Functions 2.x中配置HTTP路由参数的全部内容,想了解更多关于Python的信息,请继续关注中培教育。