葡萄版问题

时间:2014-12-09 22:00:00

标签: ruby rack grape

我有两个简单的API类:

class API::Root < Grape::API
    version 'v1', :using => :path

    mount API::Appointments => '/appointments'
end

class API::Appointments < API::Base
    get do
    end 
end

问题是API::Appointments生成路线:

GET        /appointments/v1

而不是

GET        /v1/appointments

这是假设的吗?我究竟做错了什么?版本路径组件不应该在任何其他路径组件之前与最终相反吗?

由于

1 个答案:

答案 0 :(得分:2)

从您提供的示例中,您的资源文件(约会)继承自root.rb文件,该文件使用:path来获取版本。此外,您使用mount API::Appointments => '/appointments'安装到路径,这非常类似于前缀,因此将为您的路由添加前缀/appointments,因此您看到的路线是您设置的。当我使用Grape对JSON api进行版本化时,我有一个基础root.rb类,它将挂载我的版本化API。

module API
  class Root < Grape::API
    mount API::V1::Root
  end
end

然后,对于每个其他API版本,我有另一个root.rb文件,然后为该特定API安装资源文件。

module API
  module V1
    class Root < Grape::API
      version 'v1' using: :path
      mount API::V1::Appointments
    end
  end
end

使用此结构,您可以拥有资源类

module API
  module V1
    class Appointments < Grape::API
      get do
      end 
    end
  end
end

它将被安装到路线/v1/appointments