我有一个带有 2 个模型的数据库的 api。模型之间的关系如下:
- 每个产品都归一个实体所有。(多-1)
- 每个实体都拥有一种或多种产品。(1-许多)
这些在 models.py 文件中定义如下:
class Product(db.Model):
some_other_attributies = redacted
entity_id = db.Column(db.Integer, db.ForeignKey('entity.id'))
class Entity(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(64), unique=True)
# Relationships
products = db.relationship('Product', backref=db.backref('entity'))
然后,我使用create_api
来自 flask-restless 的 inbuild 来生成 api 端点,如下所示:
manager.create_api(models.Entity,
include_columns = ['id'],
collection_name = 'entities',
methods=['GET', 'POST', 'PUT', 'DELETE'],
preprocessors={ etc..
manager.create_api(models.Product,
url_prefix = '/api/v1',
include_columns = ['imei'],
collection_name = 'products',
methods=['GET', 'POST','PUT', 'DELETE'],
preprocessors= { etc...
我故意只在响应中包含产品和实体的主键。
如果我这样做,GET hostname/api/v1/products
我会得到一个列表imei
。如果我这样做,GET hostname/api/v1/entities
我会得到一个列表id
。
如果我执行 `GET hostname/api/v1/products/{product_id}/entity 它会从拥有产品 {product_id} 的实体返回所有信息。这包括返回拥有产品 {product_id} 的实体拥有的每个产品的信息。
当使用以这种方式“嵌套”的端点时,如何确保我的include_columns
或仍然被观察到?exclude_columns
支持在关系中包含特定属性,即:
`include_columns = [Entity.id]' 等...适用于对“基本”URL 的请求,即:主机名/api/v1/products,但不适用于“嵌套”URL,即:主机名/api/v1/products /1/实体
有什么建议么?