1、REST
REST :Representational State Transfer(表现层状态转化)
如果一个架构符合REST原则,就称它为RESTful架构。
REST的名称“表现层状态转化”是指“资源(Resources)”的‘表现层’。

2、 资源(resources)
资源指的是网络上的一个实体或者一个具体信息,如一段文本、一张图片、一种服务等等。
我们可以用一个 URI(统一资源定位符)指向它,每种资源对应一个特定的URI,通过该URI,可以访问这个资源。URI是每一个资源的唯一地址或标识符。

3、 表现层(Representation)
表现层(Representation):把‘资源’具体呈现出来的形式。如txt格式、HTML格式、XML格式等。
URI只代表资源的实体,不代表它的形式。故网址最后的‘.html’后缀是不必要的,因为这个后缀名表示格式是属于‘表现层’的范畴,而URI应该只是代表‘资源’的位置。
表现层具体表现形式应该在HTTP请求的头(Header)信息中用Accept和Content-Type字段指定,这两个字段才是对‘表现’的描述。

4.、状态转化(State Transfer)
访问应该网站,就代表了客户端和服务器的一个互动过程。在这个过程中,一定会涉及到数据和状态的变化。
互联网通信协议HTTP协议,是一个无状态协议。因此所有的状态都保存在服务器端,故如果客户端想要操作服务器,必须通过某种手段,让服务器端发生‘状态转化’(State Transfer)。而这种转化是建立在表现层之上的,所以就是‘表现层状态转化’。

客户端只能用到HTTP协议中四个表示操作方式的动词:GET,POST,PUT,DELETE。

- GET:获取资源
- POST:新建或更新资源
- PUT:更新资源
- DELETE:删除资源

5、 总结
Restful架构:
(1)每个URI代表一种资源的唯一地址或标识符;
(2)客户端和服务器之间传递这种资源的某种表现层;
(3)客户端通过HTTP的四个动词对服务器端资源进行操作,实现‘表现层状态转化’;

6.、注意误区
(1) URI中不应该含有动词(如put,get等)。动词应该放在HTTP协议中。
举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。
如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:

POST /accounts/1/transfer/500/to/2

正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:

POST /transaction HTTP/1.1
Host: 127.0.0.1
from=1&to=2&amount=500.00

(2)URI中不要加入版本号

http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo
http://www.example.com/app/2.0/foo

因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分(参见Versioning REST Services ):

Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=2.0

转载自:http://www.ruanyifeng.com/blog/2011/09/restful.html