一定要理解的Restful风格学习经验

Restful风格是目前来说最流行的互联网软件架构,它并不是一种标准,而是一个开发架构的思想风格。那么究竟怎么样的风格算是Rest呢,查了一些资料有了一些了解,写了一个demo参考一下。

首先说一下Rest,它的全称是Representational State Transfer,翻译过来是表现层或者说是表象性的的状态转换。提到这个不得不说一下软件开发的三层架构

通常意义上的三层架构就是将业务应用划分成:表现层,业务逻辑层,数据访问层。
1). 表现层: 应用中唯一用户可见的层,即用户界面
2). 业务逻辑层: 对业务逻辑的处理,对数据层的操作
3).数据访问层: 对于数据库的操作,包括增、删、改、查。当然了,数据访问层不仅仅访问数据库还可以访问二进制文件,XML文档等。

那这里的表现层或者表象指的又是怎么样的一个表现呢?其实这个表现指的是资源的表现,最终展现出来的资源结果。
所谓的资源和我们平常理解的一样,比如朋友推荐给我们一部好看的电影,我们经常会问朋友,哎,有没有资源?这就是我们所说的,不管是电影,文本,还是音乐,都可以被称为资源。那我们要怎么去查找到这个资源呢?

这是我们就要引入一个概念,叫做URI。统一资源标识符(Uniform Resource Identifier),它是一个用于标识某一互联网资源名称的字符串,简单来说URI就是资源所在的位置,后端将资源发布为URI,前端通过URI访问资源,接下来并通过HTTP动词表示要对资源进行的操作,就是Rest中所说的状态转换。

综上所述,我们在后端进行增删改查,将处理的结果返回给前端,处理的结果就是我们说的资源。
Restful对数据格式没有限制,就算你用的是XML或者其他格式都可以,但是大部分会选择是返回json字符串。

用一小段代码解释一下
@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据
Value中的值就是我们说的URI
Get操作就是我们用的HTTP动词来让状态装换。

//@GetMapping相当于是 @RequestMapping(method = RequestMethod.GET)
 @GetMapping(value = "/json")
    public @ResponseBody List getUserInfo(){
        List heroes = heromapper.getAllHeros();
        return heroes;
    }

我们可以看到前端返回的是这样的json字符串的结果。

一定要理解的Restful风格学习经验_第1张图片
我们看到地址中的http://localhost:8877/templates/json
同理我们根据带参数的ID查询也是如此。
这里我们要注意带参数的Controller
如果@RequestMapping中表示为”getUserById/{id}”,id和形参名称一致,@PathVariable不用指定名称。如果不一致,例如”getUserById/{id}”则需要指定名称@PathVariable(“id”)。

 @RequestMapping(value = "/getUserById/{id}" ,method = RequestMethod.GET)
    public @ResponseBody Hero getUserInfo(@PathVariable() Integer id ){
        Hero hero = heromapper.selectByPrimaryKey(id);
        return hero;
    }

我们看一下它的地址
在这里插入图片描述

现在我们知道了rest是一种面向资源服务的API设计方式,可以唯一标识和定位资源。 对于该URL标识的资源做何种操作是由Http的动词决定的。 rest请求方法有4种,包括get,post,put,delete.分别对应获取资源,添加资源,更新资源及删除资源.

那为什么现在我们要用Restful这种风格去设计我们的API呢?

我们来说一下REST的优点和特征。
其一:我们以API为界限进行解耦首先就是为了分离前后端
RESTful API 就可以通过一套统一的接口为所有客户端提供web服务,实现前后端分离。

还有一点就是REST是无状态的,换句话说,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他请求中使用。
所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。

如查询英雄的攻击力,如果查询是需要登录系统,进入查询的页面,执行相关操作后,获取攻击力的多少,则这种情况是有状态的,因为查询英雄攻击力的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;

如果输入一个url即可得到指定英雄的攻击力,则这种情况是无状态的,因为获取英雄攻击力不依赖于其他资源或状态,且这种情况下,英雄攻击力是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。

其三:返回有用的错误信息(message)
恰当地理解和返回Http Status(状态码)。200=成功,404=资源不存在,500=服务器端错误等等

综合以上所说,大家应该对restful风格的流行有了感触吧,Restful好就好在它可以最大程度的隔离操作,不会使关联操作互相受影响,它的URL是一致的,不会混乱。
但是要真正学会Rest还有很长的路要走,大家一起加油吧

你可能感兴趣的:(初学经验)