Rails, kutudan RESTful kaynaklarla geliyor, ancak bunları gerçek genel API'niz için kullanıyor musunuz? Eğer öyleyse, API'nızın versiyonunu nasıl yapabilirdiniz? example.com/api/v2/foo/bar
?Raylar üzerinde RESTful bir kamu API'sı tasarlamak için en iyi yöntemler nelerdir?
cevap
Genelde, uygulamalarımın API'leri gerçekten HTML arayüzünü oluşturan kaynaklarda oluşturulmuştur. Bazıları için (ben değil), bu sadece scaffold üretecinden çıkan kodu kullanıyor olabilir - ancak özel yazmam veya jeneratörü kullanmama izin verip vermeme bakılmaksızın, kaynakları yalnızca programatik olarak gösterdiğim çok az örnek var. API ve son kullanıcı görünümüne değil.
Sürüm oluşturma, şimdiye kadar oluşturduğum uygulamalar için bir sorun olmadı, ancak bunu uygulamak için iki yol düşünebilirim.
1) Eğer bu durumda kontrol ünitesine erişim işleme oluşmaya belirtmek için bir parametre set önek 'v1' 'v2' vb ile yolları ekleyebilirsiniz: rotalara
. rb:
posts_controller.rbclass PostsController < ApplicationController
def index
respond_to do |format|
format.xml do
if params[:version] == 'v1'
# ...
else
# ...
end
end
end
end
end
2) Ayrıca, her bir versiyonu için özel yanıt biçimi eklemeyi düşünebilirsiniz içinde
map.resources :posts, :path_prefix => '/:version'
başlatıcılar
/mime_types.rb posts_controller.rb içinde
Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2
class PostsController < ApplicationController
def index
respond_to do |format|
format.v1 do
# ...
end
format.v2 do
# ...
end
end
end
end
eski size example.com/v1/posts.xml ve example.com/v2/ gibi URL'leri verecekti posts.xml; ikincisi size example.com/posts.v1 ve example.com/posts.v2 gibi URL'leri verirdi.
Gerçek iş mantığının farklı olup olmadığını belirlemek için başka bir seçenek de, isim verilen yolları kullanmak olurdu. – Kris