嘿,现在我正在使用Google ProtoRPC和Endpoints开发后端api。我正在使用endpoints-proto-datastore
库。
这里发生了奇怪的事情,这里是EndpointsModel
类
class AssetData(EndpointsModel):
type = msgprop.EnumProperty(AssetType, indexed=True)
def auth_id_set(self, value):
if ApplicationID.get_by_id(value) is None:
raise endpoints.UnauthorizedException('no auth_id')
self._auth_id = value
@EndpointsAliasProperty(required=True, setter=auth_id_set, property_type=messages.IntegerField)
def auth_id(self):
return self._auth_id
def app_id_set(self, value):
if ApplicationID.query(ApplicationID.app_id == value).get() is None:
raise endpoints.UnauthorizedException('wrong app_id')
self._app_id = value
if self.check_auth_app_id_pair(self.auth_id, value):
self._app_id = value
else:
raise endpoints.BadRequestException('auth_id and app_id mismatch')
@EndpointsAliasProperty(required=True, setter=app_id_set)
def app_id(self):
return self._app_id
@staticmethod
def check_auth_app_id_pair(authen_id, applic_id):
dat = ApplicationID.get_by_id(authen_id)
if dat.app_id != applic_id:
return False
else:
return True
这是API类
@endpoints.api(...)
class AssetDatabaseAPI(remote.Service):
@AssetData.query_method(query_fields=('limit', 'order', 'pageToken', 'type', 'auth_id', 'app_id'),
path='assets', http_method='GET', name='assets.getAssetMultiple')
def assets_get_multiple(self, query):
return query
当我部署它时,每当我尝试访问assets.getMultipleAssets
时,它只会给我这个错误
raised BadRequestError(Key path element must not be incomplete: [ApplicationID: ])
。奇怪的是,这只发生在使用@Model.query_method
的方法上,我有其他方法使用相同的系统,但使用@Model.method
,它只是运行正常。
如果我在开发服务器中尝试过它,有时它只给我RuntimeError: BadRequestError('missing key id/name',)
然后如果我只是重新保存.py文件并重试它,它会工作(有时不会,另一次重新保存也可以错误再次发生。)
谁能告诉我我的错误? 感谢
答案 0 :(得分:0)
我认为你的问题是你如何调用这个方法 - 它是一个静态方法,所以你必须通过类访问它,而不是实例(self):
if AssetData.check_auth_app_id_pair(self.auth_id, value):
self._app_id = value
else:
raise endpoints.BadRequestException('auth_id and app_id mismatch')