我正在用FastAPI创建一个应用程序,到目前为止,它是这样的:
但是端点有问题。/API/items/filter路由有两个查询参数:然而,它给我的印象是,它被当作是API/items/{user_id}/filter,因为当我在文档中进行验证时,它会抛出一个错误,说我没有为user_id传递值。以前它要求我进行身份验证(唯一需要身份验证的路由是API/items/{user_id}。当我首先定义这个端点时,问题就解决了,如下所示:
为什么会这样?是不是有什么概念我不清楚?
piv4azn71#
端点的顺序很重要!端点是按照在FastAPI对象中声明的顺序进行匹配的。假设您只有两个端点,顺序如下:
api/items/user_a
api/items/{user_id}
api/items/filter
filter
{user_id}
"filter"
1条答案
按热度按时间piv4azn71#
端点的顺序很重要!端点是按照在FastAPI对象中声明的顺序进行匹配的。假设您只有两个端点,顺序如下:
按照此顺序,当您请求端点
api/items/user_a
时,您的请求将被路由到(1)api/items/{user_id}
。但是,如果您请求api/items/filter
,它也将被路由到(1)api/items/{user_id}
!这是因为filter
是{user_id}
的匹配,并且由于在针对匹配评估第二端点之前评估该端点,根本不评估第二终点。这也是要求您授权的原因;你认为你正在请求端点2,但是你的请求实际上被路由到端点1,路径参数为
{user_id}
="filter"
。因此,对端点进行排序是很重要的,这也正是你在应用程序中定义端点的地方。