GAE バックエンド API が、各連絡先に対応する電子メールのコレクションを含む連絡先のリストを返すようにしたいと考えています。私はendpoints-proto-datastoreを使用しており、この質問のガイドラインに従ってこれを実装しました。
私の問題は、contacts_list
メソッドが呼び出されると、次のようになることです。
Encountered unexpected error from ProtoRPC method implementation: BadValueError (Expected Key, got [])
Contact.email_keys が空 ([]) である可能性がありますが、この動作を制御する場所がわからないため、これが発生すると思います。
私のAPI実装の関連部分は次のとおりです。
class Email(EndpointsModel):
type = ndb.StringProperty(choices=('home', 'work', 'other'))
email = ndb.StringProperty()
#.... other properties
class Contact(EndpointsModel):
first_name = ndb.StringProperty()
last_name = ndb.StringProperty()
email_keys = ndb.KeyProperty(kind=Email, repeated=True)
#.... other properties
@EndpointsAliasProperty(repeated=True, property_type=Email.ProtoModel())
def emails(self):
return ndb.get_multi(self.email_keys)
_message_fields_schema = ('id', 'first_name', 'last_name')
@endpoints.api(name='cd', version='v1')
class MyApi(remote.Service):
@Contact.query_method(query_fields=('limit', 'order', 'pageToken'),
collection_fields=('id', 'first_name', 'last_name', 'emails'),
path='contacts', name='contacts.list')
def contacts_list(self, query):
return query