Могу ли я получить доступ к объектам Datastore других моих приложений Google App Engine

Как известно, в движке Google App для каждой зарегистрированной учетной записи электронной почты нам разрешено подавать 10 заявок. Теперь мне нужно разделить сущности между приложениями. Это возможно? Если да, то как это реализовано?

6 ответов

Решение

Нет, это не может быть сделано. Однако, как отмечает Ник Джонсон, вы можете использовать remote_api, чтобы делать то, что вам нужно.

Вы уверены, что вам действительно нужно это сделать? Не забывайте, что вы можете иметь несколько версий приложения, работающих с одним и тем же хранилищем данных. Только 1 версия приложения является вашей "по умолчанию" и получает ваше доменное имя не appspot.com, но вы можете иметь совершенно разные кодовые базы, работающие с одним и тем же хранилищем данных /memcache, адресуемым с помощью..appspot.com

Я не знаю, удовлетворяет ли это вашим потребностям, но подумал, что я это выброшу.

Вы можете сделать это, используя доступ к API Cloud Datastore. До сих пор я не могу сделать это с помощью библиотеки 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)

просто измените "otherAppName" на короткое имя другого приложения App Engine, к хранилищу данных которого вы хотите получить доступ. Замените "Entities" на имя модели, к которой вы хотите получить доступ. Не забудьте предоставить доступ к yourCurrentApp в otherNameApp (меню IAM в облачной консоли), установите разрешения для 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: доступ к сущностям хранилища данных из другого приложения GAE

Появилась новая возможность: если одно из приложений может быть "частью" другого, оно может быть "модулем".

Активировав доступ к облачному хранилищу данных в настройках App Engine, вы можете поделиться хранилищем данных с другими приложениями App Engine (или сторонними приложениями).

Проверьте ПРОБЛЕМУ с GAE, прежде чем приступить к реализации, как указано в документации. Я пытался реализовать, как указано там, но безуспешно из-за проблемы. Ваш запрос к удаленному API достигнет целевого сервера, но ничего не выполнит. Надеюсь, что проблема будет решена в ближайшее время.

Другие вопросы по тегам