python - 使用蓝图在 Flask 中设计 API

标签 python api flask

我正在尝试在 Flask 中进行正确的 API 设计。我最初的设计是构建一个 API 蓝图,它是一个薄层,用于将 URL 端点桥接到实际的 API 逻辑,如下所示。

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

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

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

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

最佳答案

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

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

关于python - 使用蓝图在 Flask 中设计 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604047/

相关文章:

amazon-web-services - AWS 连接在端口 8080 上被拒绝

python - 如何将CSV文件传递给在Docker容器中运行的Flask应用程序?

python - celery 工厂功能与进口 celery

python - PySpark:连接两个 Spark 数据帧时如何将列分组为列表?

python - 第一个 Python Tkinter 窗口可以工作,但其余窗口是空白的

python - 如何在字典初始化时调用 __set_item__?

python - django api 用于在数据库中创建数据

python - 使用字典键转换列表中的元素

php - 获取关键词的谷歌排名/受欢迎程度

python - Django/Python:传递的变量在函数中未按预期工作