使用 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()
的 User
中 user_type 列的 backref=backref('users')
属性指定,并且 1 是被查询的user_type 的id
。
【讨论】:
以上是关于使用 flask-restless 创建 API 响应的主要内容,如果未能解决你的问题,请参考以下文章