读书人

JAX-RS入门 9: 内容约定(1)

发布时间: 2012-07-29 15:26:13 作者: rapoo

JAX-RS入门 九: 内容约定(1)

通常一个SOA的应用都需要足够的灵活,以便于各种不同的客户端或平台进行集成与交互。 RESTful 服务在这方面相当有优势,因为大部分的程序语言都能够与HTTP协议间相互通信。

?

不过这还不够,为了高效的运行,不同的用户可能有不同的需求。例如Java用户端更多的希望他们的数据是xml格式的;Ajax用户端则更喜欢JSON格式;Ruby用户需要想要YAML格式。另外,有时他们还希望这些数据是经过的国际化的,这样他们可以提供翻译好的信息给不同的,例如英语、中文、日文、西班牙文或法文用户。最后,随着RESTful应用的不断发展,老用户也需要一个简单的方法来与新版本的服务进行交互。

?

HTTP协议有很多手段可以帮助解决这些集成问题。一个最强大的功能就是用户可以告诉服务器他们希望的返回格式,客户端和服务器可以约定好消息体的内容格式,例如:它是怎么编码的;它需要返回哪种语言格式等。这种协议被称为HTTP Content Negotiation(HTTP内容约定),简称conneg。 这节主要介绍conneg是怎么工作的,JAX-RS怎么支持它以及在你的应用中协调这些特性有多重要。

?

一、Conneg

?

* Media Type

??

当请求服务端信息时,用户可以指定他们希望的返回的Media Type,这是通过客户端设置的Accept 请求头来实现的,其中Accept的主体部分以逗号分隔。例如:

GET http://example.com/stuffAccept-Encoding: gzip;q=1.0, compress;0.5; deflate;q=0.1

??

对于服务器端的响应,则使用: Content-Encoding 。来告诉客户端返回内容的压缩算法。

?

读书人网 >互联网

热点推荐