SORU
9 Mart 2012, Cuma


API Raylar için Sürüm oluşturma Yolları

Şerit gibi benim API sürümü için çalışıyorum. Aşağıda 2 en son API sürümü verilir.

/api/users /api/v2/users 301 verir

/api/v1/users Sürüm 1 200 kullanıcıları için bir dizin verir

/api/v3/users /api/v2/users 301 verir

/api/asdf/users /api/v2/users 301 verir

Sürüm belirtmeyen bu temelde bir şey belirtilen sürümü mevcut değilse, en son bağlantılar, böylece daha sonra onu yönlendir.

Bu ben şimdiye kadar ne var:

scope 'api', :format => :json do
  scope 'v:api_version', :api_version => /[12]/ do
    resources :users
  end

  match '/*path', :to => redirect { |params| "/api/v2/#{params[:path]}" }
end

CEVAP
9 Mart 2012, Cuma


The original form of this answer is wildly different, and can be found here. Sadece bir şeyi yapmanın birden fazla yolu olduğunun açık bir kanıtı.

Ad kullanın ve 301 yönlendirmeleri kullanmak 302 varsayılan yerine bu yana cevap güncelledik. Teşekkürler pixeltrix ve Bo şeyleri isteyen için Jeanes.


Bir giymek isteyebilirsinizgerçektenbu nedenle güçlü bir kaskaklınızı başınızdan.

Raylar 3 yönlendirme API süper kötü. API için yollar, senin limitin yüzde olarak yazmak için, sadece buna ihtiyacınız var:

namespace :api do
  namespace :v1 do
    resources :users
  end

  namespace :v2 do
    resources :users
  end
  match 'v:api/*path', :to => redirect("/api/v2/%{path}")
  match '*path', :to => redirect("/api/v2/%{path}")
end

Eğer aklın hala bu noktadan sonra sağlam kalırsa, açıklamama izin ver.

İlk olarak, kullanışlı güzergah benzer isimli özel bir yol ve bir modül için kapsamlı bir avuç istediğiniz zaman için süper olan namespace diyoruz. Bu durumda, istediğimiz yolları iç engellemek için namespace için kapsamlı denetleyicileri içinde Api modül ve tüm istekleri için yollar içinde bu yol olacak öneki api. Biliyorsun /api/v2/users gibi bir isteğin var mı?

Ad içinde, biz iki ad (woah!) tanımlayın. Bu sefer "" burada denetleyicileri için tüm yolları V1 modülün içinde olacak ad, Api modülün içinde: Api::V1. v1 tanımlama yapıyoruz Bu rota içinde resources :users tanımlayarak, denetleyici Api::V1::UsersController de yer alacak. Bu /api/v1/users gibi 1, ve orada isteklerini yaparak elde sürümüdür.

Sürüm 2 yalnızca birküçükbiraz farklı. Denetleyici Api::V1::UsersController, olmak, hizmet vermek yerine, şimdi Api::V2::UsersController. Orada /api/v2/users gibi isteklerini yaparak.

Sonraki, match bir kullanılır. Bu /api/v3/users gibi şeyler için gitmek tüm API yolları maç olacak.

Bu kadar bakmak zorunda kaldı parçasıdır. :to => seçeneği belirlemenizi sağlar bu bir özel istek olmalı yönlendirilen başka bir yerde olduğunu öğrendim o kadar ... ama ben bilmiyordum bunu nereden yönlendirmek için başka bir yere geçmek ve bir parça orijinal isteği ile birlikte.

Bunu yapmak için, redirect yöntemi diyoruz ve bu özel-aralıklı %{path} bir parametre bir dize geçmek. Ne zaman bir istek gelir o maçlar bu son match olacaktır açılıyor path parametre konumu %{path} içinde dize ve yönlendirme kullanıcı için nereye gitmeliyiz.

Son olarak, rota için match başka kalan tüm yolları /api ile öneki kullanın ve /api/v2/%{path} onları yönlendirmek. Bu /api/users gibi istekleri /api/v2/users gidecek demektir.

/api/asdf/users maçı nasıl çözemedim, çünkü eğer o /api/<resource>/<identifier> /api/<version>/<resource> için bir talep olması gerekiyorsa belirliyorsunuz?

Her neyse, bu araştırma için eğlenceli oldu ve sana yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • amc

    amc

    21 EYLÜL 2005
  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006