2

以下の URL を見て、人気のある ruby​​ gem が、XML を返す Restful エンドポイントを ruby​​ オブジェクトにマップする方法を確認しています。

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

また、パフォーマンスが大きな懸念事項である場合、引き続きアクティブリソースを使用するか、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 に答える