假设我有一些支持父/子关系的实体。类似的东西:
class Employee(ndb.Model):
name = ndb.StringProperty()
boss = ndb.KeyProperty(kind=Employee)
这样的结构可以让我任意深入Boss / Employees。
或者,我可以使用实体键来定义父项,从对象中省略boss属性。
我的问题是:
答案 0 :(得分:0)
实体创建后KeyProperty
是可变的。父键在创建后是不可变的,这意味着如果老板发生变化,您必须重新创建Employee
记录。父密钥允许您进行祖先查询,因此您可以说,直接或间接地让所有员工都在经理之下。但是,如果该经理获得新经理,则必须重新创建整个子树。你可能想要前者,除非你的数据是非常不可变的,没有很多与其他实体的交叉引用。
如果您将其作为API的一部分返回,我会说这是一个次优且非RESTful的决定。这种操作很昂贵而且不是基于资源的。通常,资源链接到其他资源而不是嵌入它们。我说一个较便宜的操作就是列出所有员工,让客户重新构建树。响应可能如下所示:
{
'items': [
{
'id': '/employees/1'
'name': 'Alice',
'boss': /employees/2'
},
]
}