请求和响应的不同类

2024-03-29 06:48:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始使用Proto数据存储创建一个API。我想知道是否可以为我的请求和响应使用不同的类,前提是两者都是从EndpointsModel继承的。例如

class my_request(EndpointsModel):
    #attributes

class my_response(EndpointsModel):
    #different set of attributes

@endpoints.api(name='Blah', version='v1')
    class testAPI(remote.Service):

    @my_request.method(name='myAPImethod', path='blah',
                      http_method='POST')
    def myAPImethod(self, req):
        #do something
        resp = my_response()
        return resp

这看起来不太管用。有人能告诉我如何创建这样一个方法吗。我能想到的唯一另一种方法是还原到原始的protorpc方法,并指定请求和响应类型作为decorator的一部分。有没有一种方法可以使用proto数据存储来实现这一点? 提前谢谢你。在


Tags: 数据方法nameapiresponserequestmyresp
2条回答

您可以应用一种输入/输出字段filtering using ^{} and ^{} in your ^{}修饰符,但不能指定不同的输入和输出消息类。在

如果需要使用不同的对象,则必须使用标准端点和protoRPC类和装饰器。在

在你的例子中,你有一个非常简单的布局,它并不真的符合被问的问题,或者,IMHO,我认为你实际上想问的是什么。在

我自己正在开发一个更加复杂的端点API,但是它使用两个不同的模型为API调用设计请求和响应对象;但是,它们嵌套在另一个(或多个)中。我在App Engine日志中找到了一个提示,提示我应该使用该方法作为警告:

Method csapi.user.XXXXX specifies path parameters but you are not using a ResourceContainer. This will fail in future releases; please switch to using ResourceContainer as soon as possible.

请注意;ResourceContainers可能非常棘手,需要您将从protorpc导入的messages.Message分类。有关ResourceContainers的说明,请参阅thisStackOverflow答案。在

以您的示例为基础,我们需要构建资源容器,以复制我们希望返回给被调用方的模型中的内容。在

^{pr2}$

如您所见,这比您的简单示例要深入得多。在

加分:使用路径参数

如果您希望接受方法的路径参数,例如假设的用户的id属性(即path='users/{id}/delete'),我们将在方法本身前面添加以下块来使用它:

MY_REQUEST_RESOURCE_PAGE = endpoints.ResourceContainer(
    message_types.VoidMessage,
    id=messages.StringField(1, variant=messages.Variant.STRING),
    accountType=messages.EnumField(Account_Type, 2, required=True)
    isActive=messages.BooleanField(3, required=True),
    thisAcctEmail=messages.StringField(4, variant=messages.Variant.STRING),
    subscriberSince=messages.message_types.DateTimeField(5),
    cursor=messages.StringField(6, variant=messages.Variant.STRING, required=False, default="1"),
    limit=messages.IntegerField(7, variant=messages.Variant.INT32, required=False, default=10)
)

注意:注意附加属性cursor和{},它们允许对有数百个用户的情况下返回的结果进行分页;正是为了这个目的,这些属性经常在模型查询中使用。在

现在,要完成接受路径参数的更改,请替换上面示例中的以下行:

response_message=MyUserResponseMessage,

有了这个:

MY_REQUEST_RESOURCE_PAGE , MyUserResponseMessage,

最后,不管是否使用路径参数,此设置允许您在MyUserResponseMessage内嵌套一个或多个MySubscriptionResponseMessage项,以返回被调用方,就像MyUser模型可能包含多个MySubscription模型一样。这不需要向api方法添加任何内容,因为它已经是MyUserResponseMessage中的嵌套项。此外,如果不需要将模型中的项返回给被调用方,则不需要在响应消息中复制这些项。在

相关问题 更多 >