endpoints-proto-datastore:return 与输入 class 不同 class
endpoints-proto-datastore: return different class then the input class
我想要一个获取特定类型对象的端点和 return 不同类型的对象,而不是让它们具有相同的类型。
例如:
class SomeClass(EndpointsModel):
name = ndb.StringProperty()
class OtherClass(EndpointsModel):
otherName = ndb.StringProperty()
@SomeClass.method(path='mymodel', http_method='POST', name='mymodel.insert')
def MyModelInsert(self, my_model):
my_model.put()
otherModel = OtherClass(otherName='someothername')
return otherModel
目前我得到:
ServerError (Method MyApi.MyModelInsert expected response type <class '.SomeClass'>, sent <class '.OtherClass'>)
有没有办法让输入 Class 不同于 return Class ?
您可以在方法装饰器中提供一个 response_message
参数,但该参数必须是 ProtoRPC 消息 class 而不是 EndpointsModel。
您可以通过 ProtoModel
class 方法从 EndpointsModel 获取消息 class。
并且您必须 return 来自您的方法的 ProtoRPC 消息而不是 EndpointsModel,因为该库不会自动为自定义响应 class 进行对话。您可以使用模型的 ToMessage
方法执行此操作。
总而言之,您将拥有以下代码(未经测试):
@SomeClass.method(path='mymodel',
http_method='POST',
name='mymodel.insert'
response_message=OtherClass.ProtoModel())
def MyModelInsert(self, my_model):
my_model.put()
otherModel = OtherClass(otherName='someothername')
return otherModel.ToMessage()
我想要一个获取特定类型对象的端点和 return 不同类型的对象,而不是让它们具有相同的类型。
例如:
class SomeClass(EndpointsModel):
name = ndb.StringProperty()
class OtherClass(EndpointsModel):
otherName = ndb.StringProperty()
@SomeClass.method(path='mymodel', http_method='POST', name='mymodel.insert')
def MyModelInsert(self, my_model):
my_model.put()
otherModel = OtherClass(otherName='someothername')
return otherModel
目前我得到:
ServerError (Method MyApi.MyModelInsert expected response type <class '.SomeClass'>, sent <class '.OtherClass'>)
有没有办法让输入 Class 不同于 return Class ?
您可以在方法装饰器中提供一个 response_message
参数,但该参数必须是 ProtoRPC 消息 class 而不是 EndpointsModel。
您可以通过 ProtoModel
class 方法从 EndpointsModel 获取消息 class。
并且您必须 return 来自您的方法的 ProtoRPC 消息而不是 EndpointsModel,因为该库不会自动为自定义响应 class 进行对话。您可以使用模型的 ToMessage
方法执行此操作。
总而言之,您将拥有以下代码(未经测试):
@SomeClass.method(path='mymodel',
http_method='POST',
name='mymodel.insert'
response_message=OtherClass.ProtoModel())
def MyModelInsert(self, my_model):
my_model.put()
otherModel = OtherClass(otherName='someothername')
return otherModel.ToMessage()