前言

Spring+SpringMVC+MyBatis+easyUI整合进阶篇(一)设计一套好的RESTful API
Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
Spring+SpringMVC+MyBatis+easyUI整合进阶篇(四)RESTful API实战笔记(前端代码修改)

前文中提到了RESTful设计,后端实战及前端代码的修改,写完之后本来想写一下对RESTful的一些看法的,但是写着写着跑题了,最终是写成了不同阶段对于RESTful的认识和感受,包括第一次听到这个概念,第一次使用这个规范.....一幕幕回想起来也是很有意思的经历。

初识RESTful

第一次知道这个概念应该是在2014年的时候吧,那时候的我入行不久,接触JavaWeb开发也只是在入门的水平,做过几个小的官网项目,开发模式也是跟着公司的开发来,用比较传统的MVC开发模式,技术选型就是Jsp+Servlet,因此对REST这种思想或者说对于异步调用接口的方式可以说是一窍不通。

看着REST风格的接口URL,当时唯一的想法就是,不就是把".do"去掉吗?有什么难的?等等,如果把".do"去掉还怎么拦截Servlet的请求?

这就是初识RESTful的情形,第一次接触RESTful的时候,我的关注点在URL和Servlet拦截配置上,以那时的技术水平和开发经验来说,似乎也只能意识到这么多,对于RESTful的理解也仅仅在URL的格式不同罢了,至于其他的理解和想法?不存在的。

第一次在项目开发中结合REST实践

渐渐地,随着项目经验的增多,以及自学了一些Java中流行的开发框架,慢慢的就不再选择使用Jsp+Servlet来开发新项目了,在项目积累中也学到了关于异步调用的知识,学会了使用ajax异步调用接口渲染页面,这个时候还是没有想过接口的RESTful化。

第一次试着将RESTful运用到项目开发中是在挺久之后了,一位新同事在看了以往的代码后,提出想要改动代码,相对来说他更加有开发经验,因此就跟着他开始做代码修改的工作,那时候嘴巴里也整体RESTful来,RESTful去的,其实嘛,也不是很懂,这是真心话,只是听着老师傅说这么做是去优化代码的,作为菜鸟的我一听到项目优化,肯定是乐意去做的。

这是当时的指导文档,只截了一部分:

项目完成后,改动其实挺多的,配置文件,代码风格...不过这些都是代码层面的,暴露出的比较明显的变化就是接口URL的改变,接口中的".do"、".action"没了,调用时也增加了调用方法,与之前相比,逼格好像提高了一些!这是当时印象最深刻的感觉了。

但是依然有很多比较搞笑的地方,因为是第一次使用,很多概念其实也不是特别了解,http动词啊,状态码啊,包括REST其实是四个单词首字母的组合我都不知道,反正第一次使用完全就是个愣头青,依着葫芦画瓢,但是也并没有画的很像。

存在的问题很多:

  • uri不规范,url命名比较随便
  • 不理解http动词,post和get方法乱用
  • 没有错误处理
  • 也没有跨域处理
    .....

回忆起这次经历,总结起来就是画虎不成,不懂装懂,完全是图个新鲜。不过没有这次啼笑皆非的经历我也不会去学习这方面的知识,也算是迈出了第一步吧,虽然样子比较难看。

RESTful+前后端分离是一个良好的开发实践

真正大规模使用和深入学习是在一次项目的重构工作中,由于当时的开发人员配置还算可以,就计划将项目拆解为前后端分离的模式,对于开发人员的分工和代码结构都打算做一次大的改变。一开始依然是懵懵懂懂,随着学习和使用的深入,也不断的对之加深了解,对其中的一些知识点和规范也有了自己的看法,比如接口命名,http动词的使用,接口的版本控制,权限验证....

由于对RESTful的真正了解是在一次项目的前后端分离实践中,因此对REST的认识都多多少少的带有一些前后端分离的想法,并不是说REST一定要和前后端分离这个概念产生必然的联系,REST用在普通MVC项目中可以吗?是可以的,前后端分离的项目中调用的接口不符合REST规范可以吗?也是可以的。其实,REST+前后端分离是一个相对来说不错的一个开发实践,对前后端的开发人员都比较友好,当然,这都是个人想法,在实际工作中也是受到了较大的影响,后来的大部分项目开发也基本上都是遵循这种方式,除非有特殊情况。

不仅仅只有RESTful

在网站或者应用的开发中,数据传输方式不仅仅只有RESTful一种规范,比如传统的MVC模式的开发模式中,就是将数据放入model中来实现数据的传输,当然,这种方式不是基于接口的方式,基于接口的调用还有webservice方式,我没有接触过webservice开发就不多讲了,至于其他的还有基于RPC框架的调用方式。

在服务化的讨论中目前最风光的应该就是SpringCloud和微服务了吧,由于在SpringCloud技术栈中,各个微服务间调用的方式就是http+json方式,可以很简单的设计为RESTful架构,因此RESTful概念也随之又变得火热和流行起来。

说到这里呢,又引出了一个比较,就是在项目服务化过程中,是选择使用阿里开源的Dubbo还是Netflix开源的SpringCloud技术栈呢?

为什么提出这个问题呢,因为这两个技术栈恰好是分别使用了基于http+二进制序列化的RESTful规范(SpringCloud)和基于tcp+二进制序列化的RPC调用方式(Dubbo),Dubbo是国内较为流行的服务化框架,资历也较老,而SpringCloud则是目前炽手可热的后起之秀,关于这二者的比较怕是可以写出不知多少篇文章了,在这里提到二者之间的比较也是想说明技术选型其实不用拘泥于一种。

REST只是众多方式中的一种罢了,方法和技术选型真的很多,因此不要标榜其中任何一种方式,也不要鼓吹其中任何一种技术,没必要,选择适合你的就好,如果实在不知怎么选,干脆都用一下就好了。

结语

首发于我的个人博客,新的项目演示地址:perfect-ssm,登录账号:admin,密码:123456

如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友,本篇主要讲述了个人对于RESTful的理解。

如果你想继续了解该项目可以查看整个系列文章Spring+SpringMVC+MyBatis+easyUI整合系列文章,也可以到我的GitHub仓库或者开源中国代码仓库中查看源码及项目文档。

记录一下从懵懂到理解RESTful的过程的更多相关文章

  1. CMDB资产管理系统开发【day27】:理解RESTful架构

    理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(hig ...

  2. 理解RESTful 架构

    REST是所有Web应用都应该遵守的架构设计指导原则. Representational State Transfer,翻译是”表现层状态转化”. 面向资源是REST最明显的特征,对于同一个资源的一组 ...

  3. 理解restful 架构 && RESTful API设计指南

    restful是前端和后端接口中都会使用的设计思想. 网站即软件,我们也常说的webapp,这种互联网软件采用的是“客户端/服务器”模式,建立在分布式体系上. 网站开发,也可以完全采用软件开发的模式, ...

  4. 我是如何根据豆瓣api来理解Restful API设计的

    1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...

  5. 理解RESTful架构——Restful API设计指南

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  6. 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  7. [转]理解RESTful架构

    原文地址:http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...

  8. 理解RESTful架构(转载)

    本文转载自:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软 ...

  9. [转载] 理解RESTful架构

    原文: http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构   作者: 阮一峰 日期: 2011年9月12日 越来越多的人开 ...

随机推荐

  1. WPF DEV实现手风琴效果

    说明 最近用WPF+DevExpress做项目时,需要做一个类似手风琴的效果,效果的界面如下.因为没有现成的控件,需要自定义模板,所以写了一个Demo和大家分享,项目中可以根据实际情况使用.如果你用不 ...

  2. 开源的API集成测试工具 v0.1.2 - 增强体验

    Hitchhiker 是一款开源的 Restful Api 集成测试工具,你可以在轻松部署到本地,和你的team成员一起管理Api. 详细介绍请看: http://www.cnblogs.com/br ...

  3. 初遇.net

    初遇.net 为了自己的理想我选择了.net课程进行自我提升,想想以后能成为一位程序猿不由得有点兴奋呢,还有另一件高兴的事是我认识了十几位来自不同区县的老师同学,都说人脉就是财富,是不是我的财富有多了 ...

  4. 到处是坑的微信公众号支付开发(java)

    之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...

  5. [js高手之路]Vue2.0基于vue-cli+webpack Vuex用法详解

    在这之前,我已经分享过组件与组件的通信机制以及父子组件之间的通信机制,而我们的vuex就是为了解决组件通信问题的 vuex是什么东东呢? 组件通信的本质其实就是在组件之间传递数据或组件的状态(这里将数 ...

  6. Oracle数据库中直方图对执行计划的影响

    在Oracle数据库中,CBO会默认目标列的数据在其最小值low_value和最大值high_value之间均匀分布,并按照均匀分布原则,来计算目标列 施加查询条件后的可选择率以及结果集的cardin ...

  7. 201521123110 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. private不对用户公开进行修改,public用户可以进行修改.代码可以进行继承,即子类继 ...

  8. 201521123073《Java程序设计》第3周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...

  9. 2017Java课程设计201521123007

    1. 课程设计博客链接 项目地址 2. 个人负责模块或任务说明 ps:一个人做的项目 一个登录jsp文件,登录成功转入商品界面, 一个商品jsp文件,显示所有商品信息,数据从MySql数据库导入,可以 ...

  10. 201521123064 《Java程序设计》第10周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. ① 定义Thread类的子类,覆盖Thread类的run()方法,然后创建该子类的实例(一般不用该方法,开销 ...