LoginSignup
4
6

More than 5 years have passed since last update.

grapeでapiのversion管理

Posted at

はじめに

ruby on railsでRESTfulなapiを作成するのにgrapeを使った際に
apiのversionを管理する方法について書きます。

要件

  1. ディレクトリでversion毎のコードを分けたい。(写真参照)
  2. モジュールの設定をなるべくわかりやすくしたい。 スクリーンショット 2015-11-30 18.38.23.png

実現方法概要

  1. MyAPIモジュールというapiを管理するモジュール
  2. MyApi::API(api.rb)というクラスをベースとして、v1やv2をマウントする。
  3. MyApi::APIクラスにて共通の処理をヘルパーに入れる。
  4. v1.rb or v2.rbでそれぞれのバージョンで利用するapiをマウントする。
  5. /v1 or /v2にそれぞれのバージョンで使うapiのソースコードを置く

ソース

config/routes.rb
Rails.application.routes.draw do
  mount MyApi::API => '/'
end
app/api/my_api/v1(v2).rb
module MyApi
  class V1 < Grape::API
    prefix 'api'
    format :json
    default_format :json
    version 'v1', using: :path
    default_error_status :'500'

    mount Dummy
  end
end
app/api/my_api/v1(v2)/dummy.rb
class MyApi::V1::Dummy < Grape::API
  #http://qiita.com/yimajo/items/d4f484deda7cb9f61a49
  format :json

  resource :versions do
    get do
      'version 1'
    end
  end
end

注意点

注意点というか、まだrails始めたばかりでモジュールとかよくわかってなくてハマったこと。
モジュール構造はディレクトリ構造と紐づけないと動かない。
例えば、上記においてmy_apiディレクトリを用意せずその他すべてを/app/api直下に置いた場合
uninitialized constant MyApi (NameError)
というエラーで$rails sがエラーになる。
モジュールとかの参考ページ

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6