使用 flask-restless 创建 API 响应

Posted

技术标签:

【中文标题】使用 flask-restless 创建 API 响应【英文标题】:Creating API responses with flask-restless 【发布时间】:2015-03-11 23:05:29 【问题描述】:

假设我在 SqlAlchemy 中有两个模型:

UserType User

User 有一个指向 UserType 的外键

我已正确配置 flask-restless 以将这些模型用作 API 端点:

/api/user /api/user_type

但默认情况下,当我访问这些端点中的任何一个时,我都会在响应中获得与每个对象关联的相关数据:

每个User 都有对应的UserType 对象嵌套在响应中 每个UserType 都有一个嵌套在响应中的User 集合

随着数据的大量增长,这肯定会导致大量开销。如果我只想获取系统支持的UserType 列表,所有关联的用户都会回来。通常 API 会生成相关资源的链接:

/api/user/1/user_type /api/user_type/1/users

有没有人从不稳定的反应中得到这些链接?

【问题讨论】:

【参考方案1】:

看起来这是一个在 GitHub 上活跃了很长时间的已知问题。不确定开发人员是否打算修复它:

https://github.com/jfinkels/flask-restless/issues/168#issuecomment-69821642

我最终选择了flask-restful 并构建了自己的端点。

【讨论】:

【参考方案2】:

现在从版本 0.17.0

开始实施

如果您的 User 模型如下所示:

class User(Base):
    id = Column(Integer, primary_key=True)
    username = Column(String)
    user_type_id = Column(Integer, ForeignKey("user_type.id"))
    user_type = relationship(UserType, backref=backref('users'))

你的UserType 模型看起来像:

class UserType(Base):
    id = Column(Integer, primary_key=True)
    type = Column(String)
    description = Column(String)

然后您可以通过向...发出 GET 请求来获取特定 user_type 的所有 users...

/api/user_type/1/users

...其中后缀 /users/ 由传递给 relationship()Useruser_type 列的 backref=backref('users') 属性指定,并且 1 是被查询的user_typeid

【讨论】:

以上是关于使用 flask-restless 创建 API 响应的主要内容,如果未能解决你的问题,请参考以下文章

Flask-Restless 无法构造查询

如何使用Flask-Restless启用CORS

使用 flask-restless 得到 404 错误

如何查询使用 Flask-restless 设置的 API

Flask-Restless:manager.create_api() 不返回蓝图对象

使用 Flask-Restless 进行 GAE app.yaml 路由