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

时间:2013-04-13 06:41:53

标签: python python-2.7 google-cloud-endpoints protorpc

具有带有整数字段的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" }

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

这是预期的行为吗?谁能责备? (如果重要:我在欧盟数据中心运行此代码)

1 个答案:

答案 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