2011-11-15 15 views
6

APIを作成したいRails 3.1アプリケーションがあります。私は自分のURLを次のように見せたい:Rails 3.1 APIルート

www.example.com/controller/action // Normal Web requests 
api.example.com/controller/action.json // API requests 

最初のものは通常のリクエスト用、もう1つは明らかに私のAPI用です。これらの両方を同じコントローラ/アクションにマッピングすることをお勧めします。

apiサブドメインにいるときに、wwwやjson、xmlなどでHTMLにしか応答しないようにアプリケーションを設定するにはどうすればよいですか?

+3

外部で使用するAPIを作成する場合は、別のコントローラを使用することをお勧めします。エラー処理は、APIとUIでは全く異なります。例外を処理することも、まったく違うのです。 APIメソッドが例外をトリガする場合、それをxmlにフォーマットし、正しいHTTP状態で返します。 – nathanvda

答えて

21

最も簡単な方法(imo)は、Rails 3ルーティング制約を使用することです。 config/routes.rbを、使用時には:

constraints :subdomain => 'www', :format => :html do 
    # Routing for normal web requests 
    match 'mycontroller/:action' => 'mycontroller#index' 
    # ... 
end 

constraints :subdomain => 'api', :format => :json do 
    # Routing for API requests 
    match 'mycontroller/:action.:format' => 'mycontroller#index' 
    # ... 
end 

また、(クラスレベルでとrespond_to)respond_withに顔をしているしたい場合があります、それははるかに簡単伝統を持つよりも、複数のフォーマットへの対応のコントローラを書くことができましたに対応する。

3

チェック#221 Subdomains in Rails 3レールキャスト。 wwwの場合は、追加contstraint ":format =>:html"を付けることができます。 もう1つの解決策は、request.subdomainとparams [:format]をチェックするコントローラフィルタを使用することです。次に、ルートを複製する必要はありません。