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()