2011-11-15 16 views
6

Bir API oluşturmak istediğim bir Rails 3.1 uygulamasına sahibim. İlki, normal istekleri ve benim API şeyler için açıkça diğer olurduRaylar 3.1 API Yolları

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

: Ben URL'ler gibi bir şey bakmak istiyorum. Her ikisinin de aynı denetleyiciye/eyleme eşleşmesini istiyorum.

Uygulamamı, api alt etki alanındayken yalnızca www ve json, xml vb. Durumlarda HTML'ye yanıt verecek şekilde nasıl kurarım?

+3

Harici olarak kullanılacak bir API oluşturmayı düşünüyorsanız, ayrı denetleyicileri kullanmanız önerilir. Hata işleme, bir API ve UI için tamamen farklıdır. Ayrıca istisnaları ele almak bizim için tamamen farklı. Bir API yöntemi bir istisna tetiklerse, onu xml olarak biçimlendirir ve doğru HTTP durumuyla döndürürüz. – nathanvda

cevap

21

Rails 3 yönlendirme kısıtlamalarını kullanmanın en kolay yolu (imo) olacaktır. config/routes.rb olarak, kullanın:

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 

Ayrıca çok daha kolay geleneksel ile daha birden çok formatta cevap denetleyicileri yazmak için yapar (sınıf düzeyinde ve respond_to) bir respond_with içine bir görünüme sahip olması isteyebilirsiniz cevap ver.

3

Check #221 Subdomains in Rails 3 Raylar Döküm. Www için ek kontrendikasyon koyabilirsiniz ": format =>: html". Başka bir çözüm de request.subdomain ve params [: format] 'ı kontrol eden kontrolör filtresi kullanıyor olabilir. Daha sonra rotaları çoğaltmanıza gerek yoktur.