Restful
参考:http://www.cnblogs.com/artech/p/restful-web-api-02.html
- restful是什么
定义:2000年,Roy Thomas Fielding博士在他博士论文中提出了几种软件应用的架构风格,将REST定位为“分布式超媒体应用(Distributed Hypermedia System)”的架构风格;
资源在浏览器中以超媒体的形式呈现,通过点击超媒体中的链接可以获取其它相关的资源或者对当前资源进行相应的处理,获取的资源或者针对资源处理的响应同样以超媒体的形式再次呈现在浏览器上;
借助于超媒体这种特殊的资源呈现方式,应用状态的转换体现为浏览器中呈现资源的转换。如果将超媒体进一步抽象成一般意义上的资源呈现(Representation )方式,那么应用状态变成了可被呈现的状态(REpresentational State)。应用状态之间的转换就成了可被呈现的状态装换(REpresentational State Transfer),这就是REST。
说白了,RESTful是一种思想,而不是一种直接技术
我这边只列了2点比较有代表的:
- 采用URI标识资源
URI不仅仅指明了被标识资源所在的位置,而且通过这个URI可以直接获取目标资源(如:http://www.artech.com/employees/c001(编号C001的员工)
- 使用标准的HTTP方法
public class ResourceService{
public IEnumerable<Resource>[] Get();
public void Post(Resource resource);
public void Put(Resource resource);
public void Patch (Resource resource);
public void Delete(string id);
public void Head(string id);
public void Options();
}
首先GET、HEAD和OPTIONS这三个HTTP方法旨在发送请求以或者所需的信息。对于GET,相应所有人对它已经非常熟悉了,它用于获取所需的资源,服务器一般讲对应的资源置于响应的主体部分返回给客户端。HEAD和OPTIONS相对少见。从资源操作的语义来讲,一个针对某个目标资源发送的HEAD请求一般不是为了获取目标资源本身的内容,而是得到描述目标资源的元数据信息。服务器一般讲对应资源的元数据置于响应的报头集合返回给客户端,这样的响应一般不具有主体部分。OPTIONS请求旨在发送一种“探测”请求以确定针对某个目标地址的请求必须具有怎样的约束(比如应该采用怎样的HTTP方法以及自定义的请求报头),然后根据其约束发送真正的请求。比如针对“跨域资源”的预检(Preflight)请求采用的HTTP方法就是OPTIONS。
至于其它4中HTTP方法(POST、PUT、PATCH和DELETE),它们旨在针对目标资源作添加、修改和删除操作。对于DELETE,它的语义很明确,就是删除一个已经存在的资源。
- restful的优点
1. 轻量,直接基于http,不再需要任何别的诸如消息协议。get/post/put/delete为CRUD操作
2. 面向资源,一目了然,具有自解释性。
3. 数据描述简单,一般以xml,json做数据交换。
4. 无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
5. 简单、低耦合
- restful和传统模式的区别
传统模式:
api/getfile.do - 获取文件信息,下载文件
api/uploadfile.do - 上传创建文件
api/deletefile.do - 删除文件
RESTful:
api/file 只需要这一个接口
GET 方式请求 api/file - 获取文件信息,下载文件
POST 方式请求 api/file - 上传创建文件
DELETE 方式请求 api/file - 删除某个文件
总之 restfull api 就是一个风格,http 接口 按照rest 风格设计 就是 restfull http,webservice 接口 按照rest 风格设计 就是 restfull webserivce.