1

Я определяю конечную точку, моделирующую пользователя, как показано ниже. Я могу запросить пользователя по id. Но как я могу получить этот идентификатор при вставке пользователя? Мой клиент написан в java, но я хотел бы знать, как извлечь идентификатор как с помощью python, так и с помощью созданных java-клиентских библиотек.Получить идентификатор вставленного объекта

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

Эти дополнительные передние точки просто артефакты вставки кода в вопрос? Удалите их, если это так –

+0

Да, остатки от vim – user672009

+0

ok. Спасибо за исправление. Также исправьте 'class. UserApi' –

ответ

4

Во-первых, чтобы ответить на ваш вопрос:

По умолчанию схема сообщений для ваших запросов и ответ будет поля на вашей модели: email, phone_number, reg_id и created. Как это делается в simple get sample, вы можете изменить это значение по умолчанию, чтобы включить id через

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

или указав response fields вы хотите возвратить в insert method: Второе

@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.from_datastore классом User «правдивый», какой он есть. Вы хотите фактическое значение этого свойства на объекте пользователя: user.from_datastore.

Смежные вопросы