Question

Je suis en train d'appeler la version de classes spécifiques pour de version de l'api(rails-raisin) et obtenez l'erreur

 NameError (uninitialized constant API::V1::XMLResponses):
09:23:36 web.1     |   app/api/v1/base.rb 

ma structure de répertoire

app/
  api/
    v1/
      xmlresponses/
         phonebook.rb   
      api.rb
    v2/
      xmlresponses/ 
      api.rb
    api.rb

l'api.rb besoin d'un v1/base.rb' besoin d'un v2/base.rb'

module  API
  class Base < Grape::API
    mount API::V1 => '/'
    mount API::V2 => '/v2/'
  end
end

dans v1/base.rb-je accéder à des classes pour cette version de l'api

V1::XMLResponses::Annuaire::getall()

S'il vous plaît, pourriez-vous me dire pourquoi j'ai cette erreur?

Merci pour votre réponse, j'ai créé application simple qui montre comment c'est fait https://github.com/Asmmund/grape_versioning

Était-ce utile?

La solution

Il pourrait être tout simplement quelque chose de mal dans votre structure de module.Peut-être un manque require.

Je voudrais écrire quelque chose comme ceci:

/foo
  v1/
  |_ responses/
  |  |_ time.rb
  |
  |_ base.rb

  v2/
  |  
  |_ base.rb

  api.rb
  config.ru

Les fichiers:

# api.rb`

require 'grape'
require './v1/base.rb'
require './v2/base.rb'

module FooBar
  module API
    class Base < Grape::API
      mount API::V1 => '/'
      mount API::V2 => '/v2/'
    end
  end
end


# v1/base.rb
require_relative './responses/time.rb'

module FooBar
  module API
    class V1 < Grape::API
      get 'foo' do
        "foo"
      end
      get 'time' do
        API::Responses::Time.api_time
      end
    end
  end
end

# v1/responses/time.rb
module FooBar
  module API
    module Responses
      class Time
        def self.api_time
          "API time"
        end
      end
    end
  end
end

# v2/base.rb
module FooBar
  module API
    class V2 < Grape::API
      get 'bar' do
        "bar"
      end
    end
  end
end

Puis dans config.ru

# config.ru
require './api.rb'
run FooBar::API::Base

Exécuter avec:

thin start
...
curl 0.0.0.0:3000/foo
=> foo
curl 0.0.0.0:3000/v2/bar
=> bar
curl 0.0.0.0:3000/time
=> API time
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top