1

我正在爲用戶定義一個端點,如下所示。我可以通過id查詢用戶。但是如何在插入用戶時獲得該ID?我的客戶端是用java編寫的,但我想知道如何使用python以及生成的java客戶端庫來檢索id。獲取插入對象的ID

from google.appengine.ext import endpoints 
from google.appengine.ext import ndb 
from protorpc import remote 
from endpoints_proto_datastore.ndb import EndpointsModel 

class User(EndpointsModel): 
    email = ndb.StringProperty(required=True) 
    phone_number = ndb.StringProperty() 
    reg_id = ndb.StringProperty() 
    created = ndb.DateTimeProperty(auto_now_add=True) 

@endpoints.api(name='whereareyoudroid', 
       version='v1', description='Where Are You Users') 
class UserApi(remote.Service): 

    @User.method(name='user.insert', path='user') 
    def insert(self, user): 
     user.put() 
     return user 

    @User.method(request_fields=('id',), 
       path='user/{id}', 
       http_method='GET', name='user.get') 
    def get(self, user): 
     if not User.from_datastore: 
      raise endpoints.NotFoundException('User not found.') 
     return user 
+0

那些額外的正面點只是將代碼粘貼到問題中的工件嗎?請刪除它們,如果有的話 – 2013-03-19 18:49:39

+0

是的,vim – user672009 2013-03-19 19:46:32

+0

的剩菜剩飯。感謝您的修復。還修復'類。 UserApi' – 2013-03-19 19:48:09

回答

4

首先,要回答你的問題:

默認情況下,您的請求和響應消息模式將在模型中的字段:emailphone_numberreg_idcreated。正如在simple get sample完成後,你可以更改此默認通過

class User(EndpointsModel): 
    _message_fields_schema = ('id', 'email', 'phone_number', 
           'reg_id', 'created') 
    email = ndb.StringProperty(required=True) 
    ... 

或通過指定response fields您在insert method希望返回到包括id

@User.method(response_fields=('id', 'email', 'phone_number', 
            'reg_id', 'created'), 
       name='user.insert', path='user') 
    def insert(self, user): 
     user.put() 
     return user 

其次,你有一個錯字/錯誤在get

語句if not User.from_datastore:將檢查User類中的User.from_datastore屬性對象是否爲「真理」,它是。您需要用戶對象上的此屬性的實際值:user.from_datastore