我可以访问其他Google App Engine应用程序的数据存储区实体吗?

时间:2012-01-21 20:03:53

标签: google-app-engine transactions google-cloud-datastore

众所周知,在Google App引擎中,对于每个注册的电子邮件帐户,我们可以提交10个申请。现在,我需要在应用程序之间共享实体。这可能吗?如果是,它是如何实施的?

6 个答案:

答案 0 :(得分:4)

不,这不可能。但是,正如Nick Johnson指出的那样,您可以使用remote_api来执行您需要的操作。

答案 1 :(得分:4)

你确定你真的需要这样做吗?不要忘记,您可以拥有针对同一数据存储区运行的应用程序的多个版本。只有1个版本的应用程序是您的“默认”并获取您的非appspot.com域名,但您可以使用..appspot.com

在相同的数据存储区/内存缓存上运行完全不同的代码库

我不知道这是否满足你的需求,但我想我会把它扔出去。

答案 2 :(得分:3)

Yo可以使用Cloud Datastore API访问来实现。到目前为止,我无法使用ndb库来完成它。

这是您当前应用中的代码(Python):

from google.appengine.api import app_identity

scope = "https://www.googleapis.com/auth/datastore"
authorization_token, _ = app_identity.get_access_token(scope)
headers = {'Content-Type': 'application/json', "Authorization": "Bearer " + authorization_token}
payload = {"gqlQuery": { "queryString": "SELECT * FROM Entities"} }
url = "https://datastore.googleapis.com/v1beta3/projects/otherAppName:runQuery"

result = urlfetch.fetch(url, payload=json.dumps(payload), method=urlfetch.POST,
     follow_redirects=True, headers=headers)

只需使用您要访问其数据存储的其他App Engine应用的短名称更改“otherAppName”。使用您要访问的模型的名称更改“实体”。请记住在otherNameApp(云控制台中的IAM菜单)中授予对CurrentCurrent的访问权限,设置对yourcurrentapp@appspot.gserviceaccount.com的权限以访问数据存储区/项目

结果你将获得响应,你必须对它进行json解析,你将从查询中获得数据存储区实体的非常低级别的细节(包括每个字段和每个字段的键,路径,字段名称,类型和值)一排结果)。如果您有ndb.JsonProperties,您将收到一个BLOB值(在下一个示例代码中为DATABLOB),您必须对其进行转换:

from google.appengine.ext.bulkload import transform 
b = json.loads(transform.blobproperty_from_base64(DATOBLOB))

希望这可以帮到你。我在其他帖子中使用ndb等待答案: GAE NDB Datastore new feature: Access Datastore entities from other GAE app

答案 3 :(得分:0)

使用GAE检查ISSUE,然后按照文档中的说明进行实施。我试图按照那里的规定实施但由于问题而失败了。您对远程API的请求将到达目标服务器,但不会执行任何操作。希望尽快解决问题。

答案 4 :(得分:0)

有一种新的可能性:如果其中一个应用程序可以成为另一个应用程序的一部分,you can have it be a "module".

答案 5 :(得分:0)

通过App Engine设置中的activating Cloud Datastore access,可以与其他App Engine应用程序(或第三方应用程序)共享数据存储区。