通过上一讲我们了解到,RESTful设计的关键就是定义系统中的资源,这一讲我们将学习在Rails中,如何将请求路由到我们的资源,以及我们应该如何来处理它。
不过,有一点需要先说明:REST并不是Rails的一部分,在Rails出现之前,REST的概念已经存在很多年了,并且REST的应用也并不局限于Web,事实上,它也可以应用到其它各种应用软件的开发中。
资源就是控制器
在我们正式开始之前,我们需要首先明确,在Rails中,资源和model并不总是一对一的关系,有时资源仅仅只是你应用逻辑中的一个实体的抽象,并不需要映射到你的数据库。但资源跟控制器总是一对一的,也就是每个资源都必须有一个与它相对应的控制器,并且你需要重新理解控制器,现在控制器只是REST接口的具体实现,它的全部作用就是根据客户的请求返回资源的某种表示(HTML,XML等)。
所以,就像第2章讲的,我们不在需要去设计那无穷尽的API了,现在我们的控制器只需要定义7个方法:
- show,处理针对单个资源的GET请求
- create,处理POST请求,并将创建一个新资源
- update,处理PUT请求,并更新指定的资源
- destroy,处理DELETE请求,销毁一个资源
- index,处理针对多个资源的GET请求
- new,GET请求,返回一个用于创建资源的表单,
- edit,GET请求,返回一个用于更新资源的表单
Rails 会帮助我们将用户的请求路由到某个合适的方法,当然,你并不需要实现这全部的7个方法,如果你的系统不允许用户创建和修改资源,那么你只需要实现 index和show方法就可以了。
不过更有可能的一种情况是你觉得这7个方法根本不够,你当然可以选择向控制器添加新的方法,但这其实是因为你的设计遗漏了一些资源,因为我建议,在你向控制器添加新方法之前,最好先重新考虑下你的设计。
方法已经定义好了,下一步的任务就是将用户的请求路由到指定的方法,在router.rb中,你可能会看到这样的路由:
map.connect '/airports/:action/:id' , :controller = 'airports'
这条语句将映射/airports/open/45到airports控制器的open方法,你可以通过params[:id]获取URL中的参数 45。但是REST路由有些特殊,它需要同时考虑URL和请求的类型,因此同样是发往/airports/1的请求,如果是GET请求,它需要被路由到 airports的show方法,而DELETE请求则需要被路由到DELETE方法。
不过幸运的是,从Rails1.2开始,我们不再需要通过map.connect来手动的配置REST路由,map.resources会帮我们搞定一切:
map.resources 'airports'
这句话将创建如下的路由规则:
- 针对/airports/ 的POST请求将被路由到create方法
- 针对/airports/1 的GET请求将被路由到show方法
- 针对/airports/1的PUT请求被路由到update方法
- 针对/airports/1 的DELETE请求被路由到destroy方法
- 针对/airports/ 的GET请求被路由到index方法
- 针对/airports/new 的GET请求被路由到new方法
- 针对/airports/1;edit 的GET请求被路由到edit方法
注意:最后一条逗号分隔的URL看起来很丑陋,但它们在Rails1.2.3中是合法的,不过不用苦恼,它们将在Rails2.0中被去除
现在我们已经完成了URL的路由,下面我们需要做的就是实现这些方法:
不过先别着急着码代码,从Rails1.2开始,我们有了一个新的生成器(generator):scaffold_resource,使用它我们可以很轻松的生成一个符合REST规范的Rails框架,它包含:
- 资源所对应的model
- 资源的migration文件
- 资源所对应的控制器,控制器已经包含了REST所需的7个方法的实现
- 这7个方法所对应的RHTML文件
- 一条映射用户请求的路由
让我们仍然从第三讲的例子开始,首先创建一个新程序,然后为它添加一个airport资源:
D:\study>rails REST
D:\study>cd REST
D:\study\REST>ruby script/generate scaffold_resource airport name:string designator:string
修改database.yml文件,设置好你的数据库链接,然后执行:
D:\study\REST>rake db:migrate
D:\study\REST>ruby script/server
现在定位你的浏览器到http://localhost:3000/airports/new,你应该已经可以创建一个新机场了,是不是很神奇?现在,让我们来看看airports_controller.rb,所有的东西都在那了。
你应该会在控制器代码中看到一些奇怪的respond_to块,这正是我们整个REST实现的关键所在,我们将在下一讲详细探讨respond_to的细节。
分享到:
相关推荐
本书《Ruby on Rails 实践》是一本指南,旨在向读者介绍Ruby on Rails框架的使用,并通过实践案例帮助读者掌握其全貌。本书适合已经了解HTML、JavaScript和CSS,并且对Ruby基础语法有所认识的开发者。即便读者没有...
该书是关于Ruby on Rails 4框架的深入指南,旨在帮助读者掌握Rails 4的高级功能,并通过实际案例学习最佳实践。本书适合已经有一定Ruby和Rails基础的开发者阅读。 #### 书籍内容概述 - **前言**:书中包含了对Rails...
《The Rails 4 Way》是一本深入探讨Ruby on Rails 4框架特性的专业书籍,由Obie Fernandez、Kevin Faustino和Vitaly Kushner共同撰写。本书旨在为开发者提供一套全面的指南,帮助他们更好地理解和掌握Rails 4的高级...
《Rails 4 的方式》是一本针对Ruby on Rails 4框架的深入指南,旨在帮助开发者更好地理解并应用Rails 4的各项功能和技术。本书由Obie Fernandez、Kevin Faustino 和 Vitaly Kushner共同撰写,于2014年6月3日发布。...
《敏捷Web开发与Rails》是一本深度探讨使用Ruby on Rails框架进行敏捷Web应用程序开发的权威指南。Rails是Ruby编程语言的一个开源Web应用框架,它遵循“约定优于配置”(Convention Over Configuration, CoC)的设计...
Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...
结合标题中的“RESTful Ruby on Rails Web API提供项目”,我们可以推断这是一个使用Ruby on Rails框架构建的Web应用程序,特别关注于实现RESTful API。 **RESTful原则:** REST(Representational State Transfer...
- **Rails 3概述**:Rails 3是Ruby on Rails框架的一个重要版本,旨在简化Web开发过程,提供更高效、更简洁的开发方式。本书为初学者提供了全面的指南,帮助读者快速上手Rails 3。 - **主要改进与特性**: - **...
RESTful设计原则是Rails推崇的Web服务设计风格,书中也对此进行了详尽的阐述,指导读者如何利用Rails的路由系统实现符合REST原则的API。 本书还探讨了部署和维护Rails应用的相关知识,如使用Capistrano进行自动化...
在本项目中,“Ruby-on-Rails-app-using-Graphql”是一个使用Ruby on Rails框架和GraphQL构建的应用程序。这个项目展示了如何将GraphQL集成到传统的Rails应用中,以提供更高效、灵活的数据查询方式。以下是关于Ruby ...
5. **Ruby on Rails** - ActiveRecord:ORM(对象关系映射),负责数据库操作,遵循Active Record模式。 - RESTful设计:Rails鼓励使用RESTful路由,实现资源导向的HTTP请求处理。 - Scaffold:快速生成CRUD操作...
Rails 速成课程是针对想要快速掌握 Ruby on Rails 框架的开发者设计的一个学习资源。GitHub 上的 railscrashcourse.github.io 项目是这个课程的源代码库,提供了教学材料、示例代码以及可能的练习,帮助学习者深入...
【标题】"todo-rails-api-ember-backend" 指的可能是一个项目,它结合了Ruby on Rails API后端与Ember.js前端框架,用于构建一个待办事项管理应用。这个项目的目的是展示如何将Ruby on Rails作为数据服务层,而Ember...
2. **Rails官方文档**:详尽的Rails指南和API文档,是学习和解决问题的重要参考资料。 3. **Ruby on Rails Tutorial**:Michael Hartl编写的经典Rails教程,适合初学者。 4. **社区与论坛**:如Stack Overflow、...
标题 "gemeinde_hp:Rails 应用程序" 暗示我们正在讨论一个基于 Ruby on Rails 框架构建的应用程序。Rails 是一种流行的开源 Web 应用程序框架,它使用 Ruby 语言编写,遵循 Model-View-Controller (MVC) 设计模式,...
Scalatra是另一个关键组件,是一个轻量级、基于Servlet的Scala Web框架,与Spring MVC或Ruby on Rails有类似的概念。`scalatra-rest.zip`暗示了这个压缩包还包含了与Scalatra相关的RESTful服务开发工具。Scalatra ...
该网站是使用Ruby on Rails框架构建的,这是一个非常流行且功能强大的开源框架,用于快速开发动态、数据驱动的Web应用程序。Ruby on Rails遵循“Don't Repeat Yourself”(DRY)原则,强调简洁的代码和高效的开发...