现在的位置: 首页 > 综合 > 正文

如何保持交互的可见性

2013年01月22日 ⁄ 综合 ⁄ 共 1629字 ⁄ 字号 评论关闭

如何保持交互的可见性

作为应用协议,HTTP的设计目标是在客户端和服务器之间保持对库、服务器、代理、缓存和其他工具的可见性。可见性是 HTTP的一个核心特征。按 Roy Fielding的定义(详见附录 A),可见性是“一个组件能够对其他两个组件之间的交互进行监视或仲裁的能力。”当协议是可见的时,缓存、代理、防火墙等组件就可以监视甚至参与其中。

问题描述

您想知道可见性的含义,以及如何保持 HTTP请求和响应的可见性。

解决方案

一旦您识别并设计资源,就可以使用 GET方法获取资源的表述,使用 PUT方法更新资源,使用 DELETE方法删除资源,以及使用 POST方法执行各种不安全和非幂等的操作。可以添加适当的 HTTP标头来描述请求和响应。

问题讨论

以下特性完全取决于保持请求和响应的可见性:

缓存

缓存响应内容,并在资源修改时使缓存自动失效。

乐观并发控制

检测并发写入,并在操作过期的表述时防止资源发生变更。

内容协商

在给定资源的多个可用表述中,选择合适的表述。

安全性和幂等性

确保客户端可以重复或重试特定的 HTTP请求。

当一个 Web服务无法保持可见性时,以上这些功能将无法正常工作。例如,当服务器对 HTTP的使用方式阻碍乐观并发时,您可能要被迫自己实现应用特定的并发控制机制。

HTTP通过以下途径来实现可见性:

� HTTP的交互是无状态的,任何 HTTP中介都可以推断出给定请求和响应的意义,而无须关联过去或将来的请求和响应。

� HTTP使用一个统一接口,包括有 OPTIONS,GET,HEAD,POST,DELETE和 TRACE方法。接口中的每一个方法操作一个且仅有一个资源。每个方法的语法和含义不会因应用程序或资源的不同而发生改变。这就是为什么 HTTP以统一接口而闻名于世了。

� HTTP使用一种与 MIME类似的信封格式进行表述编码。这种格式明确区分标头和内容。标头是可见的,除了创建、处理消息的部分,软件的其他部分都可以不用关心消息的内容。

考虑一个更新资源的 HTTP请求:

# 请求

PUT /movie/gone_with_the_wind HTTP/1.1 ❶

Host: www.example.org ❷

Content-Type:application/x-www-form-urlencoded

summary=...&rating=5&... ❸

# 响应

HTTP/1.1 200 OK ❹

Content-Type: text/html;charset=UTF-8 ❺

Content-Length: ...

<html> ❻

...

</html>

❶ 请求行包含HTTP 方法、资源路径和HTTP 版本

❷ 请求的表述形式标头

❸ 请求的表述内容

❹ 响应状态行包含HTTP 版本、状态码和状态消息

❺ 响应的表述形式标头

❻ 响应的表述内容

这个例子的请求是一个HTTP消息。消息的第一行描述了客户端所使用的协议和方

法,接下来的两行是请求头。简单查看这三行信息,任何理解 HTTP的软件都可以明白请求的意图以及如何解析消息体。响应也是同样的,响应的第一行表示 HTTP版本、状态码和状态消息,接下来的两行告诉 HTTP软件如何解释消息。

对于 RESTfulWeb服务,您的主要目标必定是尽最大可能保持可见性。保持可见性非常简单,使用 HTTP方法时,其语义要与 HTTP所规定的语义保持一致,并添加适当的标头来描述请求和响应。

保持可见性的另一方面是使用适当的状态码和状态消息,以便代理、缓存和客户端可以决定请求的结果。状态码是一个整数,状态消息是文本。

正如我们将在 1.2节讨论的内容一样,在某些情况下,您可能需要权衡其他特性,如网络效率、客户端的便利性以及分离关注点,为此放弃可见性。当您进行这种权衡时,应仔细分析对缓存、幂等性、安全性等特性的影响。

 

本文节选自《RESTful Web Services Cookbook中文版 》一书

图书详细信息:http://blog.csdn.net/broadview2006/article/details/6826999

 

抱歉!评论已关闭.