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

ActiveResource探究(二)--多用户的客户端

阅读更多

在前面的教程(ActiveResource探究(一))中,在服务器端每个用户都很直接,但是处理多用户的时候就会遇到麻烦,假如我有两个servers,一个处理REAST service,另一个处理html文件。但是ActiveResource假设认证实在类的层面上处理。这个时候ruby的元编程思想可以解决问题!

 

使用前面的例子,我扩展客户端如下:

require 'activeresource'

module Sample
  module Client
    class API
      #
      # Creates a module that serves as an ActiveResource
      # client for the specified user
      #
      def self.create_api(login = nil, password = nil)
        # specify the site.  Default to no credentials
        @url_base = "http://localhost:3000"
        @url_base = "http://#{login}:#{password}@localhost:3000" if login
        # build a module name.  This assumes that logins are unique.
        # it also assumes they're valid ruby module names when capitalized
        @module = login ? login.capitalize : "Default"
        class_eval <<-"end_eval",__FILE__, __LINE__
        module #{@module}
          class Post < ActiveResource::Base
            self.site = "#{@url_base}"
          end
          class Comment < ActiveResource::Base
            self.site = "#{@url_base}/posts/:post_id"
          end
          # return the module, not the last site String
          self
        end
        end_eval
      end
    end
  end
end

 

 

这次允许我们为特定的用户创建特定的api,这样多个用户都可以链接到rest service了,来看看吧:

>> require 'ares_sample_client'
=> ["Sample"]
>> api = Sample::Client::API.create_api
=> Sample::Client::API::Default
>> p = api::Post.find(1)
=> #<Sample::Client::API::Default::Post:0xb715af74 @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 = api::Post.create(:content => "should fail")
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):4
>> auth_api = Sample::Client::API.create_api('test1','test1')
=> Sample::Client::API::Test1
>> p = auth_api::Post.find(1)
=> #<Sample::Client::API::Default::Post:0xb713dde8 @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 = auth_api::Post.create(:content => "should succeed!")
=> #<Sample::Client::API::Test1::Post:0xb713312c @attributes={"updated_at"=>Thu Jan 10 04:01:53 UTC 2008, "id"=>7, "content"=>"should succeed!", "user_id"=>nil, "created_at"=>Thu Jan 10 04:01:53 UTC 2008}, @prefix_options={}>
>>
分享到:
评论

相关推荐

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

    ActiveResource.js在客户端构造并执行请求,并将响应格式化为有意义的资源表示形式,使您可以执行CRUD操作,以及轻松地与资源交互和修改各种关系。 ActiveResource.js受到极大启发, 是Ruby on Rails的著名ORM。 与...

    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插件

    RESTful Web Services 中文版.rar

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

    Ruby on Rails中的ActiveResource使用详解

    #### 二、ActiveResource概述 ActiveResource是Rails框架中的一个重要组成部分,用于处理与服务器之间的通信。它提供了与RESTful Web服务交互的高级抽象,使得开发者能够轻松地通过HTTP协议发送请求并处理响应。...

    rest, Doctrine REST服务器和客户端库.zip

    rest, Doctrine REST服务器和客户端库 :这里项目不维护 Doctrine REST服务器和客户端Doctrine REST服务器和客户端组件都是为你的Doctrine 2实体定制REST服务,以及通过类似于 Rails 中的ActiveResource的ActiveReco

    RestFul_Rails_Dev_v_0.1

    - **客户端-服务器模型**:REST 遵循客户端-服务器模型,客户端负责用户界面逻辑,而服务器负责数据管理和业务逻辑。 - **统一接口**:REST 接口遵循一组固定的规则,如使用 HTTP 方法(GET、POST、PUT、DELETE)和...

    flexirest:Flexirest-Ruby的真正灵活的REST API客户端

    背景如果您以前是用户,则有更多有关-但长话短说,我将大多数代码作为以前的客户端代码编写,因此他们同意将其开源,然后它被放弃了,我重新启动了它,现在我自己提供支持(ActiveRestClient的所有者已经承认,弃用...

    api_auth:用于Rails和HTTP客户端的HMAC身份验证

    如果您的服务器资源被实现为Rails ActiveResource,它将与之集成。 它甚至会生成您的客户签署他们的请求所需的秘密密钥。 由于它完全使用HTTP标头进行操作,因此服务器组件不必使用与客户端相同的语言编写。这个...

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

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

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

    此外,它的灵感来自 ActiveResource。 这个 gem 需要 RubyMotion 2.3 或更高版本。 安装 将 MotionResource 添加到您的 Gemfile 中,如下所示: gem "motion-resource" 例子 考虑这个虚构的博客 API 示例。 ...

    cached_resource:缓存ActiveResource

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

    rails本地安装包完整版

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

    ruby on rails安装环境.txt

    - **ActiveResource**: 提供了RESTful资源的客户端支持。 - **Rails**: 最终的框架gem,包含了上述所有gem的功能。 文档显示,这些gem通过`gem install`命令逐一安装。值得注意的是,这些操作通常应在Ruby的环境...

    RESTful Rails Development

    ActiveResource 是 Rails 提供的一个库,用于实现 RESTful 客户端。它可以方便地与 RESTful 服务器交互。 #### 1.17 最终总结 通过上述讨论,可以看出 RESTful 开发不仅是一种技术实践,也是一种设计理念。通过...

    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是...

Global site tag (gtag.js) - Google Analytics