您的位置:首页 > 其它

对taobao.item.update和taobao.item.add中image参数的思考

2008-11-11 09:36 387 查看
目前提供的API中,taobao.item.update和taobao.item.add无疑是最为特殊的两个,因为它们多了一个类型为byte[]的image参数,由此引起的后续问题比较多,如其他api可以采用“application/x-www-form-urlencoded”的方式进行POST,而这两个API在拥有image参数时(注意,是拥有image参数时)必须采用“multipart/form-data”的方式进行POST,经过测试,在不含image参数时,“application/x-www-form-urlencoded”的方式仍然是可行的。
目前TAOBAO提倡的是利用B/S模式调用这些API,但在C/S,或者说winForm下,仍然可以很方便地调用到API实现相同的功能。通过对两种模式的DEMO开发,发现image参数更加适合于winForm模式下,而在B/S模式下,这个参数有鸡肋的嫌疑。理由如下:

首先看看在C/S模式下,由于程序运行在本机,所以能够很好地访问到本地资源,在使用image参数的时候,一个httpRequest对象很容易地获取到本地图象数据通过multipart/form-data方式提交给taobao的API服务器。
然而在B/S模式下,无论ASP/ASP.NET/PHP/JSP,都有一个共同特点,它们运行在服务器端,无法直接访问到用户的机器,它们往image参数里填充数据时,只能读取到服务器本身的图象数据而无法直接得到用户机器上的,在这种情况下,必须有个中转方法,首先用表单将图象数据从用户机器上POST到我们的服务器,然后再从我们的服务器POST到TAOBAO的服务器,这中间硬生生地给多出一个中转过程来,(经过C/S下的测试,即直接从本地POST到TAOBAO服务器)TAOBAO本身的图象服务器在上传的时候就经常出现很多问题,如果加上网络延迟等各方面原因,这个出错几率更加大了。
同时,由于多了这个行同鸡肋的byte[]参数,在封装API的时候引起很大的麻烦,你得把所有参数都封装进去吧,除了image本身其他都可以用“application/x-www-form-urlencoded”方式的,但多了image之后,我们得去单独去为这个API构造一个httpSend()的方法,很多时候还得自己去构造这个multipart/form-data的数据包。
从现阶段的研究看来,最好的方式是利用Javascript编写客户端执行脚本,利用xmlHttp来进行这个API调用,这样就减去了图象数据从我们服务器中转的问题,但这样一来,系统的安全性又会打一定折扣。

实际使用的时候,很多情况下不需要修改image数据,可否考虑将add/update方法拆分开来,提供一个不含image的方法,而image单独提供一个方法叫taobao.item.image.update,这样这个函数本身参数减少很多,即使单独为它做一个multipart/form-data的发送方法也要简单得多,参数少了,在其他模式下调用起来也方便,就算万不得已要用JS下的xmlhttp来调用,编写起来也要方便得多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐