具有带有整数字段的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" }
对于较小的数字,整数似乎不会转换为字符串。
这是预期的行为吗?谁能责备? (如果重要:我在欧盟数据中心运行此代码)
答案 0 :(得分:3)
我猜@proppy是对的。此外,它在发现格式中明确指出
32位有符号整数(“整数”类型,int32格式)。它的最小值为-2,147,483,648和 最大值2,147,483,647(含)
和
32位无符号整数(“整数”类型,uint32格式)。它的最小值为0,最大值为0 价值4,294,967,295(含)。
所有其他类型的int / bigint /任何值都被重复为具有不同格式的“字符串”类型。更多信息:https://developers.google.com/discovery/v1/type-format
所以,1234567890123号实际上不能用“整数”类型表示。这只是开发服务器不会自动将整数转换为字符串(就像生产基础设施那样),而且我没有意识到在本地测试时数字有多大。
事实证明,Google的团队已经在努力使其保持一致:https://code.google.com/p/googleappengine/issues/detail?id=9173