Rails 4.0.4 と Grape 0.7.0 を使用して、次のように動作する REST API のスケルトンを作成しようとしています。
特定のバージョンで API を呼び出す:
$ curl -H Accept=application/vnd.acme-v1+json http://localhost:3000/api/a
“a-v1”
$ curl -H Accept=application/vnd.acme-v1+json http://localhost:3000/api/b
“b-v1”
デフォルトとして API を呼び出す:
$ curl http://localhost:3000/api/a
“a-v2”
$ curl http://localhost:3000/api/b
“b-v1”
$ curl http://localhost:3000/api/c
“c-v2”
私は試してきましたが、望ましい動作を得ることができませんでした。私のレールアプリには次のファイルがありました。
アプリ/api/api.rb
require 'grape'
require 'api_v1.rb'
require 'api_v2.rb'
module API
class Base < Grape::API
mount API::V2
mount API::V1
end
end
アプリ/api/api_v1.rb
require 'grape'
module API
class V1 < Grape::API
version 'v1', using: :header, vendor: 'acme', format: :json
prefix 'api'
format :json
get :a do
"a-v1"
end
get :b do
"b-v1"
end
end
end
アプリ/api/api_v2.rb
require 'grape'
module API
class V2 < Grape::API
version ['v2', 'v1'], using: :header, vendor: 'acme', cascade: true
prefix 'api'
format :json
get :a do
"a-v2"
end
get :c do
"c-v2"
end
end
end
app/config/routes.rb
...
mount API::Base => '/'
...
上記のファイルを使用すると、curl コマンドで指定したバージョンに関係なく、デフォルトの動作が得られます。