Rails Grape api版本控制模块结构

时间:2013-12-12 17:24:09

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

我正在尝试实现api版本控制,几乎与I've done here相同。但我似乎没有在rails应用程序中获得模块/文件夹结构,因为我收到错误消息,如V1 is not a module /app/api/v1/xml_responses/device.rb:3:in '<module:API>' 目录结构

/app
  /api
    - api.rb
    /v1
      -base.rb
      /xml_responces
        - device.rb

api.rb

require 'v1/base.rb'
module  API
  class Base < Grape::API
    mount API::V1 => '/v1/'
  end
end

V1 / base.rb

module API
  module V1
  class ApiV1 < Grape::API
    require 'builder'
    helpers DeviceMethods
    prefix 'api'
    version 'v1', using: :header
  end
  end
end

V1 / xml_responses / device.rb

module API
  module V1
    module XMLResponses::Device
      def self.do_something
        #do_something
      end
    end
  end
end

的routes.rb

  mount API::Base => '/'

我无法弄清楚我做错了什么!你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

确保在application.rb

中包含此行
config.paths.add "app/api", glob: "**/*.rb"
config.autoload_paths += Dir["#{Rails.root}/app/api/*"]

如葡萄维基here.

所示

答案 1 :(得分:0)

我遇到了类似的问题,但后来偶然发现了这篇伟大的帖子,这篇文章帮助我开始工作,并提供了比我在其他地方找到的更完整的信息。见http://funonrails.com/2014/03/building-restful-api-using-grape-in-rails/

看看你的代码,这看起来很有趣:

module XMLResponses::Device
  def self.do_something

你的意思是做这样的事情吗?

module API
  module V1
    module XMLResponses
      class Device < Grape::API
        resource :device do
          get do { Device.all } # Or whatever
        end
      end
    end
  end
end