我们的Web服务中有一个perl XMLRPC服务器,我们这里的其他团队使用XMLRPC通过python脚本进行查询。
这就是事情 - 我们返回的参数之一是一个ID,一个员工,并且由于我们学院的员工ID的设置,ID的格式如下:
000126721
(基本上每个员工的每个ID都是相同的长度,从0或更多0开始强制执行此操作)。
在perl服务器端,我们强制将其作为字符串 - 并且perl以这样的格式将hashref返回到xmlrpc,以确保雇员id被强制为字符串:< / p>
{employee_id => "$employee_id"}
所以在perl中,如果我们使用perl客户端查询perl服务器,则返回上面的示例:
{employee_id => "000126721"}
但显然其他团队告诉我们python xmlrpc在抓取ids 时会截断0并将员工ID转换为整数,这样就可以获得上述字段:
{employee_id : 126721}
???为什么地球上的xmlrpc会强制将显式指定为字符串的东西变成整数?
如果我坚持在id中使用逗号,python xmlrpc不会这样做 - 但是如果返回的任何字符串纯粹由数字组成,则python xmlrpc客户端似乎将其转换为整数(因此前面的零是必须保留它们时丢失)而perl似乎没有做这个客户端或服务器端。
我们可以做些什么来解决这个问题?我们使用JSON,YAML对不同的休息Web服务进行了测试,其他任何一个似乎都没有这个问题,只有XMLRPC。不幸的是,在我们的下一个版本发布之前,我们必须找到一种方法来修复XMLRPC 所以... :(
编辑:这是我忘记提及的另一个问题 - 员工ID 不是唯一执行此操作的字段。还有其他字段执行相同的操作,但也强制执行不同的数字。理想情况下,而不是在python中修改xmlrpc之后的数据(这真的不难做但是有可能搞砸数据,而数据实际上是不能也不应该触及的敏感数据),我们真的需要找到一种强制xmlrpc不转换的方法。