RailsでRESTfulなパブリックAPIを設計するためのベストプラクティスは何ですか?
-
02-07-2019 - |
質問
Railsには、すぐに使用可能なRESTfulリソースが付属していますが、実際のパブリックAPIにそれらを使用していますか?もしそうなら、APIのバージョン管理をどのように達成しますか、つまり example.com/api/v2/foo/bar
?
解決
通常、私のアプリケーションのAPIは、実際にはHTMLインターフェースを構成する同じリソース上に構築されます。一部の人(私ではない)にとって、それは単にscaffoldジェネレーターから出てくるコードを使用している可能性がありますが、カスタムで記述するか、ジェネレーターで処理させるかに関わらず、リソースを公開するインスタンスはほとんどありませんエンドユーザービューではなく、プログラムAPIです。
これまでに作成したアプリケーションのバージョン管理は問題ではありませんでしたが、実装には2つの方法が考えられます。
1)プレフィックス「v1」、「v2」などのルートを追加し、コントローラーでアクセスして発生する処理を指定できるパラメーターを設定できます。
routes.rbの:
map.resources :posts, :path_prefix => '/:version'
posts_controller.rb
内class PostsController < ApplicationController
def index
respond_to do |format|
format.xml do
if params[:version] == 'v1'
# ...
else
# ...
end
end
end
end
end
2)バージョンごとにカスタム応答形式を追加することも検討できます
initializers / mime_types.rbで
Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2
posts_controller.rb
内class PostsController < ApplicationController
def index
respond_to do |format|
format.v1 do
# ...
end
format.v2 do
# ...
end
end
end
end
前者は、example.com / v1 / posts.xmlやexample.com/v2/posts.xmlなどのURLを提供します。後者は、example.com / posts.v1やexample.com/posts.v2などのURLを提供します
所属していません StackOverflow