2014-03-05 [長年日記]
_ versioncake gem
APIを提供するアプリをRailsで作るので、APIバージョン管理に versioncake gem を使ってみることにした。(@hsbt さんに教えてもらった。thanks!)バージョンごとに json view ファイルを分割できるので便利。gemを使うほどかなー、とも思ったけど、どのくらい便利か試しに使ってみる。Rails4.1RC1で動作確認済。
早わかり
-
こんなURLでアクセスできるようになる(他にもパラメータでバージョン指定したりもできる)
-
view 以下にこのようにファイルを置いていく。アクセスされたAPIバージョンview がない場合、自動で最近のものを使う。(=viewが変更なければ変更不要)
- app/views/api/dummy/index.json.v1.jbuilder
- app/views/api/dummy/index.json.v2.jbuilder
-
controller は /api 以下に入れて、Api モジュールの中に入れるようにした
- 例: app/controllers/api/dummy_controller.rb , class Api::DummyController < ApplicationController
-
controller でアクセスされたバージョンを知るには derived_version を使う
Rails.logger.info "upper version v3!" if derived_version >= 3
- routes
# for versioncake gem
namespace :api do
scope 'v:api_version' do # Example: /v1/
get '/dummy/dummy' => 'dummy#index'
end
end
controller の中でAPIものはまとめてApiモジュールの中に入れるためにnamespace :api にしている。
- config/application.rb
module Appname
class Application < Rails::Application
# versioncake gem setting
config.versioncake.extraction_strategy = :path_parameter # /api/v1/ のようにバージョン情報をパスに入れる設定
config.versioncake.supported_version_numbers = (1...4) # 古いAPIバージョンを制限する場合などに使う