2

我正在查看以下 URL,以了解流行的 ruby​​ gem 如何映射将 XML 返回到 ruby​​ 对象的 Restful 端点:

https://github.com/tapajos/highrise/blob/master/lib/highrise/base.rb

我看到他们正在使用 ActiveResource::Base,它在幕后神奇地做到了这一点。

因此,您可以从 URI 中获取某种 xml,例如:

<person>
  <id type="integer">1</id>
  <first-name>John</first-name>
  <last-name>Doe</last-name>
  <title>Stand-in</title>
  <background>A popular guy for random data</background>
  <linkedin_url>http://us.linkedin.com/in/john-doe</linkedin_url>
  <company-id type="integer">5</company-id>
  <company-name>Doe Inc.</company-name>
  <created-at type="datetime">2007-02-27T03:11:52Z</created-at>
  <updated-at type="datetime">2007-03-10T15:11:52Z</updated-at>
  <visible-to>Everyone</visible-to>
..
</person>

所以使用 ActiveResource,它只是将它映射到一个 ruby​​ 对象或返回一个哈希?

它返回的对象的定义在哪里?

就像标签资源代码在这里:https ://github.com/tapajos/highrise/blob/master/lib/highrise/tag.rb

module Highrise
  class Tag < Base  
    def ==(object)
      (object.instance_of?(self.class) && object.id == self.id && object.name == self.name)
    end
  end
end

此外,如果性能是一个大问题,是否还会使用 activeresource 或者是否有更快的方法来解析 xml?

4

1 回答 1

1

ActiveResource 正在处理所有的 XML 转换。您会注意到 /lib/highrise/base.rb 中的格式设置为 XML。查看 ActiveResource 文档:http ://api.rubyonrails.org/classes/ActiveResource/Base.html#method-c-format-3D

设置从 mime 类型引用发送和接收属性的格式

Person.format = ActiveResource::Formats::XmlFormat

Person.find(1) # => GET /people/1.xml

ActiveResource 本身负责将任何 RESTful 资源映射到模型。因此 highrise gem 指向 highrise 中的 RESTful 资源,ActiveResource 将其转换为 rails 模型。

于 2012-10-17T22:32:04.843 回答