在前面的教程(ActiveResource探究(一))中,在服务器端每个用户都很直接,但是处理多用户的时候就会遇到麻烦,假如我有两个servers,一个处理REAST service,另一个处理html文件。但是ActiveResource假设认证实在类的层面上处理。这个时候ruby的元编程思想可以解决问题!
使用前面的例子,我扩展客户端如下:
require 'activeresource'
module Sample
module Client
class API
def self.create_api(login = nil, password = nil)
@url_base = "http://localhost:3000"
@url_base = "http://#{login}:#{password}@localhost:3000" if login
@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={}>
>>
分享到:
- 2008-02-14 17:03
- 浏览 2434
- 评论(0)
- 论坛回复 / 浏览 (0 / 2114)
- 查看更多
相关推荐
ActiveResource.js在客户端构造并执行请求,并将响应格式化为有意义的资源表示形式,使您可以执行CRUD操作,以及轻松地与资源交互和修改各种关系。 ActiveResource.js受到极大启发, 是Ruby on Rails的著名ORM。 与...
activeresource-2.3.4.gem
activeresource-2.3.5.gem
ObjectiveResource是Rails的ActiveResource框架与Objective-C的移植。 该项目的主要目的是快速轻松地建立联系服务器运行Rails的iPhone应用程序。 该项目依赖于ObjectiveSupport,旨在提供一些流行的Rubyisms到...
activeresource-2.3.11 安装redmine必须的gem插件
用ActiveResource创建透明的客户端.........71 最后的话.................................77 -------------------------------------------- 第4章:面向资源的架构....................79 面向资源的架构?......
#### 二、ActiveResource概述 ActiveResource是Rails框架中的一个重要组成部分,用于处理与服务器之间的通信。它提供了与RESTful Web服务交互的高级抽象,使得开发者能够轻松地通过HTTP协议发送请求并处理响应。...
rest, Doctrine REST服务器和客户端库 :这里项目不维护 Doctrine REST服务器和客户端Doctrine REST服务器和客户端组件都是为你的Doctrine 2实体定制REST服务,以及通过类似于 Rails 中的ActiveResource的ActiveReco
- **客户端-服务器模型**:REST 遵循客户端-服务器模型,客户端负责用户界面逻辑,而服务器负责数据管理和业务逻辑。 - **统一接口**:REST 接口遵循一组固定的规则,如使用 HTTP 方法(GET、POST、PUT、DELETE)和...
背景如果您以前是用户,则有更多有关-但长话短说,我将大多数代码作为以前的客户端代码编写,因此他们同意将其开源,然后它被放弃了,我重新启动了它,现在我自己提供支持(ActiveRestClient的所有者已经承认,弃用...
如果您的服务器资源被实现为Rails ActiveResource,它将与之集成。 它甚至会生成您的客户签署他们的请求所需的秘密密钥。 由于它完全使用HTTP标头进行操作,因此服务器组件不必使用与客户端相同的语言编写。这个...
在Ruby on Rails框架中,ActiveResource是一个非常重要的组件,它使得Rails应用能够通过RESTful API与远程资源进行交互。在了解如何使用ActiveResource之前,我们需要对REST、SOAP以及Rails框架中的其他组件有所了解...
此外,它的灵感来自 ActiveResource。 这个 gem 需要 RubyMotion 2.3 或更高版本。 安装 将 MotionResource 添加到您的 Gemfile 中,如下所示: gem "motion-resource" 例子 考虑这个虚构的博客 API 示例。 ...
CachedResource CachedResource是Ruby的瑰宝,其目标是通过基于请求参数缓存响应来提高通过ActiveResource与Web服务交互的性能。 它可以帮助减少通过网络重复请求而造成的延迟。安装gem install cached_resource兼容...
4. **activeresource-2.1.0.gem**:ActiveResource是Rails用于处理RESTful服务的组件。它允许Rails应用作为客户端,通过HTTP与遵循REST原则的远程资源进行交互,从而实现数据的获取和更新。 5. **rake-0.8.1.gem**...
- **ActiveResource**: 提供了RESTful资源的客户端支持。 - **Rails**: 最终的框架gem,包含了上述所有gem的功能。 文档显示,这些gem通过`gem install`命令逐一安装。值得注意的是,这些操作通常应在Ruby的环境...
ActiveResource 是 Rails 提供的一个库,用于实现 RESTful 客户端。它可以方便地与 RESTful 服务器交互。 #### 1.17 最终总结 通过上述讨论,可以看出 RESTful 开发不仅是一种技术实践,也是一种设计理念。通过...
- `gem install activeresource-2.1.0.gem` 4. **验证安装结果**: - 验证 Rails 是否安装成功,可以使用命令:`rails -v`。如果返回 Rails 的版本号为 2.1.0,则表示安装成功。 - 创建一个新的 Rails 应用来...
- 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` 目录下,然后进入该目录逐一安装。需要注意...
- `activeresource-2.2.3.gem`:ActiveResource是Rails的一个组成部分,它提供了与RESTful web服务交互的能力。它允许Rails应用程序作为客户端,连接并操作远程资源。 - `actionmailer-2.2.3.gem`:ActionMailer是...