使用 flask-restless 创建 API 个响应
Creating API responses with flask-restless
假设我在 SqlAlchemy 中有两个模型:
UserType
User
User
有一个指向 UserType
的外键
我已正确配置 flask-restless 以将这些模型用作 API 端点:
/api/user
/api/user_type
但默认情况下,当我访问这些端点中的任何一个时,我都会在响应中获得与每个对象关联的相关数据:
- 每个
User
都有相应的 UserType
对象嵌套在响应中
- 每个
UserType
都有一个 User
的集合嵌套在响应中
随着数据的增长,这肯定会导致大量的开销。如果我只想获取系统支持的 UserType
列表,所有关联的用户都会回来。通常 API 会为相关资源生成 link:
/api/user/1/user_type
/api/user_type/1/users
有没有人从 flask-restless 反应中得到这些 links?
这似乎是一个已知问题,已在 GitHub 上活跃了很长时间。不确定开发者是否打算修复它:
https://github.com/jfinkels/flask-restless/issues/168#issuecomment-69821642
我最终选择了 flask-restful
并构建了我自己的端点。
从发布 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()
的 backref=backref('users')
属性指定 [= User
中的 45=] 列,而 1 是 user_type[=41 的 id
=]正在查询中。
假设我在 SqlAlchemy 中有两个模型:
UserType
User
User
有一个指向 UserType
我已正确配置 flask-restless 以将这些模型用作 API 端点:
/api/user
/api/user_type
但默认情况下,当我访问这些端点中的任何一个时,我都会在响应中获得与每个对象关联的相关数据:
- 每个
User
都有相应的UserType
对象嵌套在响应中 - 每个
UserType
都有一个User
的集合嵌套在响应中
随着数据的增长,这肯定会导致大量的开销。如果我只想获取系统支持的 UserType
列表,所有关联的用户都会回来。通常 API 会为相关资源生成 link:
/api/user/1/user_type
/api/user_type/1/users
有没有人从 flask-restless 反应中得到这些 links?
这似乎是一个已知问题,已在 GitHub 上活跃了很长时间。不确定开发者是否打算修复它:
https://github.com/jfinkels/flask-restless/issues/168#issuecomment-69821642
我最终选择了 flask-restful
并构建了我自己的端点。
从发布 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()
的 backref=backref('users')
属性指定 [= User
中的 45=] 列,而 1 是 user_type[=41 的 id
=]正在查询中。