Python IntegerField值被转换为某些数字的字符串

Python IntegerField值被转换为某些数字的字符串,python,python-2.7,google-cloud-endpoints,protorpc,Python,Python 2.7,Google Cloud Endpoints,Protorpc,具有带有整数字段的云端点(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: 12345

具有带有整数字段的云端点(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" }
对于较小的数字,整数似乎不会转换为字符串


这是预期的行为吗?有人能责备我吗?(以防万一:我正在欧盟数据中心运行此代码)

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

32位有符号整数(“整数”类型,int32格式)。它的最小值为-2147483648,并且 最大值为2147483647(含)

32位无符号整数(“整数”类型,uint32格式)。它的最小值为0,最大值为0 值4294967295(含)

所有其他类型的int/bigint/where值都以不同格式表示为“string”类型。更多信息:

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


事实证明,谷歌的一个团队已经在努力使其保持一致性:

IIRC端点在数量大于MAX_INT时会这样做。因此,啊,这肯定会将其排除(MAX_INT)。虽然我尝试了Variant.UINT64和其他变体,但结果相同。关于Javascript转换bigint的另一个问题是另一个故事,我没有用数字来回答:)谢谢@proppy@alex看来你的评论是真的:)@bossylobster:)是的,我写了那篇评论,但我脑子里的想法无法摆脱。所以几天后我开始做实验。。。你知道我最后做了什么,呵呵。顺便说一句,如果没有你的帮助,我想我不会走这么远,再次感谢你!对已添加对
protorpc
的一些更改(),以确保此行为的一致性。