2012-01-21 16 views
9

Como sabemos, en el motor de aplicaciones de Google, por cada cuenta de correo electrónico registrada, podemos hacer 10 aplicaciones. Ahora, necesito compartir entidades entre las aplicaciones. es posible? En caso afirmativo, ¿cómo se implementa?¿Puedo acceder a entidades de Datastore de mis otras aplicaciones de Google App Engine?

+4

¿Por qué necesita compartir entidades de almacenamiento de datos entre su aplicación? Recuerde que la sección 4.3c de los Términos del servicio de la aplicación nos prohíbe usar '' múltiples aplicaciones para simular o actuar como una sola aplicación o acceder de otra forma al servicio de una manera que pretenda evitar incurrir en tarifas ''. –

Respuesta

4

No, esto no se puede hacer. Sin embargo, como señala Nick Johnson, puede usar remote_api para hacer lo que necesita.

+0

gracias por la respuesta rápida, acabo de hacer una ejecución rápida arrojó el sitio, y quiero preguntarle (podría ser escuchado tonto), se puede usar con la aplicación implementada en Java ya que toda la codificación se hace en Python. –

+1

@VISD [Aquí tiene] (http://code.google.com/appengine/docs/java/tools/remoteapi.html) la versión de Java. –

0

Compruebe el ISSUE con GAE antes de implementarlo como se indica en la documentación. Intenté implementarlo como se dijo allí pero con un fallo debido al problema. Su solicitud a la API remota llegará al servidor de destino pero no realizará nada. Espero que el problema se resuelva pronto.

4

¿Estás seguro de que realmente necesitas hacer esto? No olvide, puede tener múltiples versiones de una aplicación que se ejecuta en el mismo almacén de datos. Solo 1 versión de la aplicación es su "predeterminado" y obtiene su nombre de dominio no appspot.com, pero puede tener bases de datos completamente diferentes ejecutándose en el mismo datastore/memcache direccionable con ..appspot.com

No lo hago sé si esto satisface tus necesidades pero pensé que lo tiraría allí.

+0

No pude entenderte. Lo siento, puede ser porque soy novato, pero nunca he oído hablar de "appspot".com "nombre de dominio para la aplicación GAE. Por favor, vincule el recurso de donde obtuvo la información. –

+1

En appengine puede alias un dominio" normal "(www.foo.com) que ha registrado para apuntar a su dominio de appspot.com. Así que si su dominio appengine es foo.appspot.com, puede tenerlo visible para sus usuarios como www.foo.com. Pero este dominio siempre apuntará a la versión "predeterminada" de su aplicación. También podría tener algo como cms .foo.appspot.com que apunta a otra versión de tu código que vive en appengine. Estas dos bases de código comparten el almacén de datos, Memcache, etc. pero solo 1 se puede aliasar de esta manera. –

+1

Aquí hay un enlace para obtener más información .. http: //stackoverflow.com/questions/817809/how-to-use-google-app-engine-with-my-own-domain-not-subdomain –

2

Yo lo puedo hacer usando el acceso API de Cloud Datastore. Hasta ahora, no puedo hacerlo usando la biblioteca ndb.

Este es el código (Python) en su aplicación actual:

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) 

acaba de cambiar "otherAppName" con el nombre corto de la otra aplicación de App Engine, cuyo almacén de datos al que desea acceder. Cambie "Entidades" con el nombre del Modelo al que desea acceder. Recuerde dar acceso a su aplicación actual en la otra aplicación NameName (menú IAM en la consola de la nube), establezca permisos en [email protected] para acceder al almacén de datos/proyecto

En el resultado obtendrá la respuesta, debe json- analízalo y obtendrás un detalle de nivel muy bajo de las entidades del almacén de datos de la consulta (incluidas las claves, las rutas, los nombres de los campos, los tipos y el valor de cada campo y cada fila de los resultados). Si tiene ndb.JsonProperties recibirá un valor BLOB (DATABLOB en el siguiente código de ejemplo), debe transformarlo:

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

Hope esto le puede ayudar. Estoy esperando la respuesta usando ndb en mi otra publicación: GAE NDB Datastore new feature: Access Datastore entities from other GAE app

Cuestiones relacionadas