endpoints-proto-datastore:返回不同的类然后输入类

时间:2015-01-29 13:09:03

标签: python google-app-engine google-cloud-endpoints endpoints-proto-datastore

我希望有一个端点获取某种类型的对象并返回不同类型的对象,而不是让它们具有相同的类型。

例如:

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

有没有办法让输入类与返回类不同?

1 个答案:

答案 0 :(得分:3)

您可以在方法装饰器中提供response_message参数,但该参数必须是ProtoRPC消息类而不是EndpointsModel。

您可以通过ProtoModel classmethod从EndpointsModel获取消息类。

您必须从您的方法返回ProtoRPC消息而不是EndpointsModel,因为库不会自动为自定义响应类进行对话。您可以使用模型的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()