Flask-Restful 优于 Flask-Restless
Posted
技术标签:
【中文标题】Flask-Restful 优于 Flask-Restless【英文标题】:Flask-Restfull over Flask-Restless 【发布时间】:2013-10-16 09:10:12 【问题描述】:我是 Python 新手,正在探索 Flask 框架。
我正在使用 Flask Restful 开发一个简单的基于 Rest 的 API。现在,我发现最大的挑战是将 SQL Alchemy 模型类用于 JSON。今天我遇到了似乎提供这个的 Flask-Restless。那我应该怎么选。我设法通过在我的模型类中使用 to_dict 函数来转换 Flask Restful 以提供 JSON 输出
class JSONSERIALIZER(object):
def to_dict(self):
return c.name: getattr(self, c.name) for c in self.__table__.columns
亲切的问候
【问题讨论】:
请阅读How to Ask 和help center,因为它们会讨论什么是 Stack Overflow 的好问题,什么不是好问题。这个问题没有“正确”的答案,因为它完全是主观的。像这样的问题淹没了 *** 上可以有意义地回答并对他人有用的其他问题。 【参考方案1】:Restful 与 db 无关,因此您可以将它与流行的 NoSql 数据库一起使用,而 Restless 只能与 Sql 数据库一起使用(因为它依赖于 sqlalchemy)。但是,如果您最终使用 Sql 数据库并且对 sqlalchemy 没问题,那么 Restless 将为您提供更多开箱即用的功能。
fwiw,我个人最喜欢的是 Restless+Postgres。
编辑:为了展示你需要做多少事情来构建一个不安分的 api,我刚刚做了https://github.com/findjashua/flask-restless-example/blob/master/server.py
【讨论】:
【参考方案2】:Flask-restless 肯定有更多开箱即用的功能,并在 Web 服务抽象级别实现 SQLAlchemy 的查询 API,允许通过 GET 请求进行复杂查询。例如:
http://localhost:5000/api/book?q="filters":["name":"is_available","op":"==","val":true,"name":"author_id","op":"==","val":1]
相当于:
session.query(Book).filter(Book.author_id==1, Book.is_available == True).all()
此外,Flask-restless 有一个 Beta 版本,旨在符合 JSONAPI v1.0,这可能会被证明非常强大。
我写了a quick tutorial 关于如何使用 SQLAlchemy 和 Flask-Restless 引导 Flask API。它也比上面的例子更深入一点,解释了 Flask-restless 如何优雅地处理相关对象。你可以在这里找到它:
http://thelaziestprogrammer.com/sharrington/web-development/sqlalchemy-defined-rest-api
【讨论】:
以上是关于Flask-Restful 优于 Flask-Restless的主要内容,如果未能解决你的问题,请参考以下文章
Flask-restful:如何只响应附带的请求('Accept':'application/json')?