使用 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-RestfulFlask 的扩展。

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 API项目

Flask_restful 结合 React

七十六:flask.Restful之flask-Restful插件的基本使用

使用 Python 和 Flask 设计 RESTful API

FlaskFlask Restful api

flask create restful api