1

具有带有整数字段的 Cloud Endpoints (ProtoRPC) 消息类,例如

TestMsg(messages.Message):
  int_field = messages.IntegerField(1)

和一个方法:

@endpoints.method(VoidMessage, TestMsg)
def test_int_field():
  return TestMsg(int_field=1234567890123)

在本地开发服务器 JSON 响应正确导致:

{ int_field: 1234567890123 }

而在生产中,由于某种原因,数字被转换为字符串:

{ int_field: "1234567890123" }

不过,对于较小的数字,整数似乎不会转换为字符串。

这是预期的行为吗?任何人都可以复制吗?(以防万一:我在欧盟数据中心运行此代码)

4

1 回答 1

3

我猜@proppy 是对的。此外,它在发现格式中明确指出

一个 32 位有符号整数(“整数”类型,int32 格式)。它的最小值为-2,147,483,648,最大值为2,147,483,647(含)

一个 32 位无符号整数(“整数”类型,uint32 格式)。它的最小值为 0,最大值为 4,294,967,295(含)。

所有其他类型的 int/bigint/whatever 值都被表示为具有不同格式的“字符串”类型。更多信息:https ://developers.google.com/discovery/v1/type-format

因此,1234567890123 数字实际上不能以“整数”类型表示。只是开发服务器不会自动将整数转换为字符串(就像生产基础设施那样),而且我没有意识到在本地测试时这个数字有多大。

事实证明,谷歌的一个团队已经在努力使其保持一致:https ://code.google.com/p/googleappengine/issues/detail?id=9173

于 2013-04-14T14:52:57.090 回答