从Google Endpoints Python服务器定义和返回对象树

时间:2015-07-30 01:31:03

标签: google-app-engine google-cloud-endpoints

假设我有一些支持父/子关系的实体。类似的东西:

class Employee(ndb.Model):
  name = ndb.StringProperty()
  boss = ndb.KeyProperty(kind=Employee)

这样的结构可以让我任意深入Boss / Employees。

或者,我可以使用实体来定义父项,从对象中省略boss属性。

我的问题是:

  1. 使用KeyProperty与使用KeyProperty的优缺点是什么? 父键。
  2. 我应该如何从Python Google返回整个树 端点服务器?

1 个答案:

答案 0 :(得分:0)

实体创建后KeyProperty是可变的。父键在创建后是不可变的,这意味着如果老板发生变化,您必须重新创建Employee记录。父密钥允许您进行祖先查询,因此您可以说,直接或间接地让所有员工都在经理之下。但是,如果该经理获得新经理,则必须重新创建整个子树。你可能想要前者,除非你的数据是非常不可变的,没有很多与其他实体的交叉引用。

如果您将其作为API的一部分返回,我会说这是一个次优且非RESTful的决定。这种操作很昂贵而且不是基于资源的。通常,资源链接到其他资源而不是嵌入它们。我说一个较便宜的操作就是列出所有员工,让客户重新构建树。响应可能如下所示:

{
  'items': [
    {
      'id': '/employees/1'
      'name': 'Alice',
      'boss': /employees/2'
    },
  ]
}