2012-01-21 46 views
9

Như chúng ta biết, trong công cụ Google App, cho mỗi tài khoản email đã đăng ký, chúng tôi được phép tạo 10 ứng dụng. Bây giờ, tôi cần chia sẻ các thực thể giữa các ứng dụng. Điều này có thể không? Nếu có, làm thế nào nó được thực hiện?Tôi có thể truy cập vào các thực thể Datastore của các Ứng dụng Google App Engine khác của mình

+4

Tại sao bạn cần chia sẻ các thực thể kho dữ liệu giữa ứng dụng của bạn? Hãy nhớ rằng phần Điều khoản dịch vụ của công cụ ứng dụng 4.3c cấm chúng tôi sử dụng nhiều Ứng dụng để mô phỏng hoặc hoạt động như một ứng dụng hoặc truy cập Dịch vụ theo cách nhằm tránh phí phát sinh'. –

Trả lời

4

Không, điều này không thể thực hiện được. Tuy nhiên, như Nick Johnson chỉ ra, bạn có thể sử dụng remote_api để làm những gì bạn cần.

+0

Cảm ơn bạn đã trả lời nhanh, tôi chỉ cần chạy nhanh trang web, và tôi muốn hỏi bạn (có thể được nghe ngớ ngẩn), có thể được sử dụng với ứng dụng được thực hiện trong Java vì tất cả các mã được thực hiện bằng Python .. –

+1

@VISD [Đây] (http://code.google.com/appengine/docs/java/tools/remoteapi.html) phiên bản Java. –

0

Kiểm tra ISSUE bằng GAE trước khi thực hiện như đã nêu trong tài liệu. Tôi đã cố gắng thực hiện như đã nêu ở đó nhưng với thất bại vì vấn đề này. Yêu cầu của bạn đối với API từ xa sẽ đến được máy chủ đích nhưng sẽ không thực hiện bất kỳ điều gì. Hy vọng rằng vấn đề được giải quyết sớm.

4

Bạn có chắc bạn thực sự cần phải làm điều này? Đừng quên, bạn có thể có nhiều phiên bản của một ứng dụng chạy trên cùng một kho dữ liệu. Chỉ 1 phiên bản của ứng dụng là "mặc định" của bạn và nhận tên miền không phải appspot.com của bạn, nhưng bạn có thể có các mã hoàn toàn khác nhau chạy trên cùng một kho dữ liệu/địa chỉ memcache với ..appspot.com

Tôi không biết nếu điều này đáp ứng nhu cầu của bạn nhưng nghĩ rằng tôi muốn ném nó ra khỏi đó.

+0

Tôi không thể hiểu bạn. Xin lỗi, có thể là coz là newbie nhưng tôi chưa bao giờ nghe nói về không "appspot.com "tên miền cho ứng dụng GAE. Vui lòng liên kết tài nguyên từ nơi bạn đã nhận thông tin. –

+1

Trong appengine, bạn có thể đặt tên miền" bình thường "(www.foo.com) mà bạn đã đăng ký trỏ đến tên miền appspot.com của mình Vì vậy, nếu miền appengine của bạn là foo.appspot.com, bạn có thể hiển thị tên miền này với người dùng của mình dưới dạng www.foo.com. Nhưng tên miền này sẽ luôn trỏ đến phiên bản "mặc định" của ứng dụng của bạn. .foo.appspot.com trỏ đến một phiên bản khác của mã của bạn đang sống trên appengine Hai codebases này chia sẻ kho dữ liệu, memcache, v.v. nhưng chỉ 1 có thể được đặt tên theo cách này –

+1

Đây là liên kết để biết thêm thông tin .. http: //stackoverflow.com/questions/817809/how-to-use-google-app-engine-with-my-own-domain-not-subdomain –

0

By activating Cloud Datastore access trong cài đặt App Engine của nó có thể chia sẻ một kho dữ liệu với các ứng dụng App Engine khác (hoặc các ứng dụng của bên thứ ba) .

2

Bạn có thể làm điều đó bằng cách sử dụng quyền truy cập API Datastore API. Cho đến bây giờ, tôi không thể làm điều đó bằng cách sử dụng thư viện ndb.

Đây là mã (Python) trong ứng dụng hiện tại của bạn:

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) 

chỉ cần thay đổi "otherAppName" với tên viết tắt của ứng dụng App Engine khác có kho dữ liệu bạn muốn truy cập. Thay đổi "Thực thể" với tên của Mô hình bạn muốn truy cập. Hãy nhớ cấp quyền truy cập vào ứng dụngCurrentApp của bạn trong otherNameApp (menu IAM trong bảng điều khiển đám mây), đặt quyền cho [email protected] để truy cập vào kho dữ liệu/dự án

Kết quả là bạn sẽ nhận được phản hồi, bạn phải json- phân tích nó và bạn sẽ nhận được một chi tiết mức rất thấp của các thực thể datastore từ truy vấn (bao gồm các khóa, đường dẫn, tên trường, kiểu và giá trị cho mỗi trường và mỗi hàng của kết quả). Nếu bạn có ndb.JsonProperties bạn sẽ nhận được một giá trị BLOB (DATABLOB trong ví dụ mã tiếp theo), bạn phải chuyển đổi nó:

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

Hy vọng điều này có thể giúp bạn. Tôi đang chờ câu trả lời bằng cách sử dụng ndb trong bài đăng khác của tôi: GAE NDB Datastore new feature: Access Datastore entities from other GAE app

Các vấn đề liên quan