无法在Rails中安装多个Grape API

And*_*rew 3 ruby rack module ruby-on-rails grape-api

我有两个API,我试图在我的Rails应用程序中安装 - 一个名为'v1',另一个名为'twilio'.每个API都将由多个文件组成,因此我希望每个文件都有自己的文件夹.在我的app/api目录中,我有2个文件夹 - 'v1'和'twilio' - 以及一个名为'api.rb'的文件,我试图用它来安装两个api.它的内容是:

module API
  class V1 < Grape::API
    prefix "api"
    format :json
    mount API::Root => '/v1'
  end

  class Twilio < Grape::API
    prefix "twilio"
    format :xml
    mount API::Twilio_API => '/twilio'
  end
end
Run Code Online (Sandbox Code Playgroud)

在'v1'目录中,我有一个名为'root.rb'的文件,其开头如下:

module API
  class Root < Grape::API
    version 'v1', :using => :header
    ...
Run Code Online (Sandbox Code Playgroud)

在'twilio'目录中,我有一个名为'twilio_api.rb'的文件,其开头为:

module API
  class Twilio_API < Grape::API
    version 'v1', :using => :header
    ...
Run Code Online (Sandbox Code Playgroud)

我的路线文件有:

mount API::V1 => "/"
mount API::Twilio => "/"
Run Code Online (Sandbox Code Playgroud)

当我启动我的rails服务器时,我收到错误:

`load_missing_constant': Expected [My rails app]/app/api/v1/root.rb to define Root (LoadError)
Run Code Online (Sandbox Code Playgroud)

我不明白这一点,因为root.rb肯定会定义Root类.任何帮助将非常感激.

Mar*_*kac 6

在Grape中,您可以在另一个API中安装多个API.这意味着您可以为API创建一个"基础"类,并将所有其他类安装到其中.

文件结构:

app/
  api/
    v1/
      v1_api.rb
    twilio/
      twilio_api.rb
    api.rb
Run Code Online (Sandbox Code Playgroud)

应用程序/ API/api.rb:

require 'v1/v1_api'
require 'twilio/twilio_api'

module API
  class Base < Grape::API
    mount API::V1
    mount API::Twilio
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序/ API/V1/v1_api.rb:

module API
  class V1 < Grape::API
    prefix "v1"
    format :json

    get :hello do
      { text: 'Hello from V1' }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序/ API/twilio/twilio.rb:

module API
  class Twilio < Grape::API
    prefix "twilio"
    format :xml

    get :hello do
      { text: 'Hello from Twilio' }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

配置/ routes.rb文件:

mount API::Base => '/api'
Run Code Online (Sandbox Code Playgroud)

重新启动rails服务器,你很高兴.此外,您应该可以轻松地从app/api/twilio和app/api/v1目录自动加载文件,因此您不必要求它们.