【问题标题】:Endpoint returns values in a different order on deployed server端点在部署的服务器上以不同的顺序返回值
【发布时间】:2017-03-03 21:20:12
【问题描述】:

我有一个端点,它返回一个基本上是 10 行字符串的值,在我的数据库中由此类表示:

class BoardForm(messages.Message):
    """Used to show a board state"""
    row_0 = messages.StringField(1)
    row_1 = messages.StringField(2)
    row_2 = messages.StringField(3)
    row_3 = messages.StringField(4)
    row_4 = messages.StringField(5)
    row_5 = messages.StringField(6)
    row_6 = messages.StringField(7)
    row_7 = messages.StringField(8)
    row_8 = messages.StringField(9)
    row_9 = messages.StringField(10)

在我的开发服务器上,当我使用这个端点时,它会按照上面看到的顺序整齐地返回所有 10 行。但是,在实时服务器上部署了应用程序并测试了端点(没有更改代码),我的行顺序是不同的。实时端点还返回 "kind""etag" 的数据,它们不在开发服务器上,我之所以提到这是因为这是我能看到的唯一其他区别。

我能够创建一个解决方法,通过使用不同的类来显示正确的顺序:

class StringMessages(messages.Message):
    """Outbound (multiple) string message"""
    items = messages.StringField(1, repeated=True)

我只是将每一行放入这个类,创建一个列表,然后返回该值(显然也更改了端点的response_message)。

但是,我真的很想知道为什么部署的服务器上的顺序会突然改变。它似乎不是随机的,因为重复尝试使用端点每次都返回相同的顺序(类似于 4、5、0、1、2、3、6、7、8、9 左右)。我可以忍受我的工作,但如果有更好的方法可以解决这个问题,我宁愿不使用它。如果我能对 GAE 有更好的了解,那也很好。

【问题讨论】:

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


    【解决方案1】:

    看不到你是如何显示输出的。变量没有“顺序”。返回一个有顺序的列表怎么样:

    class BoardForm(messages.Message):
        """Used to show a board state"""
        row_list = [messages.StringField(i) for i in range(1,11)]
    

    【讨论】:

    • 这基本上就是我对StringMessages 类所做的。为了显示输出,我只是使用 API Explorer 来运行端点并查看其返回数据。所以,如果我理解正确的话,除非我使用内置顺序的东西,比如列表,否则没有办法获得有序的输出,而我在开发服务器和实时服务器上看到的订单只是巧合?
    • 要获得订单,您必须以正确的顺序单独调用变量。列表更有意义,因为您可以按顺序循环。而不是row_3,你会有row_list[3]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2020-11-23
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多