Manyou API开发感受星期一, 九月 15. 2008做完了校内的API版本以后,本想做海内和开心网的,找半天没有一点关于API的消息,似乎从来没有公布过一样。但是里面的那些应用又不像全部是公司开发的,难道属于内测阶段? 于是转去研究UCenter的API-Manyou。初看起来,Manyou的API完成度更高,文档也更细,而且已经有了MYQL和MYJS,比校内的更加成熟。结果,真正开发起来,才发现简直是场恶梦。 注册新程序的流程跟校内一样,但是少一个映射URL的选项,也就是说你的程序没有短路径。 API的函数和参数的说明都不少,但是偏偏没有如何调用。(有,但是是PHP版的,而且是PHP开发包的调用方法,如果你想自己做Post请求,Sorry,即找不到服务器地址,也找不到接收到的参数的说明。) Python已经有了一个开发包,结果装上以后却说有一个函数未定义,启动不起来。 尝试了N多种方法,都没有办法成功的发送一个Post。 然后放弃了这种方法,只接收用户ID,不打算进行验证了。界面终于显示出来了。又发现其它页面的相对链接都不对了。又是一阵调试加猜测,总算找对了方法,把链接都改成相对于你的目录的链接,但是又不是相对链接,而是写绝对链接。 最后,看起来所有的页面都显示正确了,但是一个Form的Post又遇到了困难。我没办法让这个Form往正确的地址Post。换了多种方法,始终提示Bad Request。而且,Form里面被插入的隐藏变量居然跟Get的时候不一样,没有my_sig_uid字段…… 算了,放弃了。浪费我一天的时间。 校内API开发简易指南星期三, 九月 10. 2008是时候研究一下国内的开放式API了,所以抽时间搞了一下,先从校内下手吧,相对来讲他的资料算是最多的了。但是即使如此,想从零开始写一个应用出来,还真是花了我不少功夫。资料实在是太难找了。校内的API从6、7月份就出来了,还弄了个专门的Wiki作为开放平台的门户,但是里面的资料出奇的少,除了对几个api函数的说明,对xnml的简单说明,其它的几乎为0。所谓的一个上手指南只讲了怎么注册用户和怎么注册程序,注册完以后的开放过程却一点也没提。想根据这份东西写个真正的应用出来,简直是不可能的任务。没办法,上Google,上社区,上应用的论坛,一篇篇帖子里找线索,最后总算是把一个应用给凑出来了。 如此糟糕的技术支持能力,直接决定了校内API应用的未来。 开发过程简介: 首先需要注册成校内用户,然后在自己的菜单上有个应用,添加一个“开发者”应用,这里面包括一个社区,一些开发所需要的链接。进入这个应用以后,可以看到一个申请开发许可证的按钮,点击就进入设置应用属性的环节,起名字,定URL之类的。(这一步在校内的Wiki上是有说明的。)有个安装到校内的选项,默认是否,结果选了以后我的应用就变成了外部应用,在校内只提供一个链接进入而已,这当然不行了。当我把应用删了重新添加的时候,原来使用的那个URL被占用了,无耐,换了个更难看的URL。应用还有一个重要的属性,就是运行状态,是以iframe形式还是xnml形式,这个待会再讲。第一次建议先选iframe形式,这个是随时可以修改的。 这些东西都设置完,应用就生成了。你会得到一个api_key,一个secret key,不过这两个东西都没什么用。 校内应用的工作原理: 如果是xnml方式的应用,用户访问apps.xiaonei.com/xxxxx/yyyyy这样一个地址的时候,xxxxx代表你申请一个应用的时候自己定义的那个URL,校内的API服务器会在后台将用户对该页面的请求(包括所有参数)转发给你的应用,也就是你申请应用的时候填的那个自己的应用地址。如果你的应用在你的服务器上是www.aaa.com/xxxxx/这样一个目录,那么上面这个请求就会被转发到www.aaa.com/xxxxx/yyyyy这里,不管yyyyy是个html页面还是个目录形式。转发的同时,还会多几个参数过来,包括当前用户的id,当前用户的sessionid,还有你的api key。你后续的所有的页面的链接,都要写成以apps.xiaonei.com开头的地址,由它来转发请求。 如果是iframe的应用就简单多了,海内直接生成一个iframe,把你注册时填的那个起始地址放进去,同时包括前面说的几个相同的参数。剩下的事情他们就不管了。 因为每次请求都是校内的服务器发给你,所以你的服务器上写Cookie或者session之类的东西是没有用的,必须每次取得这几个参数来决定当前用户是哪一个。(校内在这里有一个极其严重的设计失误,那就是没有用到创建程序时生成的那个secret key。校内发过来的这三个参数只能帮你确定是哪一个userid发过来的请求,而这三个参数之间是没有什么关联性的,比如你无法根据sessionid来判断这个userid是否合法。而在iframe状态的应用里,这三个参数直接暴露在浏览器代码里,用户只要复制下来,把userid改成另外一个数字放到浏览器地址栏里就OK了。现在,如果你想确保访问用户的合法性,就必须要通过校内的API调用,到他的服务器上去,把这三个参数发过去,看它的返回结果,多一次网络调用所带来的时间损失,远远大于任何的数据库运算或者数字运算。实际上,校内只要加上第四个参数,也就是你的secret key和其中任何一个参数合并后的md5码,你在取值以后用同样的算法生成md5码,比较一下跟传过来的值是否相等就OK了,完全不需要为了验证用户合法性而增加一次网络调用。更可恶的是,每个页面你都要做一次这样的网络调用。当然,你也可以在验证合法以后用自己的服务器保存一下userid和sessionid的对应关系,下次请求如果仍然是这两个数值就不用再网络验证了,但是这又增加了无谓的数据库调用。) 你已经拿到了用户在校内上的用户ID,并且确认他已经成功登录校内,接下来就是处理你自己的业务逻辑。比如在你的数据库里新增加一个用户,并绑定到这个校内ID上,然后对该用户进行某些操作。最后就是返回页面内容。 这里就到了iframe和xnml模式的区别。如果是iframe模式,你返回的页面内容直接显示在iframe里,那自由度就大多了,跟普通的网页一样,想怎么做就怎么做。不过要小心iframe跨域的js问题。 如果是xnml模式,你返回的内容(还是普通的html,但是没有body标签了)是由校内的api服务器接收到的,他们对内容进行解析,然后显示在自己的层里,展现给用户。为了防止一些非法操作,xnml规定了哪些html语法是合法的,如果出现不合法的语法,会直接报错。(这里又缺少一个可用的debug方式,一旦在这个步骤出现页面错误,极难调试。)Wiki的文档里写了这里是不允许出现自己的css语法的,但是实际上现在又是可以用css的,至少style和class两个关键字都是允许的。除了普通的html语法,xnml还定义了一些他自己的语法,通过这些语法,你可以在页面上直接显示出用户的姓名头像链接好友等等信息,而无需在你的程序里通过API调用去获取。 如果你要使用form来post数据,把form的action定义成相对路径,相对于你的这个应用的实际路径,比如,如果你的原始action应该是www.aaa.com/xxxxx/save.jsp,那么只要写action='save.jsp'就可以了,在显示出来的时候,校内会将它替换成他们自己的相对路径,然后转发到正确的地址。 最后说说最有技术味道的东西,对校内API的调用。 现在校内一共只公开了为数不多的几个API,可以获取用户信息,好友信息,给用户发通知,现在还可以增加用户的新鲜事。对这些API的用户方式都是通过Post来实现的,Post的地址是固定的,就是这个地址:http://api.xiaonei.com/restserver.do,你需要对这个地址进行Post,发送几个参数过去,包括api_key,session_key,也就是校内传过来的那两个值,还有method,就是你要调用的方法名,然后不同的方法需要使用不同的参数,这些就可以去看校内的API文档了。这些参数Post过去以后,校内会返回一个xml,(虽然所有的调用都有个response格式的参数,可以选择xml还是json,但是,即使你选了json,它还是返回xml。)xml里要么包含错误码,要么,包含了你需要得到的信息,自己解析一下就行了。 所有的调用过程,包括你返回的参数和传递的参数,还有校内给你的参数,全部是utf8格式的,包括你生成的html。 这里只是一个开发过程的简单描述,不涉及代码,有兴趣的可以去看看校内自己的示例代码,是java的。有必要的话我也可以用代码的方式来写个demo,看大家的需要了。(论坛上面的hello world的demo对于实际开发的帮助几乎为0)。 Django 1.0正式发布了星期四, 九月 4. 2008一个不错的架构设计星期二, 九月 2. 2008Django马上就要发布1.0正式版了,等了好几年,现在才准备要出来。(看官方网站上应该就是这两天了)。在接近正式版的Beta2上,官方的介绍里重点强调了一个模块,comments,于是去读了一下它的文档,果然是个好东西啊。 简言之,comments是一个用于给任何对象添加用户回复功能的模块。你只要在配置文件里加上这个app,在html模板里加上一个load的调用,马上就可以给你原来的对象添加回复功能。所有的回复都存储在它自己的表里。取回复数,显示回复列表,显示回复文本框都有现成的方法可以调用,而发表回复的过程则是全自动处理的。 看完文档的第一感觉是这个模块设计的非常巧妙,你原来的所有的model,比如文章,用户,相片,或者理财易里面的账本,收支,预算等等,全部都可以很方便的增加用户评论的功能。(当然,对于喜欢挑刺的我来说,还有一个第一感觉,它的效率可能会差一点,因为在不修改原对象的情况下,它没有办法把每个对象的评论数放到原对象的表里,而只能在显示每条对象的时候去它自己的表里取一次数据。这样如果在显示某个List的时候想显示评论数,就会造成大量的数据库读取。) 但是,瑕不掩瑜,这个模块的设计理念是一流的,如果海内有这样的设计,就不会需要花那么久的时间才能给迷你博客加上评论功能了。(如果把它设计的不那么灵活,通过它来维护对象所在表中的回复数也是很容易的事。) IIS防盗链,防迅雷的唯一方案星期二, 八月 26. 2008最近一周多公司的网站反应速度特别慢,Ping一下速度都超过1000ms,会员也开始抱怨。向机房反映以后,机房说瓶颈在我们的防火墙设备那里,不在他们机房的线路。连到设备上一看,带宽占用稳定超过25M,这台设备的最大带宽也就是25M,看来的确是达到它的瓶颈了。 本来考虑换个更大的防火墙,但是后来想一想,以目前网站的PV和内容来看,也没有理由占用这么大带宽啊。 于是想办法分析日志,下载了几个比较大的日志文件,怎么分析呢?最后找到Nihuo Web Log Analyzer 3这个东西,虽然是试用,但是并没有功能限制(有时间限制),分析完之后清楚的列出访问量比较大的URL(可惜只能按点击数列出来,不能按文件实际占用的流量,当然啦,这是日志文件本身的限制)。排在前两位的都是压缩文件,下面还有很多wmv的视频文件。而且2000多个IP发起了20几万次访问,而且,这些访问都不在Google的访问记录里。很明显,这些都是多线程下载导致的。在文章页里想找到文件的下载地址需要登录,那几乎可以肯定,是迅雷的自动镜像功能了。 接下来就是想办法限制用户的下载,不让下载是不可能,于是搜索下载限速和限制每用户的线程的东西,找到了几个组件,包括2003Server_ChajianForIIS,EmIISLimitTS还有另外两个相似的东西,都是ISAPI的工作模式,但是都有一个共同的问题,就是狂占CPU,基本不会有空闲。而且也没有明显降低网站的流量。 直到今天下午再次研究这个问题,终于在一篇文章里看到一条线索,找到了Safe3IF,关键是,它没有限速功能,但是可以完全屏蔽迅雷。还有些其它的功能,比如防数据库注入之类的。作为ISAPI装上以后,网站的响应速度立马变快了,而且CPU使用率几乎没有变化。虽然可能会导致用户无法下载大文件,但是,作为目前最佳的也是唯一的解决方案,总算是解了燃眉之急。 无聊贴: vmware workstation 6.5 beta build 110068星期一, 八月 18. 2008这应该是vmware 6.5的第三个beta版了,想来应该是有相当高的可用性了。(虽然它的ESX版都刚刚爆出一个超级大Bug。)以前因为怕不稳定,也因为没有序列号,所以一直没下载。这次对它的窗口融合功能实在是太感兴趣了,所以,下载下来看看。好家伙,544M,比XP还大了。 安装的时候自动卸载6.0.3版,安装速度还是挺快的(相对它的体积来说),装完以后感觉跟原来的一样,view菜单下多了一个unity选项。安装过程中没有要序列号,打开关于一看,过期时间显示的是永不过期。真爽。难道是6.0版的用户可以免费升级? 启动原来的Windows 2003镜像,升级了vmware tools,unity模式就可以用了。点击启用之后,虚拟机的屏幕就像XP的注销状态一样,只剩下一个大按钮,鼠标指到host系统的开始菜单上的时候,旁边会出现另一个大按钮,代表guest里面的开始菜单,点击一下,出来的菜单包含了guest系统开始菜单的所有菜单项。点击安装在里面的Visual Studio 2008,直接在host系统里面启动,不过程序的外面有个框,而且这个程序最大化的时候只能达到虚拟机设置的屏幕大小,而不会自动适应host系统的屏幕。 重新设置guest系统的分辨率,在vmware的选项里面可以去掉显示边框,再把操作系统的主题设成跟外面一样,再启动程序,OK,很完美。比virtual box更好的一点,是vbox里面的窗口右侧会有一点阴影,感觉像是背景没切干净的样子,而vmware里面的窗口几乎完全看不出跟本地程序的区别。 启动虚拟的Linux系统试试(红旗6桌面版),升级vmware tools,比原来要编译的东西多了好几个,编译的都很顺利。然后启用unity模式,同样的位置出现了同样的开始菜单的按钮。点击出来的菜单是英文版的,菜单项跟guest系统的不完全一样。我的Eclipse本来是放在桌面上一个图标的,没办法,到开始菜单里去添加了一个菜单,结果外面这个菜单还是不变。不知道这个虚拟出来的菜单是从哪里取出来的。在虚拟机里面先启动Eclipse,再启用Unity模式,结果任务栏上的确是出现了Eclipse的图标,但是窗口找不到,后来发现在系统的左下角有一条很小很小的图标,结果无论如何也无法最大化。在外面的这个菜单里点击终端菜单,结果并没有打开终端,回到虚拟机里面一看,终端窗口在这里面。看来兼容性还有待提高。 至于6.5更为强劲的一个新功能:显卡的3D加速,没有测试。因为本人没有这个需求。 PS:vmware tools已经变成了完全的中文版,(从哪个版本开始的?)在虚拟机的设置项中有一个是否启用3D加速的选项,不知道启用不启用有什么区别。反正打勾以后虚拟机里面的显卡显存显示的是128M(似乎也是从host机的内存里取的,更占内存了)。 |
关于我![]() 搜索网站订阅到推荐文章友情链接系统管理 |


最新回复
21/11/2008 11:41
没什么大不了的 商业就是为了赚 钱 你可以不用百度 用百度总归要 付出点什么 忍受点什么
20/11/2008 17:02
同意楼上的!
20/11/2008 14:04
中国国情,我国特色,什么到中国 都会变味的
20/11/2008 13:45
有钱的企业排前面,很正确啊。有 钱的企业还不是在电视上出现的机 会高。医院什么 [...]
19/11/2008 17:46
反正我不喜欢百度的竞价方式!
19/11/2008 16:30
反垄断法只是限制微软用恶意手段 打击竞争对手,并不是限制微软必 须要20块钱卖自 [...]
19/11/2008 16:16
不是法律,那么反垄断法呢?
19/11/2008 15:30
写的好~~~ 世界在变 inte rnet 需要新的生活、思考方式