首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >葡萄API +葡萄花式版本控制问题

葡萄API +葡萄花式版本控制问题
EN

Stack Overflow用户
提问于 2018-07-25 05:13:30
回答 1查看 536关注 0票数 0

尝试采取一个不版本的葡萄+ Rails API,并将其分解为v1和v2,并遵循了网上发布的几种不同的模式。但我不能很好地让它正常工作。当我需要获得这些傲慢的文档时,我总是会收到这个毫无帮助的错误:

无法从doc读取swagger JSON

我不知道这是从哪里来的,无论是从我的葡萄API结构,路线,还是什么与昂首阔步。我做错了什么?

宝石是:

代码语言:javascript
复制
gem 'grape'
gem 'grape-entity'
gem 'grape-swagger'
gem 'grape-swagger-ui'

文件结构:

代码语言:javascript
复制
app/
  api/
    v1/
      api.rb
      calendars.rb
      schedule_cycles.rb
      scheduled_events.rb
    v2/
      api.rb
      calendars.rb
      schedule_cycles.rb
      scheduled_events.rb
    api.rb

app/api/api.rb:

代码语言:javascript
复制
Dir[File.dirname(__FILE__) + '/v1/*.rb'].each do |file| 
  require file
end

Dir[File.dirname(__FILE__) + '/v2/*.rb'].each do |file| 
  require file
end

module API
  class Root < Grape::API
    prefix 'api'
    mount API::V1::Root 
    mount API::V2::Root

    add_swagger_documentation
  end
end

app/api/v1/api.rb:

代码语言:javascript
复制
Dir[File.dirname(__FILE__) + '/*.rb'].each do |file| 
  require file
end

module API
    module V1
      class Root < Grape::API
        prefix 'v1'
        mount API::V1::Calendars
        mount API::V1::ScheduleCycles
        mount API::V1::ScheduledEvents
      end
    end
end

app/api/v2/api.rb:

代码语言:javascript
复制
Dir[File.dirname(__FILE__) + '/*.rb'].each do |file| 
  require file
end

module API
    module V2
      class Root < Grape::API
        mount API::V2::Calendars
        mount API::V2::ScheduleCycles
        mount API::V2::ScheduledEvents
      end
    end
end

config/routes.rb:

代码语言:javascript
复制
Rails.application.routes.draw do
    mount API::Root => '/'

    namespace :api do
      namespace :v1 do

            resources :calendars do
                resources :schedule_cycles
                resources :scheduled_events
            end

        end
    end

    namespace :api do
      namespace :v2 do

            resources :calendars do
                resources :schedule_cycles
                resources :scheduled_events
            end

        end
    end

end

然后,我的实际Grape类遵循如下格式,来自app/api/v1/schedule_cycles.rb:

代码语言:javascript
复制
module API
    module V1       
        class ScheduleCycles < Grape::API
            # configure whether it's developers only here
          helpers ApiHelpers::AuthenticationHelper
          # before { restrict_access_to_developers }
          before { authenticate! }

          format :json

            # ScheduleCycle endpoints here
          desc 'End-points for ScheduleCycles'
          namespace :schedule_cycles do
            desc 'Retrieve schedule_cycles'
            params do
              requires :token, type: String, desc: 'user token'
            end
            get do
                schedule_cycles = ScheduleCycle.all
                present schedule_cycles, with: Entities::ScheduleCycleEntity
            end

..

  end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 21:20:54

我弄明白了这一点,并且在贴出对我有用的东西,以防其他人发现它有用。这真的只是一个摆在面前的问题。首先,我需要将add_swagger_documentation移动到实际版本的Root类,而不是在父Root类中,其次,我需要为swagger添加api_version参数。我还将prefix参数移到这些版本类中。其结果是:

app/api/api.rb:

代码语言:javascript
复制
Dir[File.dirname(__FILE__) + '/v1/*.rb'].each do |file| 
  require file
end

Dir[File.dirname(__FILE__) + '/v2/*.rb'].each do |file| 
  require file
end

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

app/api/v1/api.rb:

代码语言:javascript
复制
Dir[File.dirname(__FILE__) + '/*.rb'].each do |file| 
  require file
end

module API
    module V1
      class Root < Grape::API
        prefix 'api/v1'

        mount API::V1::Calendars
        mount API::V1::ScheduleCycles
        mount API::V1::ScheduledEvents

        add_swagger_documentation api_version: 'v1'
      end
    end
end

app/api/v2/api.rb:

代码语言:javascript
复制
Dir[File.dirname(__FILE__) + '/*.rb'].each do |file| 
  require file
end

module API
    module V2
      class Root < Grape::API
        prefix 'api/v2'

        mount API::V2::Calendars
        mount API::V2::ScheduleCycles
        mount API::V2::ScheduledEvents

        add_swagger_documentation api_version: 'v2'
      end
    end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51511215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档