REST是Apache基金会主席那哥们博士论文提出来的,全称比较深沉:Representational State Transfer,表面的意思就是表象状态转换,也就是描述的互联网的一些软件的通信方式
网络资源有很多表现形式,比如文本类,图片类等,比如wget下面这个网络资源:
http://www.lihuia.com/wp-content/uploads/2015/06/QQ2015062432x.png
你就会得到一个PNG格式的图片
网络资源就是描述这个具体PNG图片的实体的,这里有一个统一资源定位符URI来对应它:
/wp-content/uploads/2015/06/QQ2015062432x.png
至于定义的理解差异,可以通过wireshark里的filter条件理解uri,url,full_uri等含义
显然这里URI成为了访问这个资源的标识符,也就是指明了这个网络资源的具体位置,而表现形式是一个PNG
所以REST里的Representational指的就是资源的表现形式,就比如HTTP头部指定的Accept和Content-Type字段
在进行网络通信,交互的时候,假如客户端需要进行一些操作,可以让服务端发生一些改变,也就是State Transfer,当然客户端的手段必须是遵循服务器HTTP协议,比如上面wget了一个PNG图片,通过抓包,可以看到操作uri的方式为GET
7346 Hypertext Transfer Protocol 7347 GET /wp-content/uploads/2015/06/QQ2015062432x.png HTTP/1.1\r\n
它是HTTP协议里其中一个Method,用来获取资源的,除此之外还有HEAD,PUT,POST,TRACE等等,甚至还有DELETE,都对应了不同的操作
由于HTTP协议是个无状态协议,对于处理信息没有记忆的功能,对于你的请求,服务器处理完之后就会终端和你的连接,不会保持,更不会保存任何信息,至于cookie,session那就是另外一回事了
HTTP状态都保存在服务端,所以才通过上面这些Method,让服务器端产生状态转换,这里的资源state也就是服务器端资源在某时刻的状态,用户对这个资源的请求都会获得此刻这个资源的状态表现
一般都是通过curl来测试restful网络接口,当然github上排名第一的工具httpie也是可以的
MacBook:~ lihui$ http POST httpbin.org/post lihui=male HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 419 Content-Type: application/json Date: Sun, 12 Jul 2015 05:54:40 GMT Server: nginx { "args": {}, "data": "{\"lihui\": \"male\"}", "files": {}, "form": {}, "headers": { "Accept": "application/json", "Accept-Encoding": "gzip, deflate", "Content-Length": "17", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "HTTPie/0.9.2" }, "json": { "lihui": "male" }, "origin": "115.192.213.191", "url": "http://httpbin.org/post" }