没有合适的资源?快使用搜索试试~ 我知道了~
Http协议除了 get 和 post ,还可以做更多的事情,一直以来,很多的开发人员都忘了这一点. 但是,如果你知道浏览器其实只支持 get 和 post, 那么你就不会感到惊奇了. get 和 post 是http请求从客户端传到服务器端的两个方法.除了这两个,http协议还知道 put和 delete 方法,这两个方法告诉服务器创建或者删除一个WEB的资源. 这个教程的目的,就是扩展开发人员的视线,去了解http协议的 put 和 delete 方法.我们常说的 REST 这个术语,精华就是 http 协议中 get, post, put, delete 四个方法.Rails 从1.2版本开始,就支持 REST 这个技术了. 这个教程一开始会简短的介绍REST的背景和概念,接着介绍为什么要开发 REST风格的Rails应用. 使用 scaffolding,这是可以帮助我们产生 controller 和 model 细节的工具,对我们的进行REST应用的开发很有帮助.REST的应用中作用非常重大的路由技术,将会在接下来的章节介绍.“嵌套的资源”这个章节,会介绍一下REST的高级应用,告诉大家资源如何以 父 - 子(继承关系)的关系组合在一起,同时不违反的REST 风格的路由设计.教程的后面,还会介绍一些REST的内容,AJAX,REST风格的应用的测试方法,还有“ActiveResource”-- REST的客户端部分. 在我们开始之前,再啰嗦最后一句:要读这个教程,最少你要懂一点Rails开发的基本知识,否则的话,先去学习学习吧:)
资源推荐
资源详情
资源评论
应用 Rails 进行 REST 开发
RESTful Rails Development
前言
Http 协议除了 get 和 post ,还可以做更多的事情,一直以来,很多的开发人员都忘了
这一点.
但是,如果你知道浏览器其实只支持 get 和 post, 那么你就不会感到惊奇了.
get 和 post 是 http 请求从客户端传到服务器端的两个方法.除了这两个,http 协议还
知道 put 和 delete 方法,这两个方法告诉服务器创建或者删除一个 WEB 的资源.
这个教程的目的,就是扩展开发人员的视线,去了解 http 协议的 put 和 delete 方法.
我们常说的 REST 这个术语,精华就是 http 协议中 get, post, put, delete 四个方法.
Rails 从 1.2 版本开始,就支持 REST 这个技术了.
这个教程一开始会简短的介绍 REST 的背景和概念,接着介绍为什么要开发 REST
风格的 Rails 应用.
使用 scaffolding,这是可以帮助我们产生 controller 和 model 细节的工具,对我们的
进行 REST 应用的开发很有帮助.REST 的应用中作用非常重大的路由技术,将会在接
下来的章节介绍.“嵌套的资源”这个章节,会介绍一下 REST 的高级应用,告诉大家资
源如何以 父 - 子(继承关系)的关系组合在一起,同时不违反的 REST 风格的路由
设计.教程的后面,还会介绍一些 REST 的内容,AJAX,REST 风格的应用的测试方法,
还有“ActiveResource”-- REST 的客户端部分.
在我们开始之前,再啰嗦最后一句:要读这个教程,最少你要懂一点 Rails 开发的基
本知识,否则的话,先去学习学习吧:)
1.1 什么是 REST?
REST 这个术语,是 Roy Fielding 在 Ph.D.论文中提出来的,它的全称是
“Representational State Transfer.”
REST 描述了这么一个架构:利用标准的 http 协议中的 get, post, put, delete 来请
求和操作网络上的资源.
在 REST 中,资源的意思就是一个 基于 URL 实体,客户端可以通过 http 协议来
和它进行交互.这个资源可以用各种形式来展示给客户端,如 HTML,XML,RSS,主要
依赖于客户端的调用方式.并不像以往的 Rails 开发那样,用 REST 方式,一个 url 不是
指定一个 model 或者 action, 一个 url 仅仅是资源的本身而已.
在图 1.1 中,三个资源的 URL 的开头都是相同的,通过后面的不同的数字来保证
这三个是不同的资源.
注意:URL 并没有表明要对这三个资源进行什么操作.
在 Rails 应用中,一个资源是由 controller 和 model 组成的.那么从技术的角度来
看,图 1.1 中的 3 个资源"project",就是针对 3 个请求,而表现出来的 Project model(也
就是 ActiveRecord 类了)的 3 个实例形式.
1.2 为什么使用 REST?
问得好!我们已经使用 MVC 模式开发 Rails 应用 2 年了,为什么要使用 REST?
REST 所带给我们的,是 Rails 的理论上的提升,下面的一些特性,将会使我们清
晰地了解这一点.
a) 简明的 Url. REST 风格的 URL 是为了定位一个资源,而并不是调用一个
action. 在 REST 中,URL 经常以这种方式出现:先是 controller 的名称,然后是资源的
id.请求的操作隐藏在 URL 里,并且通过 http 协议来表示(get, post, put, delete 四个
动作).
b) 传回给客户端不同格式的内容.我们通过一种方式来编写 controller,其中的
action 应该都可以返回给客户端不同的格式的结果.对于同一个 action, 即可以返回
给客户端 html, 也可以返回给 xml,也可以返回给 RSS,这依赖于客户端想要什么.
REST 应用就好像变得能处理客户端好多的命令.
c) 更少的代码.因为一个 action 可以返回客户端的各种需要格式,这就减少了
(DRY don't repeat yourself),这也就让 controller 里的代码减少了.
d) 面向 CRUD 的 controller. 所谓 CRUD 就是 Create,Retrieve,Update,Delete.
controller 和 model 融合到一起,每个 controller 都会响应某个 model 的操作.
e) 让系统设计更简单.REST 风格的开发方式,会使系统结构更加清晰,而且容易
维护.
接下来的章节中,我们会用例子来逐步的让您明白上面所描述的这些特性.
1.3 有什么新玩意?
如果你觉得 REST 让你之前所有的开发经验变得毫无作用,别担心,那是不可能
的~ 因为 REST 仍然是基于 MVC 风格的.从技术角度来看,REST 中的“新玩意”可以
归纳为以下几点:
a) 在 controller 中的 respond_to 的用法.
b) 对于 link 和 form 的新的 helper 方法.
c) 在 controller redirect 中的 url 方法.
d) 在 routes.rb 文件中,新的路由定义方法.
一旦你了解了 REST ,而且经常使用它,那么自然而然,你就会设计一个 REST 的应
用了!
1.4 准备
接下来,我们要以我们的一本书《RapidWeb Development mit Ruby on Rails》
中的一个例子“项目管理应用”来描述 Rails 的 REST 方面的特性.我们并不会编写整
个应用,但是我们会使用相同的技术去描述 REST 的内容.
下面,我们开始吧!首先创建一个 rails 的应用:
> rails ontrack
然后,我们来创建 开发 和 测试 的数据库.
> mysql -u rails -p
Enter password: *****
mysql> create database ontrack_development;
mysql> create database ontrack_test;
mysql> quit
1.4.1 Rails 1.2
假设并不是所有的人都希望在系统里安装 rails 1.2――因为那样的话,所有的
应用都必须跑在 rails 1.2 之下了.所以我们建议只是让这个例子使用 rails 1.2.参考文
档,rails 1.2 的 tag 是 rel _1-2-1.所以我们使用 rake 命令来让 ontrack 项目使用 1.2 的
版本.
> cd ontrack
> rake rails:freeze:edge TAG=rel_1-2-1
1.5 Resource Scaffolding
基于 REST 的 rails 应用可以使用新的脚手架(scaffold)命令 scaffold_resource
来方便的创建.可以传递给生成器这样一些参数:在本例中,就是资源的名字
“project”, 和 这个 model 的字段名字以及类型.字段的类型是必须的,因为我们要使用
migration,以及在视图中显示这些字段.
> cd ontrack
> ruby script/generate scaffold project name:string desc:text
生成器不仅生成了 model, controller, view, 还生成了完整的 migration 脚本,以及在
routes.rb 里生成了一个映射:map.resources :projects ,对于新生成 controller 来说,这
是用于 REST 方面的最后一个映射项目.我们现在先不深入研究 routes.rb, 还是先一
步一步地看看我们刚才用生成器说生成的东西吧!
1.6 Model
就好像我们之前提过的,在 Rails 里,REST 的资源是由 controller 和 model 来组
成的.所谓 model,就是一个普通的 ActiveReocrd 类,继承自 ActiveRecord::Base:
class Project < ActiveRecord::Base
end
所以,对于 model 这部分来说,没什么新鲜的东西.不过,别忘了创建这个表:
> rake db:migrate
1.7 Controller
生成的 controller “ProjectsController” 是一个具有 CRUD 行为的 controller,它
可以操作 “Project” 这个资源(还记得刚才创建的 projects 表吧?).
这就表明,一个 controller 属于某一个特定的资源,并且具有一些符合标准的动
作来执行 CRUD 的操作.例如:
Listing 1.1: ontrack/app/controllers/projects controller.rb
class ProjectsController < ApplicationController
# GET /projects
# GET /projects.xml
def index...
# GET /projects/1
# GET /projects/1.xml
def show...
# GET /projects/new
def new...
# GET /projects/1;edit
def edit...
# POST /projects
# POST /projects.xml
def create...
# PUT /projects/1
# PUT /projects/1.xml
def update...
# DELETE /projects/1
# DELETE /projects/1.xml
def destroy...
end
如果我们来看看刚才生成的 ProjectController,会发现其实并没有什么新鲜的
东西,无非也就是这么一些操作:创建(create),读取(retrieve),更新(update),删除
(delete)这些操作.需要强调注意:这些操作都是针对 Project 这个资源的.Controller
和 Action 看起来都很普通,但是仔细看一下,每个 Action 都会有一些注释,这些注释
表明了 url 和 http 所使用的动作.这些注释所体现的,就是 REST 风格的 URL.接下来
的章节,我们会仔细分析一下这些 URL 的内容.
1.7.1 REST 风格的 URL
我们之前已经十分强调过,REST 风格的 URL,并不像以往的 Rails 应用一样,
是由 controller/action/model id 所组成的,例如 /projects/show/1 .相反,REST 风格的
URL 仅仅由 controller 和资源的 id 所组成,例如 /projects/1.
注意:我们一直再强调“资源”这个词.
URL 中没有了 action,我们也就看不到该对资源进行什么操作了.“/projects/1”
这个 URL 到底应该是显示一个资源,还是应该删除一个资源?答案来自我们之前提
到的 http 协议的 4 个动作.
下面的列表可以展示 http 协议的 4 个动作是如何和 REST 风格的 URL 所关
联的,并且什么样的组合,对应什么样的 action:
剩余28页未读,继续阅读
资源评论
LSQ6063
- 粉丝: 8
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功