浅谈基于SpringMVC的REST功能
宋涛+徐庆增+吕思思
摘要:数据为王。作为开发人员,我们经常关注于构建优秀的软件来解决业务问题。数据只是我们软件完成工作时要处理的原材料。但是如果你问一下业务人员,数据和软件哪个更重要的话,他们很可能会选择数据。数据是许多业务的命脉。软件通常是可以替换的,但是多年积累的数据是永远不能替换的。近几年来,以信息为中心的表述性状态转移(Representational State Transfer,REST)已成为替换传统SOAP web服务的流行方案,为了帮助spring开发人员使用REST架构模式,spring3.0封装了对REST的良好支持。好消息是Spring对REST的支持是构建在SpringMVC之上的,我们将基于了解的SpringMVC知识来开发处理RESTful资源的控制器。
关键词:Spring MVC;REST; 表述性状态转移
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)12-0086-02
1了解REST
我敢打赌这并不是你第一次涉及或读到REST。近年来,关于REST已经有了许多讨论,在软件开发中你可能会发现有一种很流行的做法。那就是在推动REST替换SOAP web服务的时候,会谈论到SOAP的不足。
诚然,对于许多应用程序而言,使用SOAP可能会有点大材小用了,而REST提供了一个更简单的可选方案。问题在于并不是每个人都清楚地了解REST到底是什么。结果就出现了许多误解。在谈论Spring如何支持REST之前,我们需要对REST是什么达成共识。
2 REST的基本原理
当谈论REET时,有一种常见的错误就是将其视为“基于URL的Web服务”——将REST作为另一种类型的远程过程调用(Remote Procedure Call,RPC)机制,就像SOAP一样,只不过是通过简单的HTTP URL而不是SOAP的大量XML命名空间来触发。
恰好相反,REST与RPC几乎没有任何关系,RPC是面向服务的,并关注与行为和动作。而REST是面向资源的,强调描述应用程序的食物和名词。
此外,尽管URL在RSET中起了关键作用,但他们仅仅是整体的一部分而已。
为了了解REST是什么,我们将它的首字母缩写拆分为不同的组成部分。
1) 表述性(Representational)——REST资源实际上可以用各种形式来进行表述,包括XML,JSON(JavaScript Objict Notation)甚至HTML——最适合资源使用者的任意形式。
2) 状态-(State)—— 当使用了REST的时候,我们更关注资源的状态而不是对资源采取的行为。
3) 转移(Transfer)——REST涉及转移资源数据,它以某一种表述性形式从一个应用转移到了一个应用。
更简洁的讲,REST就是将资源的状态已最合适的形式从服务器端转移到客户端(或者反之)。
基于对REST的这种观点,我尽量避免使用诸如REST服务,REST Web服务或类似的术语,这些术语会不恰当地强调行为。相反,我更愿意强调REST面向资源的本质,并谈论RESTful资源。
3 Spring是如何支持REST的
Spring很早就有导出REST资源的需求。Spring3对Spring MVC的一些增强功能为REST的提供了良好的支持。现在,Spring支持以下方式来开发REST资源。
1) 控制器可以处理所有的HTTP方法,包含4个主要的REST方法:GET,PUT,DELETE,以及POST.
2) 新的@pathVariable注解使得控制器能够处理参数化的URL(将变量输入作为URL的一部分)
3) Spring的表单绑定JSP标签库的