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类.任何帮助将非常感激.
在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目录自动加载文件,因此您不必要求它们.
| 归档时间: |
|
| 查看次数: |
3673 次 |
| 最近记录: |