python 在FastAPI中应该如何组织路径操作?

jhdbpxl9  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(95)

我正在用FastAPI创建一个应用程序,到目前为止,它是这样的:

但是端点有问题。/API/items/filter路由有两个查询参数:然而,它给我的印象是,它被当作是API/items/{user_id}/filter,因为当我在文档中进行验证时,它会抛出一个错误,说我没有为user_id传递值。以前它要求我进行身份验证(唯一需要身份验证的路由是API/items/{user_id}。当我首先定义这个端点时,问题就解决了,如下所示:

为什么会这样?是不是有什么概念我不清楚?

piv4azn7

piv4azn71#

端点的顺序很重要!端点是按照在FastAPI对象中声明的顺序进行匹配的。假设您只有两个端点,顺序如下:

  1. API/项目/{用户标识}
  2. API/项目/筛选器
    按照此顺序,当您请求端点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"
    因此,对端点进行排序是很重要的,这也正是你在应用程序中定义端点的地方。

相关问题