关闭

RESTful Rails, 第一部分

461人阅读 评论(0) 收藏 举报
分类:

自从restful_rails插件被内置到rails以后, RESTful Rails就成了Rails核心里引起很多争议的一个部分。不过随着Rails2.0的改进,RESTful Rails成为了Rails里不可动摇的一部分。因此,了解Restful Rails是什么,它是如何工作的,什么时候用它,什么时候不用它,这些问题都变得重要起来。这个话题很大,我认为应该先给你们讲讲一些背景知识,所以我把这个帖子分成了两个部分--第一部分面向理论,第二部分面向实用。所以,带好安全帽,我带你去看看web语言的内部原理了!

REST vs. CRUD

web的世界里总是充满了缩略语。REST是REpresentational State Transfer 的缩写,描写了可供我们操作的资源(在这里就是URL)。CRUD是Create, Read, Update, Delete的缩写,表示我们能够做的操作。虽然在Rails里REST和CRUD是形影不离,但是他们也能够独立的工作。实际上,如果你写过一个可以从数据库里进行添加、编辑、删除条目的后台系统,和一个可以看到这些条目的前台,你就已经用过CRUD了。

HTTP 动词

每一个接触过表单数据的web开发者都很熟悉GET和POST方法。前者通过一个查询字符串,比如?key2=value2&key2=value2 ,向服务器提交数据。后者通过HTTP包头发送数据。可能你没有意识到,每次你打开一个页面的时候(如果那个页面不是一个Post表单),你就是在做一个get请求。所以当你在你的RSS阅读器里点击链接,打开网页的时候,你就是在做一个get请求。

还有两个动词你可能没有听说过,因为浏览器并不支持这两个动词:PUT和DELETE。delete动作很直白,就是指示服务器删除一个条目。PUT动作相对比较难猜到,它和POST一样,也是通过Http包头发送数据。但是它的功能是修改条目(如果这个条目不存在,它应该创建一个新条目,但是在Rails故意忽略了这一点)。

聪明的你可能已经意识到GET类似于READ,POST类似于CREATE,PUT类似与UPDATE,DELETE呢,就是DELETE。如果你意识到了,给自己一点掌声,因为这个类比关系正是RESTful Rails的工作方式。

每个人都知道如果打开一个并不存在的页面,服务器会返回一个404错误页面。如果你的Rails程序出错了,会返回一个500应用程序内部错误的页面。这些响应号是服务器用来返回给浏览器,告诉浏览器当前状态的。200到299表示请求成功,300到399表示请求ok,但是你需要做一些额外的事情,400-499表示错误,500-599表示非常严重的错误。就像那几个动词代表RESTful请求一样,这些响应码代表了对RESTful请求的响应。


200 OK
    GET、PUT和DELETE可能的返回值,表示请求已接受,操作已完成。
201 Created
    告诉你POST操作成功创建了一个条目.
404 Not found
    请求的资源不存在。GET, PUT 和DELETE都可能返回。
406 Not Acceptable
    这个资源不允许进行请求的操作(下半部分详细介绍)
500 Internal Server Error
    内部发生了较大的错误

Resources资源

你可能见过类似于/posts/view/2的Rails URL,大意是说让我看看id为2的post。RESTful资源和这个类似。RESTful资源有一个controller和(可能有)一个id。通常来说RESTful资源没有指定动作,而是使用标准的Http动词。

这个在rails里是如何实现的呢?在Controller里定义了一些方法来表示资源--在这里以Post为例 ( .xml 的后缀后半部分在解释).
Method     Resource     Verb     Explanation
index     /posts.xml     GET     返回所有条目
show     /posts/1.xml     GET     返回id = 1的条目
create     /posts.xml     POST     创建条目
update     /posts/1.xml     PUT     更新id = 1的条目
delete     /posts/1.xml     DELETE     删除id = 1的条目

实际操作的时候,你可以给自己定义额外的动作(不可能让每一个网站都强行套进标准模型),后半部分会说到。

好了,后半部分我们再看看如何创建一个RESTful rails工程以及相关的一些琐碎。不见不散……

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:172431次
    • 积分:2191
    • 等级:
    • 排名:第17366名
    • 原创:41篇
    • 转载:73篇
    • 译文:2篇
    • 评论:9条
    文章分类
    最新评论