REST

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"
}

发表评论