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