使用蓝图在Flask中设计API

时间:2015-06-02 18:42:09

标签: python api 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请求,但是那个糟糕的设计?构建可以由客户端和服务器使用的烧瓶API的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我在网络应用程序中做了类似的事情。我猜是通过授权你的意思是权限检查,而不是身份验证。我处理这个问题的方法是将授权层移出视图层并进入业务逻辑层(apiLogic)。

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