Java开发RESTful(一)概念入门

【原创文章,转载请注明原文章地址,谢谢!】

说明

新开一个专题,针对RESTful相关内容,从入门,到使用Java,主要是SpringMVC来完成RESTful开发。希望对刚接触RESTful的同学有所帮助

什么是RESTful

RESTful是代表REST化,或者说设计遵从REST架构。所以要了解RESTful就需要了解REST。而REST并不是一两句话能够简单说明清楚的,在本文中,尝试不要用那么高级的眼光去理解REST,而是放低身段,从实际的例子简单理解什么是REST。

简单理解REST

REST从字面上讲叫做Representational State Transfer,翻译成表现层状态转移,但是一般在翻译的时候,前面会加一个Resource,即Resource Representational State Transfer,即为资源表现层状态转移。

举一个简单的例子来阐述,比如一个优惠券功能,最基本需求:

  • 后台能够设置优惠券类型
  • 后台根据优惠券类型创建优惠券
  • 前台用户查看优惠券类型列表
  • 前台用户领取优惠券
  • 前台用户使用优惠券
  • 前台支持App和网页版本

不考虑具体的模型,单就请求路径来说,可能的路径如下:

至此,我们已经很清楚的看出来针对一个非常简单的需求,产生的问题:

  • 针对每一个优惠券的操作,我们都需要一个独立的URL去操作,为什么?原因在于,我们对优惠券的动作需要反映在URL中;
  • 如果有不同的响应方式,我们可能需要额外的参数,甚至不同的请求URL来描述;
  • 请求参数包含在请求地址中,无法针对性做缓存;
  • 会产生大量的URL,非常不方便接口的维护和文档的维护;

当然,这样做是完全可以的,目前也有大量的应用是使用这种方式来开发的。但是我相信,在了解和熟悉了REST之后,下一个项目,你一定不会使用这种方式开发了。
那马上进入REST。如果使用REST的概念来设计这样一个需求,又会是什么样的呢?(注意,下面我会直接列出一些REST的概念,重点看效果)。

首先在REST中,需要抽象出一个叫做资源的概念,简单理解,资源就是我们要操作的对象,使用URL表示。例如,针对优惠券我们就可以抽象出两个资源:优惠券类型和优惠券(优惠券是根据某个优惠券类型来生成的,比如京东的到店10元红包,这是一个优惠券类型,具体你在这个优惠券类型里面领到的那个红包,是这个优惠券类型生成的一个优惠券);
优惠券类型:http://classes.wolfcode.cn/couponSettings
优惠券:http://classes.wolfcode.cn/coupons

这两个资源对应的URL就固定下来,不会再变了,换句话说,我们所有的需求,都围绕这两个URL进行。
下面来看具体的操作:

小结

通过上面的解释,我们简单来总结一波,什么叫REST?原意指表现层状态转移,我们今天只需要扩展一下这个概念,用人话讲,就是:客户端通过HTTP,对服务器端的资源进行操作,实现”表现层(使用HTTP动词去促使服务器端资源的)状态发生转化”。

PATCH http://classes.wolfcode.cn/coupons/1即:

客户端(浏览器)通过HTTP动作(PATCH)对服务器端的资源(id为1的coupons)进行操作,让这个资源的状态发生转变(从未使用变为已使用)!


猜你喜欢

转载自blog.csdn.net/wolfcode_cn/article/details/80810214