2011-09-09 3 views
1

Rails Webアプリケーションの中にネストされた基本認証またはAPIキーを使用するRails APIの作り方を知りたいだけです。RoR APIをRoRサイトにネストして書く

私はサイトの作成とAPIを別々に理解しています。しかし、私はこの仕事(フォルダ構造)が

\app 
\app\controllers 
\app\... models views etc 
\api\app\controllers 
\api\app\.. models views etc 

だから私はリンクを使用することができます、彼らは、例えば、(より良い用語の欠如のために)同じパッケージ

の一部になりたいですhttp:\\localhost\customers\1またはhttp:\\localhost\api\customers\1

この方法では、APIを公開できますが、Webアプリケーションと同じデータモデルを使用できます。

また、私はこの問題について間違ったやり方をしていますが、明らかに良い方法がありますか?

私は違いがある場合はレール3を使用していますが、これを解決する方法をもっと探しています。私はarchitecture-overflow.com :)

答えて

2

あなたはこのために、名前空間のルーティング機能を使用することができますを見つけることができませんでした:

app/controllers/customer_controller.rb 
app/controllers/api/customer_controller.rb 
app/models/customer.rb 
app/views/customers/index.html.erb 
app/views/api/customers/index.json.erb 
... etc ... 
2

namespace :api do 
    resources :customers 
end 

resources :customers 

これは、アプリ内のディレクトリを持つことができるようになる。このようにマッピングされました

これは非常に興味深い問題であり、我々のアプリケーションでも解決しようとしました。この(まだ)標準的な 'Rails'のようには見えません。

私たちはAPIを介して公開したいすべてのリソースに対して、新しいAPIコントローラを作成しました。この背後にある

推論:

  • エラー処理UIとAPIの間では異なります
    • UI:リダイレクトかどうか、および情報のフラッシュに
    • APIを示します。明確なエラーコードを返すと、 xml/jsonのメッセージ
  • APIのコードはほとんどの場合単純ですが、エラーハンドリングはより複雑です。なぜなら、パラメータは3番目のパーティー
  • UIのコードはUI(ない純粋なリソース)に表示するさまざまなソースからデータを収集する必要がある場合があります(詳細は間違って行くことができる)
  • 一部重複
ありますが、コードは、明確です

ほとんどの複製は、モデルを再利用することによって処理されます。 良い方法があるかどうかは完全にはわかりませんが、私にとってはこれは良いアプローチのように感じます。

今私たちのAPIは純粋なxmlであり、私たちのAPIがxmlオブジェクトとjsonオブジェクトをきれいにレンダリングできるようにするために苦労しています。 APIのリソースとして提示されているモデルはすべて、特定のto_xmlメソッド(列を選択し、関連リソースへのリンクをレンダリングする)を持っています。

これが役に立ちます。

+0

これは良いアプローチのようです。私はそれを行くだろう:) – PostMan

0

あなたは今、あなたは上記のような名前のAPIのネストされたフォルダを使用して各コントローラとビューを作成するには、この

namespace :api, defaults: {format: 'json'} do 
    resources :stores do 
     collection do 
     post :check_token 
     end 
    end 
    end 

のようなRESTfulなAPIを作成することができます。