前段时间做了一个简单的应用,后台用django搭了一个简单的web程序,前端用delphi做的一个客户端,数据通信就是普通的 http(POST,GET)协议。只所以这样设计,是因为编程比较简单,如果强调安全性,数据通信可以使用https.这个也比较容易做。


设计web的 API时候,风格参考了REST.诸如http://website/odds/add/这样的url突然想到ROR和django的一个区别,ror本 身就集成了web service,而django没有,如果想要网站提供web services调用接口,可以通过引入soap.py这样的包。soap复杂而繁琐,google的search的api都不再采用,不知道当初那帮人 怎么想的。大量事实证明,简单的协议才能在工程实践中成功.


比如说BitTorrent,协议非常的简单,甚至更早的kazaa(skype使用了它的p2p网络),peer 2 peers之间就简单的基于http 协议


扯远了,我的原意是想说django可以以REST的形式提供web service接口,这个很简单,就是规格化的URL.这点上ROR就失去了集成web service的优势。
继续谈刚才的那个系统。最初的设计,client–server之间的通信,服务器返回的数据,包成xml的格式,这样容易表达数据的结构。


* 以前写过的delphi程序解析xml,都直接import MSXML这个activex控件,(delphi本身就自动import XmlDocument2),但是实际上在这个系统里面,xml只是简单的提供了数据标记的功能,格式并不很复杂,不需要schema的效验
* 在网上找了 一会,找到一个简单的xml解析包,就是JEDI里面JvSimpleXml.pas。这个包只支持dom的方式解析xml,不支持SAX,不支持shema,相当于TinyXml的delphi版。
* 不过使用过程中,和tinyxml 还是有点细微差别,就是对charset的处理,simplexml不会自动处理charset,它只解析出charset这个属性的值,而 tinyxml解析了charset之后,还会额外对xml在内存中的编码进行处理,比如说编码是UTF-8,它会自动把这个xml的字符串的编码转换成 utf,这个差别和delphi在处理字符编码比较弱智有关系。


理想和现实总是有差距的,最后实际上没有采用xml封装数据,我发现如何定义xml的每个tag,太费脑筋。所以就直接用“|”做分隔符,把数据 拼成一字符串,在服务器端一句话 return “|”.join(data_set) 就搞定,客户端只需要简单parse一下。

本文地址: http://lutaf.com/18.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接