restful基于SpringMVC的实现(上)

来源:互联网 发布:淘宝英语毕业论文店铺 编辑:程序博客网 时间:2024/06/11 10:22

        闲话少叙,书开正文。

        既然是讲Restful基于springmvc的实现,那我们就先来扯扯Rest。

        Rest是什么?他是一美国大爷(或者是大哥),提出的一种软件架构风格。注意,它只是一种软件架构风格,目前还没有标准的规范,不过就像mvc架构一样,大家觉得这么弄好,就都这么来,久而久之,就会成为主流了。

        Rest,中文名是表述性状态转移。是适用于web服务的软件架构风格。稍后,我们来体会一下为什么这么说。

        Rest的核心思想是什么?----请求资源。在一般web软件架构中,我们的请求是基于操作(方法)的。当浏览器发送一个URL请求给服务器,请求的url会被解析成去调用某个方法,执行相应的操作,最后返回结果。但是Rest将我们的请求视为请求资源,它关注的不再是具体要执行的方法,它只关心,你最后想要什么资源。(事实上,我们大多数情况下,我们也只关心这个)

       那么问题来了,既然是请求资源,那我们总要唯一性的标识一个资源吧。有人立刻想到了ID。可是我们所谓的请求资源,并不是查询一个在数据表里存放的具体数据,而是一种结果,一个可能是服务器端进行了很多个我们不关心的操作之后才形成的结果。显然用ID标识是不行的。不过幸运的是,web服务中,有一个天然的唯一标识符---- url。一个url可以标识一个唯一的请求,对应返回唯一的一个资源。

       用一个唯一的url标识一个唯一的资源,我们通过这个url去请求资源,这就是Rest的style。

还有一个重要的原则,就是无状态通信。请不要被这个原则的名字欺骗。它不是说暴露的功能不能有状态,实际上基本不可能,它是说Rest要求状态要么在资源状态中,要么保存在客户端上。说白了,就是无状态连接嘛......还有一点就是,它不关心中间状态的改变。比如为了处理一个资源,我从这个服务器去另一个服务器下了一个文件,但是客户端并不知道,也不需要知道。

现在,通过上面的介绍,rest的名字和为什么适用于web服务,大家应该了然于心了吧。


        如果觉得上面我说的太抽象,看这个例子;

          老师:咱们班有11个学生,我这里有10个苹果。怎么能让每个同学分到一个苹果?

          小红:小明滚出去……

          这就是一般风格软件架构下的请求。老师要把10个苹果分给11个同学,这是请求。然后调用了小明滚出去的方法,再调用分苹果的方法。最后             10个学生,一人一个苹果,这是返回的结果。

          接下来,我用rest的风格,来表述一下:

          老师:教室里每个学生有一个苹果。  ----请求

         最后:教室10个学生(小明没了),每人一个苹果。 ---- 这是返回的资源 。

      看,我们并没有请求具体怎么分苹果(让小明滚出去……),只是请求了一个状态,最后返回了这个状态的资源。具体怎么分,是小明滚出去,还是小红出去,我们不关心。


       下面将Rest的实现,再具体化一点。

       Web服务,绝大部分的请求操作是CRUD。而HTTP的请求方式,主要也有get、post、put、delete等。看吧,一不小心,又对应上了,一切就像设计好了一样。那么我们就可以根据http的请求方式,区分你到底要进行什么操作。

•         HTTP GET       =>  得到

•         HTTP DELETE  =>   删除 

•         HTTP PUT       =>  更新

•         HTTP POST     =>  新增

用对emp表的操作举个例子

•         /emp/list                       +get               列出所有emp信息

•         /emp/{id}                      + get              列出id为{id}的emp信息

•         /emp/{id}/edit               +get               跳到emp编辑页面(因为是get请求,所以不是update操作)

•         /emp/{id}                      +put                保存修改的emp

•         /emp                             +post              新增emp

{id}是路径通配符其他的一目了然,不解释。

SpringMVC 具体怎么实现restful的,请看restful基于SpringMVC的实现(下)


忘了说Rest的好处了......其实很好想,如果你的系统按照统一固定的风格设计请求,易于后期系统的扩展,便于维护。而且用的是url标识,保证web系统对其的通用。

0 0
原创粉丝点击