REST风格的Web Service的特点:
1. Client-Server:采用基于pull的交互风格,将客户端与服务器端分开,将用户界面与数据存储分开。
2. 无状态:每一个从客户端向服务器端发出的请求都必须包含所有必要的信息,以使服务器能理解客户的请求,而无须利用服务器端预存的环境信息
3. 缓存:为了改进网络效率,来自服务器端的响应必须能够被标记为是否可以缓存
4. 统一界面:所有的资源都是经由通用的界面访问,例如HTTP GET, POST, PUT, DELETE)。
5. 命名资源:系统由一系列以URL命名的资源组成。
6. 资源互联:从而客户可以通过URL的链接从一个状态转移到另一个状态。
7. 分层组件:在客户与资源之间可以加入proxy server、 cache server、 gateways等等中间件,从而满足性能、安全性等非功能需求。
在设计REST风格的Web Service时,需要遵循以下原则:
1. 创建REST风格Web Service的关键是识别出所有可能暴露为服务的概念实体,例如元件的清单、元件的详细信息。
2. 为每个资源定义一个URL。资源应该是名词,而非动词,例如不要使用如下风格的URL:
http://www.parts-depot.com/parts/getPart?id=00345
而是使用:
http://www.parts-depot.com/parts/00345
3. 根据资源的CRUD特性以及是否需要展示给客户,将各种资源进行分类。对于前者,使用HTTP POST, PUT,或 DELETE访问资源,对于后者则通过HTTP GET访问。
4. 所有经由HTTP GET访问的资源都应是没有负面影响的,即,对这些资源的调用不会导致资源的更新。
5. 每一个资源都不应孤立地展示出来,而需要包含能够获取相关资源的链接。
6. 提供指向更详细信息的链接,循序渐进地展示数据,不要试图在一个响应文档中表现所有东西。
7. 使用schema定义响应数据的格式,例如DTD, W3C Schema, RelaxNG, 或者Schematron。对于需要POST或PUT的服务,也同样提供一个统一的响应格式。
8. 利用WSDL文档或者一个简单的HTML页面说明如何访问这些服务。