1

ユーザーをモデル化するエンドポイントを次のように定義しています。IDでユーザーに問い合わせることができます。しかし、ユーザーを挿入するときにそのIDを取得するにはどうすればよいですか?私のクライアントはJavaで書かれていますが、Pythonと生成されたJavaクライアントライブラリの両方で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
4

1 に答える 1

4

まず、あなたの質問に答えるために:

デフォルトでは、リクエストとレスポンスのメッセージスキーマは、モデルのフィールド、、、、、emailphone_numberなりreg_idますcreated単純なgetサンプルで行われているように、このデフォルトを変更してid

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

または、返される応答フィールド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

このステートメントは、クラスのプロパティオブジェクトが「truthy」であるif not User.from_datastore:かどうかをチェックします。このプロパティの実際の値がユーザーオブジェクトに必要です。User.from_datastoreUseruser.from_datastore

于 2013-03-19T20:06:26.923 に答える