使用 Flask 创建 RESTful API?
Posted
技术标签:
【中文标题】使用 Flask 创建 RESTful API?【英文标题】:Creating a RESTful API using Flask? 【发布时间】:2015-03-17 21:50:26 【问题描述】:Flask 教程网站here 说,要创建一个 RESTful API,您需要编写扩展 restful.Resource
的类,然后通过以下方式将它们添加到 API:
app = Flask(__name__)
api = restful.Api(app)
class HelloWorld(restful.Resource):
def get(self):
return 'hello': 'world'
api.add_resource(HelloWorld, '/')
但是,我看过很多教程,它们都只是使用带有 @app.route('/path')
装饰器的函数,我更习惯于在 Flask 应用程序中看到这些函数。例如here,他们有:
@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
return jsonify('tasks': tasks)
还有here:
@app.route('/')
def api_root():
return 'Welcome'
使用restful.Resource
类与仅使用修饰函数(如果有)有什么区别?如果没有差异,我应该按照惯例做什么来创建 RESTful API?
【问题讨论】:
restful.Resource
源自 Flask 扩展。 app.route
是基于纯 Flask 的解决方案(您可以通过这种方式非常轻松地实现简单的 API)。添加 simple API exceptions 之类的基本解决方案后,对于简单的 API 来说已经足够了。
@ujvl Flask Tuto 的链接已失效。
【参考方案1】:
简答:
restful.Resource 来自 Flask-Restful 扩展,它不是 Flask 本身。 Miguel's tutorial 使用Flask 编写一个restful接口。
长答案:
首先,除了Flask,还有很多Flask extensions。尽管它们一起工作,但它们是独立的包,由各个作者编写。 Flask-Restful 是 Flask 的扩展。
Miguel 的教程解释了如何单独使用 Flask 制作一个 restful api。
Flask-Restful 旨在让我们中的一些人免于重新发明***,承诺将自定义类(或自定义 Python 数据结构)转变为宁静的 Web 服务。 Flask-RESTX,Flask-Restful 的一个分支,使用 swagger UI 自动生成 api 文档。
此外,Flask 还documented 使用了MethodView 来让开发者编写自己的restful API。同时,Flask-Restless 承诺将 SqlAlchemy 类转变为一个安静的 Web 服务。
更新(18/07/2016),flask-api 将功能/视图变成了一个宁静的界面,由 django restful framework 的作者 Tom Christie 设计。
更新 (17/03/2021),Flask-RESTPlus 与上述库类似,但它还可以帮助您构建 swagger API 文档,这是一个额外的好处。
通往罗马的道路很多。
【讨论】:
【参考方案2】:当需要大量端点时,使用方法而不是类会很快变得混乱。类/资源是分离和解耦逻辑的更好方法。此外,您的代码变得更具可读性和更容易更改/修复
使用 flask-restful 可能是最好的方法,尽管我需要做一些工作来为您的 api 创建蓝图、配置路由、处理请求参数以及每个普通 api 需要的许多事情很烦人。
我在 flask-restful 之上构建了这个轻量级框架,它可以让您轻松构建 restful api,而无需担心所需的所有布线,只需专注于定义您的 api 和编码业务逻辑。你可以在这里查看:https://github.com/sebastiandev/peach
它更面向 NOSQL 数据库,但这只是因为默认的数据库代理是 mongodb,如果你需要 sql,你可以为 sqlachemy 做一个代理(或者等到我有时间构建它)。
【讨论】:
【参考方案3】:#from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(debug=True)
【讨论】:
这与问题无关。以上是关于使用 Flask 创建 RESTful API?的主要内容,如果未能解决你的问题,请参考以下文章
七十六:flask.Restful之flask-Restful插件的基本使用