使用 FLASK 将 REST API 与 Web 界面相结合的最佳实践

Nic*_*Nic 6 python api rest flask

我目前使用flask、sqlalchemy 和jinja2 构建一个Web 应用程序。

为了获得合适的 Web 界面,我按如下方式构建视图:

@app.route('/mydata/', methods=['GET'])
@login_required
def mydata_list():
    # build data here...
    return render_template('mydata/index.html', data=data))
Run Code Online (Sandbox Code Playgroud)

现在,如果我需要构建一个 REST API,我应该以

return jsonify(data)
Run Code Online (Sandbox Code Playgroud)

那么,如何处理这个以避免代码重复呢??api=True在我的 url 中添加一个,在我的视图中测试它,然后返回适当的答案是一个好习惯吗?

Mig*_*uel 6

确实没有正确或错误的方法来做到这一点,Flask 更是如此,这是一个对开发人员施加很少规则的框架。

如果你想听听我的意见,我认为对网站和 API 使用相同的视图函数集会导致代码更难维护,因为两者之间存在一些显着差异,例如:

  • 身份验证:对于 Web 和 API,这通常以非常不同的方式完成。
  • 内容:对于 API,您只需返回数据,但对于网页,视图函数可能需要做更多的工作并获取仅用于渲染模板所需的额外数据。
  • 请求方法:API 比 Web 应用程序使用更多的 HTTP 请求方法。例如,要通过 API 删除资源,客户端通常会发送DELETE请求。在Web浏览器中运行的Web应用程序需要做的一切GET,并POST请求。此外,POST请求方法在 API 和 Web 应用程序中具有不同的用途。

我的建议是,让 API 和 Web 应用程序的视图函数非常精简,并将应用程序的业务逻辑放在两组视图函数都可以调用的公共类中。