首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

运用Spring MVC构建REST风格WEB应用

2012-10-30 
使用Spring MVC构建REST风格WEB应用????? 对于运行在网络上的MIS系统而言,处理数据的是整个系统的主要任务

使用Spring MVC构建REST风格WEB应用

????? 对于运行在网络上的MIS系统而言,处理数据的是整个系统的主要任务,翻开程序我们可以看到,80%以上的代码都在处理数据的CRUD操作。采用一种什么样的框架结构,能够使得处理数据的操作变得简单且易理解,这是大部分开发者尤其是架构设计者一直以来思考的一个问题。

?

????? REST(Representational State Transfer)是一种编程风格,特别是针对网络应用的设计和开发,采用REST可以显著降低开发的复杂性,提高系统的可伸缩性。

?

????? REST是一种独特的编程风格,与MVC强调的角色分层概念不同,REST强调使用统一的规则来规范对资源的操作,两者互为补充,相符相成,使用MVC架构搭配REST编程风格构建基于网络的MIS系统将在不远的为未成为主流。本文着重介绍REST编程风格的核心规则,并且结合Spring MVC描述REST在实际应用中的代码形态。

?

????? 使用REST风格开发WEB应用程序强调以下几点规则:

?

    网络上的所有事物都被抽象为资源(resource);每个资源对应一个唯一的资源标识(resource identifier);通过通用的连接器接口(generic connector interface)对资源进行操作;对资源的各种操作不会改变资源标识;所有的操作都是无状态的(stateless)。

????? 首先,在笔者看来,REST定义中的资源即应用程序所处理的数据。以订单管理系统为例,订单信息就是数据,同样客户信息和产品信息也是数据,在REST看来这些数据都是资源。

?

????? REST强调资源必须有具有唯一名称和ID,名称用来区分不同资源,ID用来定位同类资源中唯一的一条数据。在REST中,这些规则都是通过URI来描述的。还是以上面的订单系统为例,我们将订单信息名称设定为order,客户信息为customer,货物信息为product,那么就存在几下的几种URI设计:

?

/** * 按ID值获取订单信息 *  * @param id * @return */@ResponseBody@RequestMapping(value = "/order/${id}", method = RequestMethod.GET)public OrderEntity getOrder(@PathVariable int id) {return orderManager.get(id);}/** * 按类型查询货物信息 *  * @param id * @return */@ResponseBody@RequestMapping(value = "/product", method = RequestMethod.GET)public List<ProductEntity> getProductByType(String type) {return productManager.queryByType(type);}/** * 创建订单信息 *  * @param id * @return */@RequestMapping(value = "/order", method = RequestMethod.POST)public void createOrder(OrderEntity entity) {orderManager.create(entity);}/** * 修改订单信息 *  * @param id * @return */@RequestMapping(value = "/order/${id}", method = RequestMethod.PUT)public OrderEntity updateOrder(@PathVariable int id, OrderEntity entity) {return orderManager.update(entity);}/** * 删除指定ID值的订单信息 *  * @param id * @return */@RequestMapping(value = "/order/${id}", method = RequestMethod.DELETE)public void deleteOrder(@PathVariable int id) {orderManager.delete(id);}

?

????? 通过上面的例子可以看出,使用Spring MVC编写REST风格的应用程序是多么的简单。

?

????? 需要我们注意的是,REST要求资源的标识是不变的,也就是说对于特定的资源,无论对这个资源作了什么样的操作,资源的ID不可以改变。之所以加入这样的限制是为了保证URI的一致性。试想如果某个操作在处理过程中改变了资源的标识,那么为了保证规则的完整性,我们必须付出额外的代价去在其它的处理中同步这些变化,这在REST中是不可接受的。

?

????? 另一方面,REST要求针对资源的所有操作必须是无状态的,URI是确定资源的唯一途径。如果我们在处理数据的过程中融入了状态数据,那么针对同一资源的URI就会出现二义性,这将与REST的定义背道而驰。

?

????? 更多精彩原创文章请关注笔者的原创博客:http://www.coolfancy.com

?

热点排行