2012-01-21 12 views
9

Jak wiemy, w mechanizmie aplikacji Google dla każdego zarejestrowanego konta e-mail możemy składać 10 aplikacji. Teraz muszę udostępniać elementy między aplikacjami. czy to możliwe? Jeśli tak, w jaki sposób jest wdrażany?Czy mogę uzyskać dostęp do jednostek Datastore w innych aplikacjach Google App Engine

+4

Dlaczego musisz udostępniać datastore pomiędzy twoją aplikacją? Należy pamiętać, że Warunki korzystania z usługi dla robotów w sekcji 4.3c zabraniają nam "używania wielu Aplikacji do symulacji lub działania jako pojedyncza Aplikacja lub w inny sposób uzyskiwać dostęp do Usługi w sposób uniemożliwiający ponoszenie opłat". –

Odpowiedz

4

Nie, nie można tego zrobić. Jednak, jak wskazuje Nick Johnson, możesz użyć remote_api, aby zrobić to, czego potrzebujesz.

+0

dziękuję za szybką odpowiedź, po prostu szybko rzuciłem stronę i chcę cię zapytać (może być słychać głupio), może to być używane z aplikacją zaimplementowaną w Javie, ponieważ wszystkie kodowanie odbywa się w Pythonie .. –

+1

@VISD [Tutaj] (http://code.google.com/appengine/docs/java/tools/remoteapi.html) wersja Java. –

0

Przed uruchomieniem urządzenia zgodnie z dokumentacją sprawdź urządzenie ISSUE za pomocą GAE. Próbowałem wdrożyć, jak stwierdzono tam, ale z powodu błędu. Twoja prośba do zdalnego interfejsu API dotrze do serwera docelowego, ale nic nie spowoduje. Mam nadzieję, że problem zostanie wkrótce rozwiązany.

4

Czy na pewno chcesz to zrobić? Nie zapominaj, że możesz mieć wiele aplikacji działających na tym samym magazynie danych. Tylko 1 wersja aplikacji to Twoja "domyślna" i otrzymujesz nazwę domeny non appspot.com, ale możesz mieć zupełnie inne bazy kodu działające przeciwko temu samemu magazynowi danych/memcache adresowanemu za pomocą ..appspot.com

Ja nie wiem, czy to spełnia twoje potrzeby, ale myślałem, że je wyrzucę.

+0

Nie mogłem cię zrozumieć. Przepraszam, może być nowicjuszem, ale nigdy nie słyszałem o "aplikacji".com "nazwa domeny dla aplikacji GAE. Połącz zasoby z miejsca, w którym otrzymałeś te informacje. –

+1

W appengine możesz alias" normalnej "domeny (www.foo.com), którą zarejestrowałeś, aby wskazać domenę appspot.com Więc jeśli twoja domena appengine to foo.appspot.com, możesz mieć to widoczne dla twoich użytkowników jako www.foo.com, ale ta domena zawsze wskaże "domyślną" wersję twojej aplikacji. Możesz też mieć coś takiego jak cms .foo.appspot.com wskazuje na inną wersję twojego kodu żyjącego na appengine.Te dwie bazy kodu dzielą magazyn danych, memcache itp., ale tylko 1 może być w ten sposób aliasingowany –

+1

Oto link do więcej informacji .. http: //stackoverflow.com/questions/817809/how-to-use-google-app-engine-with-my-own-domain-not-subdomain –

2

Można to zrobić za pomocą interfejsu API Cloud Datastore. Do tej pory nie mogę tego zrobić za pomocą biblioteki ndb.

Jest to kod (Python) w bieżącej aplikacji:

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) 

wystarczy zmienić "otherAppName" z krótką nazwą innej aplikacji App Engine, którego magazyn danych chcesz uzyskać dostęp. Zmień "Encje", podając nazwę Modelu, do którego chcesz uzyskać dostęp. Pamiętaj, aby dać dostęp do swojej Kuracji w innymNameApp (menu IAM w konsoli w chmurze), ustawić prawa dostępu do pliku danych/projektu

W rezultacie otrzymasz odpowiedź, musisz json- przeanalizuj go, a otrzymasz bardzo szczegółowy opis elementów magazynu danych z zapytania (w tym klucze, ścieżki, nazwy pól, typy i wartości dla każdego pola i każdego wiersza wyników). Jeśli masz ndb.JsonProperties otrzymasz wartość BLOB (DATABLOB w następnym przykładzie kodu), należy go przekształcić:

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

Nadzieja to może pomóc. Czekam na odpowiedź, używając ndb w moim drugim poście: GAE NDB Datastore new feature: Access Datastore entities from other GAE app

Powiązane problemy