(Representational State Transfer)
REST即表述性状态传递是2000年提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式。是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。REST是设计风格而不是标准。
REST中的资源所指的不是数据,而是数据和表现形式的组合,比如“最新访问的10位会员”和“最活跃的10位会员”在数据上可能有重叠或者完全相同,而由于他们的表现形式不同,所以被归为不同的资源。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: xxx
{...}
格式固定,第一行永远是操作失败或者成功的状态码,第二行是返回的类型,第三行内容的长度,最后是内容。这样我只需写一个程序解析返回的信息就可以了,可以重用,但是我们上面传统的不仅仅要协商,还有有不同的解析程序,稍微改变,就不能正常使用了。所以rest的明显更加通用。
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
DELETE(DELETE):从服务器删除资源。
系统是RESTful的五条约束
● 使用客户/服务器模型。客户和服务器之间通过一个统一的接口来互相通讯。
● 层次化的系统。在一个REST系统中,客户端并不会固定地与一个服务器打交道。
● 无状态。在一个REST系统中,服务端并不会保存有关客户的任何状态。也就是说,客户端自身负责用户状态的维持,并在每次发送请求时都需要提供足够的信息。所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,这是典型的RESTful风格。
● 可缓存。REST系统需要能够恰当地缓存请求,以尽量减少服务端和客户端之间的信息传输,以提高性能。
● 统一的接口。一个REST系统需要使用一个统一的接口来完成子系统之间以及服务与用户之间的交互。这使得REST系统中的各个子系统可以独自完成演化。(即POST,GET,DELETE,PUT)
其他风格规范
1)URI使用名词而不是动词
2)使用复数定义所有资源,名词使用复数
3)使用Header序列化格式 Content-Type 定期请求格式,Accept定义接收格式
4)API版本化:使用简单的序号,避免使用点符号,如2.5