Domanda

Sto cercando di chiamare le classi specifiche della versione per API con versione (rotaia-uva) e ottenere errori

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

La mia struttura di directory

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

API.RB richiedere 'v1 / base.rb' Richiedere 'v2 / base.rb'

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

in V1 / Base.rb I lezioni di accesso per questa versione di API

.

v1 :: xmlresponses :: rubrica :: getall ()

Per favore, potresti dirmi perché ottengo questo errore?

Grazie per la tua risposta, ho creato un'app semplice che dimostra come è fatto https://github.com/ASMMUND / GRAPE_VERSIONING

È stato utile?

Soluzione

Potrebbe essere semplicemente qualcosa di sbagliato nella struttura del modulo. Forse un require mancante.

Scrivo qualcosa del genere:

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

  v2/
  |  
  |_ base.rb

  api.rb
  config.ru
.

I file:

# 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
.

poi in config.ru

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

Run con:

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top