Java Web学习(八)RESTful设计
一、RESTful设计风格
- REST :指的是一组架构约束条件和原则。
- RESTful :满足这些约束条件和原则的应用程序或设计就是 。
REST 原则
- 客户端和服务器之间的交互在请求之间是无状态的。
- 从客户端到服务器的每个请求都必须包含理解请求所必需的信息。
- 如果服务器在请求之间的任何时间点重启,客户端不会得到通知。
- 无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。
- 客户端可以缓存数据以改进性能。
RESTful 特点
- 每一个URI代表1种资源(唯一地址)
- 通过操作资源的表现形式来操作资源
- 资源的表现形式是XML或者HTML
- 统一资源接口,即不同资源均使用相同接口访问,且具有操作幂等性(GET、HEAD、PUT和DELETE操作,多次操作结果均一致)
- 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
- 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源
无状态和有状态
区别:两个来自相同发起者的请求在服务器端是否具备上下文关系。
有状态请求:服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。
- 常见应用:MSN、网络游戏等服务器。服务端维护每个连接的状态信息,服务端在接收到每个连接的发送的请求时,可以从本地存储的信息来重现上下文关系。
无状态请求:服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。
- 常见应用:WEB服务器。每次HTTP请求和以前都没有啥关系,只是获取目标URI。
PS:登录的时候带上一个cookie,或身份验证标识,这种常见场景是无状态化向状态化的一个过渡,在无状态化的过程中,加入状态化的信息,维护上下文关系。
二、RESTful架构
定义:RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POST,DELETE,PUT和GET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。
结构:将服务器分成前端服务器和后端服务器两部分,前端服务器为用户提供无模型的视图;后端服务器为前端服务器提供接口。
调用方式:浏览器向前端服务器请求视图,通过视图中包含的AJAX函数发起接口请求获取模型。
优:
- 项目开发引入RESTful架构,利于团队并行开发。
- 在RESTful架构中,将多数HTTP请求转移到前端服务器上,降低服务器的负荷,使视图获取后端模型失败也能呈现。
劣:
- RESTful架构并不适用于所有的项目,当项目比较小时无需使用RESTful架构,项目变得更加复杂。
三、URI、URL、URN
- URI : 统一资源标识符,用来标识抽象或物理资源的字符串,通过这种方式的命名的资源可以被互联网定义和访问。
- URL : 统一资源定位符,一种定位资源的指定信息位置的字符串,可以在全球范围内唯一确定一个资源。一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。
- URN : 统一资源名称,是带有名字的因特网资源,现概念已被URI取代。
URI
结构:
- ①访问机制
- ②存放资源的主机名
- ③资源自身的名称
例子:
- https://www.cnblogs.com/riches/p/12069323.html
解析:
- ①这个资源可以通过https协议访问
- ②资源位于主机www.cnblogs.com上
- ③通过/riches/p/12069323.html可以对该资源进行唯一标识(PS:这个不一定是完整的路径)
URL
结构:
- ①协议
- ②存放该资源的主机IP地址(有时也包括端口号)。
- ③主机资源的具体地址,如目录和文件名等。
例子:
- http://127.0.0.1:18083/login/pageInit
解析:
- ①这个资源可以通过http协议访问
- ②资源位于主机127.0.0.1:18083上
- ③通过/login/pageInit可以访问资源
URN
结构:
无固定结构
例子:
urn:issn:1535-3613 (国际标准期刊编号)
tel:+139-000-12345
解析:
URN只命名资源但不指定如何定位资源。比如:只告诉你一个人的姓名,不告诉你这个人在哪。
三者的区别与联系
- URI是一个相对来说更广泛的概念。
- URI可被视为定位符(URL),名称(URN)或两者兼备。
- URL和URI都定义了资源是什么,但URL还定义了该如何访问资源。
- URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。
- URN定义某事物的身份,而URL提供查找该事物的方法。
- URN如同一个人的名称,而URL代表一个人的住址。
参考文章: