一 Roy Fieldingweb
2000年Rest被Roy Fielding提出来的,我对Roy Fielding的印象有如下几个.app
一是RoyFielding作为Http协议的起草者,在Http协议发布没多久跳起来讲这个世界上不少人对于Http的使用是错误的,因此他说你们应该用Rest.less
二是没多久RoyFielding作为Rest思想的启蒙者,在Rest被人接受并被普遍使用没多久跳起来讲这个世界上不少人对Rest的使用是错误的..this
因此我在PPT上选了柏拉图的一句话作为副标题,"思想永远是宇宙的统治者".url
二 Restspa
Rest自己的内容比我想象的多的多,大体列出来几个关键点以下:设计
1.知足如下的Constraints:code
2.设计接口时候的原则component
3.Rest但愿实现的目标orm
以上内容都摘自Wiki,稍微整理了一下.感受以上的内容都很深入,因此我简单的列出来了我认为理解Rest的重要的地方.
4.Rest对于咱们来讲
简单说,再设计接口的时候,
第一个想到的是,我要提供的资源是什么.
第二个想到的是,这个资源的展示形式是什么.
第三个想到的是,这个资源上封装的操做是什么
我以为这些就足够了.Rest和Soap比有太多的好处了,还有利于SEO(感谢搜索组的两位大神说到两点,一个是Url Path自己占的权重比Parameters高,一个是Url连接自己的权重就比较高.)
若是是设计一个键盘精灵的接口的话(以前博客中提到过键盘精灵,这里的主要的功能是查找拼音中以"Q"开头的产品列表),仿照前段时间四处流行的对比手法写出来三种不一样风格的Url接口设计
这时候已经有不少人在争论Rest有没有用处,还有很多人在讨论Rest的适用场景了,还有人问到比较实际的问题,好比说多参数怎么解决.
我以为Rest自己提供的是一种方式,怎么样让这种方式变得更艺术还真的取决于你怎么去使用他.设计Rest的接口更是一种艺术形式,最简单的例子,我要看一我的的某个时间段发表的文章列表,可能会有如下几种设计方式:
1. /person/xdyl/20000101-20000202
2. /person/xdyl/start/20000101/end/20000202
3./person/xdyl?start=20000101&end/20000202
4./person/xdyl/20000101/20000202/
哪一种方式好就看我的喜爱了吧.搜了一下SpringMVC也没看到有这种解决方案,以前还觉得会有/{a}-{b}/这样的方式.
若是其余的朋友有好的解决方案还请多指点.
三 Spring MVC实现.
我以为Spring MVC的实现很简单.大概牵涉到两个地方.
1.Spring 自己怎么支持从Path中获取变量的.
2.系统怎么区分一个请求应该被Spring拦截到仍是应该被直接访问的静态资源
第一个问题很简单.贴段代码以下:
增删改查分别修改"method "以对应Http的四种方法(Post,Delete,Put,Get)就行了.
变量直接经过@PathVariable 就能够拿到.
第二个问题我理解起来也很简单.用UrlRewriter将全部的请求分红两种.动态请求加一个前缀"/app/",配置Spring的拦截器只拦截这种请求. 静态资源之前缀"/r/"开始,请求路径不变.
这样任何一个请求都会乖乖的分红两部分,是以"/r/"开始的就不会走Spring,不是以"/r/"开头全转成"/app/",交给Spring处理.
主要配置以下
UrlRewrite能够用其它有一样功能的任意代替,Apache神马的最讨厌了.
最后附上我用到的UrlRewriter的Pom文件.不记得在哪儿看到的了,先贴上来再说.
Over,这个东西不是一个很详细的Spring配置说明.我记得第一次配的时候仍是出了很多问题的.不过我以为源码若是公开的话就什么问题都么有了~
等等看何时能够把Labs的源码公开了.