在Grape和Rails上按API版本更改视图模板

时间:2014-10-28 08:40:29

标签: ruby-on-rails api versioning grape grape-api

我正在使用他们的'版本'在Ruby on Rails 4.1上使用Grape gem构建Web API。功能

示例代码。

# app/api/api.rb
class API < Grape::API
  prefix 'api'
  format :json
  formatter :json, Grape::Formatter::Rabl
  default_format :json

  mount V1::Root
end

# app/api/v1/root.rb
module V1
  class Root < Grape::API
    version 'v1'
    resource :users, rabl: "users" do
      get '/' do
        @users = User.all
      end
    end
  end
end

# config/routes.rb
mount API => "/"

使用这些代码,app/views/api/users.rabl会根据请求http://localhost:3000/api/v1/users用于视图模板。

我想在app/views/api/v1中使用v1请求中的模板。有没有办法做到这一点?

电流

  • /api/v1/users - &gt; app/views/api/users.rabl
  • /api/v2/users - &gt; app/views/api/users.rabl

  • /api/v1/users - &gt; app/views/api/v1/users.rabl
  • /api/v2/users - &gt; app/views/api/v2/users.rabl

2 个答案:

答案 0 :(得分:0)

我正在使用Grape Entity:https://github.com/intridea/grape-entity

所以我在名为entities

的v1文件夹上创建了一个目录

例如: api/v1/entities/token_response_entity.rb

module ExampleAPI::V1::Entities
  class TokenResponseEntity < Grape::Entity
    expose :token , documentation: { type: 'string', desc: 'Token String' }
  end
end

因此,当我需要呈现时,我只需要使用:

present tokens, with: ExampleAPI::V1::Entities::TokenResponseEntity

答案 1 :(得分:0)

我终于采取了Jan的方式。

resource :users, rabl: "v1/users" do