一 什么是REST
REST(Representational State Transfer)是一种含状态传输的软件架构风格.我们并不陌生.平时经常使用的GET和POST就是REST.
常见的REST有
- 安全 - 指的是对原有资源没有任何影响.
- 等幂 - 不管操作多少次,对资源的影响相同.
简单说,REST对资源的操作都可以通过URI来完成.
二 基于HTTP的REST简介
基于HTTP的REST包括三个部分
1 资源的URI
2 资源的传输格式
3 对资源的操作(GET POST PUT DELETE Options Head)
HTTP的交互的过程是客户端发出一个请求,然后服务器返回一个请求。
其中
- VERB是HTTP方法,入GET POST
- URI是资源的位置
- HTTP Version 是HTTP版本
- Request Header,请求头,包含了metaData(例如接受的数据格式,授权,证书等信息)
- Request Body,实际传递的消息
例如一个GET方法,在浏览器中输入URL然后回车,就是GET方法
GET www.baidu.com
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Connection:keep-alive
Content-Type:text/plain; charset=utf-8
Cookie:BDUSS=1hCVG9GN29OSkkwdld-MEh3enJBLUVnZGxKRTB5NTBCQW5BamRobTB4SGtzTWxVQVFBQUFBJCQAAAAAAAAAAAEAAADZ4YEvx6PE47XEX1pVT8rWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQjolTkI6JUT; BAIDUID=8BD0E853CDCBAD524D6691E5AE0C61BB:FG=1; BAIDUPSID=8BD0E853CDCBAD524D6691E5AE0C61BB; locale=zh; MCITY=-289%3A; B64_BOT=1; BD_HOME=1; BD_UPN=123253; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_645EC=a1bfJPwk9lOpMwLUJPTu1EGEjyg7U%2B0iMwXeWzgjyMiK62RLlrkuWmGwFvFTes98m0qN; BD_CK_SAM=1; BDSVRTM=84; H_PS_PSSID=12760_12528_1443_12772_12691_12717_12721_12728_12735_12739_12743_12763_12781_8498_11422
Host:www.baidu.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36
除了GET www.baidu.com之外全是headers
发出请求后,服务器返回响应,响应的格式如下
- Response Code 表示请求的状态。例如404Not found code 200表示成功
- Response Header表示返回信息的头信息
- Response Body 包含实际数据
例如对www.baidu.com执行GET方法
Response Code
Status Code:200 OK 表示请求成功
Response Header
BDPAGETYPE:2
BDQID:0xf0ed07ea0034f3f2
BDUSERID:797041113
Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html
Date:Mon, 09 Mar 2015 01:53:10 GMT
Expires:Mon, 09 Mar 2015 01:53:10 GMT
Server:BWS/1.1
Set-Cookie:BDSVRTM=326; path=/
Set-Cookie:BD_HOME=1; path=/
Set-Cookie:H_PS_PSSID=12760_12528_1443_12772_12691_12717_12721_12728_12735_12739_12743_12763_12781_8498_11422; path=/; domain=.baidu.com
Transfer-Encoding:chunked
Via:1.1 hkidc-dmz-wsa-4-mgmt.cisco.com:80 (Cisco-WSA/8.5.0-497)
这里主要介绍一下cookie
2.1 cookie
Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从: [系统盘]:\Documents and Settings[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
2.2 cookie
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
2.3 token
token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库