【问题标题】:Designing APIs in Flask with blueprints使用蓝图在 Flask 中设计 API
【发布时间】:2015-08-16 17:10:48
【问题描述】:

我正试图围绕烧瓶中正确的 API 设计进行思考。我最初的设计是构建一个 API 蓝图,它是一个薄层,用于将 URL 端点连接到实际的 API 逻辑,如下所示。

@api.route('/posts/<int:id>')
def get_post(id):
    return apiLogic.get_post(id)

我认为这将是设计 API 的最佳方式,因为如果我需要在客户端从 jQuery 查询帖子,我可以使用 /posts/&lt;int:id&gt; 端点。此外,如果我需要从后端呈现带有特定帖子的页面,我的后端代码可以直接调用 apiLogic.get_post(id) 而无需向 /posts/&lt;int:id&gt; 发出 http 请求(本质上是向自身发送 HTTP 请求)。

但是,我认为由于 API 是一个蓝图,我不能直接在后端调用 apiLogic.get_post(id) 并保留 blueprint_before_request 授权检查,因为我不是通过蓝图本身调用此函数。

当我的后端想要获取帖子时,我可以通过不直接调用函数而是使用 http 请求来解决这个问题,但这样的设计是否糟糕?在flask中构建一个客户端和服务器都可以使用的API的最佳方法是什么?

【问题讨论】:

    标签: python api flask


    【解决方案1】:

    我对我的网络应用程序做了类似的事情。我猜你的授权是指权限检查,而不是身份验证。我处理这个问题的方法是将授权层从视图层移到业务逻辑层(apiLogic)。

    我通常使用装饰器将我的授权层附加到业务逻辑。你仍然可以为你的授权层使用装饰器并装饰你的视图函数,但你必须做两次(REST api 和 Web 前端中的每个相应方法一次)

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2014-10-18
      • 2017-05-11
      • 1970-01-01
      相关资源
      最近更新 更多