Api 管道请求,将请求重新发送到另一个端点(创建指向另一个端点的公共端点

Api 管道请求,将请求重新发送到另一个端点(创建指向另一个端点的公共端点,api,http,routes,api-design,fastapi,Api,Http,Routes,Api Design,Fastapi,我想为我的所有角色(操作员、经理、简单用户等)创建一个通用的/me端点,用于所有4种方法,GET、POST、DELETE、UPDATE 我找到了两种方法: 在端点内调用对应函数(需要为每个HTTP方法创建单独的端点) 重定向(允许创建单个函数) 这就是它的样子: @router.get(path=“/me”,status_code=200)#Var 1 异步def获取我的配置文件( 令牌:str=Depends(config.oauth2_scheme), postgres\u session:

我想为我的所有角色(操作员、经理、简单用户等)创建一个通用的
/me
端点,用于所有4种方法,
GET、POST、DELETE、UPDATE

我找到了两种方法:

  • 在端点内调用对应函数(需要为每个HTTP方法创建单独的端点)
  • 重定向(允许创建单个函数)
  • 这就是它的样子:

    @router.get(path=“/me”,status_code=200)#Var 1
    异步def获取我的配置文件(
    令牌:str=Depends(config.oauth2_scheme),
    postgres\u session:AsyncSession=dependens(database.get\u db),):
    尝试:
    令牌有效载荷=jose\u jwt.get\u未验证的\u索赔(令牌=令牌)
    如果令牌\u有效负载['role']==config.USER\u角色:
    return wait routers.users.get_user(user_id=int(token_payload['sub']),
    令牌=令牌,
    postgres\u session=postgres\u session)
    除异常作为错误外:
    services.error\u处理程序(错误)
    @router.api_router(path=“/me”,状态_代码=200,方法=[“GET”,“POST”,“DELETE”,“PATCH”])#变量2
    异步def get_my_profile(请求:请求,令牌:str=Depends(config.oauth2_方案)):
    尝试:
    令牌负载=服务。获取令牌负载(令牌=令牌)
    scheme_ip_port=f'{request.url.scheme}://{request.url.hostname}:{request.url.port}'
    URL=[f“{scheme_ip_port}/users/{token_payload['sub']}”,
    f“{scheme_ip_port}/operators/{token_payload['sub']}”,
    f“{scheme_ip_port}/clinics/employees/{token_payload['sub']}”,
    ]
    对于i,枚举中的url(iterable=url):
    如果i==token_有效载荷['role']:
    返回响应。重定向响应(url=url)
    除异常作为错误外:
    services.error\u处理程序(错误)
    

    首选哪一种?每个解决方案都有哪些缺点?

    归结为品味问题。在扩展和维护方面,重定向可能是最简单的,因为您可以向基本用户终结点、新嵌套终结点等添加参数。此外,如果预期行为和结果与角色有很大不同,是否有ally实施
    /me
    路线的一个很好的理由?@michaeldel Yeap,让我们让用户的生活更轻松:)