0

XML サービス API のパススルーとして機能する Rails アプリがあります。

主なユースケースは次のようになります。

  1. ユーザーはhttp://example.com/model/reportを介して Rails にパラメーターを POST します。簡潔にするために、フォームが単に送信されるとしましょうzip_code=90010
  2. Railszip_codeは RestClient を取得して使用し、GET リクエストを介して外部 XML サービス API をクエリします: http://xmlservice.example.com/report?report_id=1&zip_code=90010
  3. レポートの応答は XML 経由で返されます。Nokogiri 経由で XML を解析し、report.html.erb 経由で通常の HTML ビューを出力したいと考えています。

XML (Nokogiri) コードを配置する場所を見つけるのに苦労しています。モデルで XML を処理する必要がありますか、それともコントローラーですべての解析を行う必要がありますか?

両方の方法が機能することはわかっていますが、ベストプラクティスが何であるかを知りたいです。これもバックグラウンドの XML フィード グラブではないため、夜間に実行される遅延ジョブには適していません。24 時間年中無休で動的要求に応答する必要があります。

最適化のためにアプリから ActiveRecord を削除したことを覚えておいてください。このアプリはデータベースには触れません。これは基本的に、クライアントの HTML 出力をレンダリングする XML API へのパススルーです。

「スキニーコントローラー」と「ファットモデル」を使用するのが最善であると読んだことがありますが、そこにあるノコギリの例のほとんどはdoc = Nokogiri::XML(RestClient.get(myurl, myparams))、コントローラー内に型コードを持っています。

それで... モデルまたはコントローラー?

ありがとう!

4

1 に答える 1

1

xmlをフェッチしてxmlを解析するクラスにコードを配置します。

このようにして、返されたXMLに対して実行する解析やその他の操作について、クラスの単体テストを簡単に行うことができます。

クラスはlibフォルダーに配置できます。または、疑似モデル(XMLデータベースを使用)のようなものであれば、モデルにも配置できます。これは主に、クラスが何であるか、およびコードベースをどのように構造化するかによって決まります。

更新:このアプローチのプラスとして、サービスを他のものと交換しても、コードベースは同じままである可​​能性があります。コードベースはこのクラスと相互作用するため、変更はこのクラスに対してのみ行う必要があります。インターフェイスの利点:)

于 2012-07-27T20:04:24.957 に答える