`
weskycn
  • 浏览: 31479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ActiveResource探究(一)--跑起来再说

阅读更多

ActiveResource探究

 

本教程向大家展示使用ActiveResource创建简单的REST风格的API。包括两个嵌套得Model、认证和客户端。目的是快速地搭建一个可用的REST API。

 

步骤一:新建一个项目

rails ares-demo

使用rails 2.0.2版本,我想这与版本无关。

 

步骤二:安装两个好用的插件

 

Resource This插件会将默认rest风格的action加到controller上。并且支持多层资源嵌套...通过下面的命令安装:

script/plugin install http://jnewland.com/svn/public/ruby/rails/plugins/resource_this/

 

Restful Authentication众所周知是一个认证插件,通过下面的命令安装:

script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/

 

步骤三:设置restful authentication

 

非常简单,使用生成器生成migrations还有其他一些东西,具体用法请搜索restful authentication的用法指导

./script/generate authenticated user sessions

 

步骤四:生成程序Model

 

接下来就是生成你的model了。我门做一个简单的,posts包括很多comments,posts和comments都属于user,命令如下:

./script/generate scaffold posts
./script/generate scaffold comments

下面修改migration文件,如下:

db/migrate/002_create_posts.rb

class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.column :content, :text
      t.column :user_id, :integer
      t.timestamps
    end
  end

  def self.down
    drop_table :posts
  end
end

db/migrate/003_create_comments.rb

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      t.column :content, :text
      t.column :user_id, :integer
      t.column :post_id, :integer
      t.timestamps
    end
  end

  def self.down
    drop_table :comments
  end
end

Next you'll need to add the relationships to your model classes. Add the following bit to the front of app/models/user.rb

下一步给这三个模型加上关联:

class User < ActiveRecord::Base
  # custom relationships
  has_many :posts
  has_many :comments

app/models/post.rb

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

and app/models/comment.rb

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
end

用下面命令生成数据库:

 

rake db:migrate

 

步骤五:装载测试数据

 

添加一些默认数据,执行命令script/console,如下:

>> u1 = User.new(:login => "test1", :email => "test1@foo.com", :password => "test1", :password_confirmation => "test1")
=> #<User id: nil, login: "test1", email: "test1@foo.com", crypted_password: nil, salt: nil, created_at: nil, updated_at: nil, remember_token: nil, remember_token_expires_at: nil>
>> u1.save
=> true
>> u2 = User.new(:login => "test2", :email => "test2@foo.com", :password => "test2", :password_confirmation => "test2")
=> #<User id: nil, login: "test2", email: "test2@foo.com", crypted_password: nil, salt: nil, created_at: nil, updated_at: nil, remember_token: nil, remember_token_expires_at: nil>
>> u2.save
=> true
>> p = Post.new(:user => u1, :content => "The first post")
=> #<Post id: nil, content: "The first post", user_id: 1, created_at: nil, updated_at: nil>
>> p.save
=> true
>> c = Comment.new(:user => u2, :post => p, :content => "first!")
=> #<Comment id: nil, content: "first!", user_id: 2, post_id: 1, created_at: nil, updated_at: nil>
>> c.save
=> true
>>

 

步骤六:resource_this!

 

接下来我们用插件resource_this!修改如下文件app/controllers/posts_controller.rb

class PostsController < ApplicationController
  resource_this
end

app/controllers/comments_controller.rb

 

class CommentsController < ApplicationController
  resource_this :nested => [:post]
end

And finally update config/routes.rb

 

ActionController::Routing::Routes.draw do |map|
  map.resources :posts do |post|
    post.resources :comments
  end

  map.resources :users

  map.resource :session
end

就是这样,现在你可以关注你的API了!

 

步骤七:浏览

 

用命令script/server启动网站服务器,访问下面的链接

 

步骤八:开船

 

到目前为止,我们的service对所有人开放。我们将加入简单的认证,我们将对某些action加以控制:

修改app/controllers/application.rb

class ApplicationController < ActionController::Base
  include AuthenticatedSystem
  before_filter :login_required, :only => [:create,:edit,:new,:update,:destroy]
  helper :all # include all helpers, all the time

  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery # :secret => 'b845cf981afbfef06600e5d7f23e0fed'
end

 

步骤九:客户端

 

我们可以通过curl或浏览器测试,但是ActiveResource真正的魅力是使用ruby对象测试。所以我们将创建一个简单的客户端api。在lib目录下建一个文件"ares_sample_client.rb",并加入以下代码:

require 'activeresource'

module Sample
  module Client
    class API
      class Post < ActiveResource::Base
        self.site = "http://localhost:3000"
      end
      
      class Comment < ActiveResource::Base
        self.site = "http://localhost:3000"
      end
    end
  end
end

 

现在我们可以同两国console来测试我们的成果了,确保server启动在3000端口,并且启动console:script/console

          
>> require 'ares_sample_client.rb'
=> ["Sample"]
>> posts = Sample::Client::API::Post.find(:all)
=> [#<Sample::Client::API::Post:0xb710bec4 @attributes={"updated_at"=>Wed Jan 09 02:36:34 UTC 2008, "id"=>1, "content"=>"The first post", "user_id"=>1, "created_at"=>Wed Jan 09 02:36:34 UTC 2008}, @prefix_options={}>]
>> 

>> p = Sample::Client::API::Post.create
ActiveResource::UnauthorizedAccess: Failed with 401 Unauthorized
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/connection.rb:125:in `handle_response'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/connection.rb:112:in `request'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/connection.rb:101:in `post'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:803:in `create'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:636:in `save_without_validation'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/validations.rb:262:in `save'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:339:in `create'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/core_ext/object/misc.rb:28:in `returning'
        from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:339:in `create'
        from (irb):3
>> 

 

我们的API成功了,认证系统也发挥作用了。我们没有通过认证,所有不能够创建post,那么现在我们就加入认证来测试一下:

module Sample
  module Client
    class API
      class Post < ActiveResource::Base
        self.site = "http://test1:test1@localhost:3000"
      end
      
      class Comment < ActiveResource::Base
        self.site = "http://test1:test1@localhost:3000"
      end
    end
  end
end

 

需要注意的是,认证应用在整个类...这是的api使用相当容易,但是使多个用户使用变困难了,不管如何,我们的程序起作用了,我们再看看:

>> p = Sample::Client::API::Post.create(:content => "Should succeed", :user_id => 1)
=> #<Sample::Client::API::Post:0xb71b81d8 @attributes={"updated_at"=>Wed Jan 09 02:55:22 UTC 2008, "id"=>3, "content"=>"Should succeed", "user_id"=>1, "created_at"=>Wed Jan 09 02:55:22 UTC 2008}, @prefix_options={}>
>> p.save
=> true
>> 

 

非常好!

 

请继续阅读本教程的第二部分

2
0
分享到:
评论
5 楼 weskycn 2008-04-02  
没有错阿,我是想加上原文地址的,但是当我翻译的时候原文已经打不开了。
我想这就是转贴的好处阿,确保信息不丢失。呵呵
4 楼 blackanger 2008-03-27  
翻译的还不错
3 楼 blackanger 2008-03-27  
貌似你的文章是翻译的噢,应该把原文地址加上
2 楼 weskycn 2008-03-22  
呵呵,以前的版本可以把ActiveResource 下载到你的项目中再用啊
1 楼 blackanger 2008-03-21  
当然和版本有关系了。以前的版本就没有ActiveResources

相关推荐

    active-resource.js:ActiveResource.js-JavaScript中的API资源关系映射

    ActiveResource.js-Javascript中的API资源关系映射 欢迎使用ActiveResource.js,这是JavaScript的API资源ORM库。 ActiveResource.js旨在使与RESTful服务器上存储的资源的交互比Backbone和ngResource等更简单的解决...

    activeresource-2.3.4.gem

    activeresource-2.3.4.gem

    activeresource-2.3.5.gem

    activeresource-2.3.5.gem

    objectiveresource:Ruby on Rails的ActiveResource到Objective-C(特别是iPhone)的端口

    ObjectiveResource是Rails的ActiveResource框架与Objective-C的移植。 该项目的主要目的是快速轻松地建立联系服务器运行Rails的iPhone应用程序。 该项目依赖于ObjectiveSupport,旨在提供一些流行的Rubyisms到...

    activeresource-2.3.11 安装redmine必须的gem插件

    activeresource-2.3.11 安装redmine必须的gem插件

    Ruby on Rails中的ActiveResource使用详解

    Rails框架内置了许多强大的工具来帮助开发者构建高性能的应用程序,其中ActiveResource便是其中之一。本文将详细介绍ActiveResource的基本概念及其在Rails项目中的应用方式,尤其是如何处理HTTP请求与响应。 #### ...

    RESTful Web Services 中文版.rar

    用ActiveResource创建透明的客户端.........71 最后的话.................................77 -------------------------------------------- 第4章:面向资源的架构....................79 面向资源的架构?......

    在Ruby on Rails中使用Rails Active Resource的教程

    在Ruby on Rails框架中,ActiveResource是一个非常重要的组件,它使得Rails应用能够通过RESTful API与远程资源进行交互。在了解如何使用ActiveResource之前,我们需要对REST、SOAP以及Rails框架中的其他组件有所了解...

    motion-resource:从您的 iOS 应用程序访问 RESTful 资源。 灵感来自 ActiveResource

    这是一个用于在 RubyMotion 应用程序中使用 JSON API 的库。 它基于 ,但它几乎完全重写。 此外,它的灵感来自 ActiveResource。 这个 gem 需要 RubyMotion 2.3 或更高版本。 安装 将 MotionResource 添加到您的 ...

    smooth_operator:Ruby gem,它模仿ActiveRecord行为,但通过外部API进行。 它是ActiveResource的一种轻量级且灵活的替代方案,可以像您期望的那样响应REST API

    它是ActiveResource的一种轻量级且灵活的替代方案,可以像您期望的那样响应REST API。 请务必查看以下微服务示例: : Rails4应用程序使用SmoothOperator :: Rails而不是ActiveRecord :: Base类列出/创建/编辑和...

    cached_resource:缓存ActiveResource

    CachedResource CachedResource是Ruby的瑰宝,其目标是通过基于请求参数缓存响应来提高通过ActiveResource与Web服务交互的性能。 它可以帮助减少通过网络重复请求而造成的延迟。安装gem install cached_resource兼容...

    rails2.3.8 && ruby1.8.7

    6. `activeresource-2.3.8.gem`:ActiveResource允许Rails应用通过RESTful接口与其他应用进行通信。 7. `activesupport-2.3.8.gem`:ActiveSupport包含了许多实用的工具类和模块,如日期和时间处理、JSON解析等,...

    ruby1.8.7 & rails2.3.8

    4. `activerecord-2.3.8.gem`、`actionpack-2.3.8.gem`、`activeresource-2.3.8.gem`、`activesupport-2.3.8.gem`、`actionmailer-2.3.8.gem`:这些都是Rails核心组件的Gem文件,分别对应模型(ActiveRecord)、控制...

    Ruby 1.8.6 on Rails 2.1.0 Install.txt

    - `gem install activeresource-2.1.0.gem` 4. **验证安装结果**: - 验证 Rails 是否安装成功,可以使用命令:`rails -v`。如果返回 Rails 的版本号为 2.1.0,则表示安装成功。 - 创建一个新的 Rails 应用来...

    Centos5.6中Redmine1.2.1安装过程

    - activeresource-2.3.11.gem - i18n-0.4.2.gem - mysql-2.8.1.gem - cgi_multipart_eof_fix-2.5.0.gem - coderay-1.0.0.gem 将上述 gems 文件保存于 `/home/soft/rails` 目录下,然后进入该目录逐一安装。需要注意...

    rails 2.2.3 依赖

    - `activeresource-2.2.3.gem`:ActiveResource是Rails的一个组成部分,它提供了与RESTful web服务交互的能力。它允许Rails应用程序作为客户端,连接并操作远程资源。 - `actionmailer-2.2.3.gem`:ActionMailer是...

    RestFul_Rails_Dev_v_0.1

    ActiveResource 是 Rails 提供的一个库,用于构建 RESTful 客户端,使得与远程服务的交互变得更加简单。 **ActiveResource 示例**: ```ruby class Task &lt; ActiveResource::Base self.site = ...

    ruby on rails 2.1新特性介绍

    Ruby on Rails,一个备受推崇的Web开发框架,自2004年由David Heinemeier Hansson首次发布以来,便以其优雅的设计和“约定优于配置”的理念赢得了全球开发者的心。在2007年底,Rails 2.0的发布标志着框架的重大升级...

    rails本地安装包完整版

    4. **activeresource-2.1.0.gem**:ActiveResource是Rails用于处理RESTful服务的组件。它允许Rails应用作为客户端,通过HTTP与遵循REST原则的远程资源进行交互,从而实现数据的获取和更新。 5. **rake-0.8.1.gem**...

Global site tag (gtag.js) - Google Analytics