在可行的情况下,以 REST 的方式创建 Web 应用程序 —— 包括基于 Ajax 的应用程序 —— 将避免大量 bug。然而,具象状态传输(Representational State Transfer,REST)的一个缺陷就是使用类似的 XMLHttpRequests 发送复制数据。本技巧将展示如何通过适度使用会话 cookie 将服务器端状态维持至最低水平,从而显著减少客户机-服务器通信量,同时仍然允许不使用 cookie 的操作。
HTTP 是一种无状态协议,这个简单事实既是它的优点也是它的缺点。它意味着发往 HTTP 服务器资源的每个请求都是等幂 的,这就是说相同的请求在每次调用时应返回相同的结果。等幂是 REST 的基本思想:无论何时发起,相同的请求 — 可能是客户机信息的编码 — 应该返回相同的数据。
理论上讲,Ajax
应用程序通常比 REST
具有更加丰富的状态。Web 应用程序中的某个字段或区域将反映某些服务器数据的当前状态,同时客户机通过 JavaScript 轮询定期查询当前状态(可以使用多种方法使它更加倾向于推的方式,但是对本技巧来说并无必要)。然而,Web 应用程序多少都期望服务器能够跟踪在下次轮询事件需要了解的内容:客户机得到了哪些数据、没有得到哪些数据、已经进行了哪些交互,等等。
对 Ajax 应用程序使用 REST 技术的一个常见方法是为所有针对最新数据的查询安排一个全局惟一的 URI。例如,某个查询可能包含一个 UUID,使用 URL 编码的参数或隐藏的表单变量;比方说,一个 XMLHttpRequest 对象可能会对如下资源执行 GET 操作:
http://myserver.example.com?uuid=4b879324-8ec0-4120-bba6-890eb0aa3fc0 |
在下一次轮询事件中,即使只过了一秒的时间,也会打开一个不同的 URI。
本文转自:IBM developerWorks 中国