2016-07-18 7 views
1

API 용으로 grape을 사용하는 Rails 앱을 만들고 있습니다. 현재 루트 폴더에 마운트 된 단일 버전의 API가 있습니다 (v1이 아님). v2을 생성해야합니다.버전없는 포도 API 버전 번호

/app/api/api.rb :

module API 
    class Base < Grape::API 
    logger Rails.logger 

    mount API::Things   => '/things' 
end 

를하고 내가 좋아하는 뭔가 /app/api/api/things.rb을 다음과 같이 현재 버전은 장착

module API 
    class Things < Grape::API 
    get '/' do 
    end 
    end 
end 

기본적으로, API는 하드 코드 된 경로 /api/things에 장착된다. 다음과 같이해야합니다 :

  • 경로를 변경하지 않고이 API를 v1으로 만듭니다.
  • v2 경로를 만듭니다.

그래서, 난 할 api.rb을 변경 :

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

다음과 같이 api/api/v1/base.rb을 만들어 : 다음

module API 
    module V1 
    class Base < Grape::API 
     version 'v1', using: :accept_version_header 

     mount API::Things   => '/things' 
    end 
    end 
end 

과 같은 v2을 위해 :

module API 
    module V2 
    class Base < Grape::API 
     version 'v2' 

     mount API::V2::Things   => '/things' 
    end 
    end 
end 

내 문제를 그게입니다.은 예상대로 경로 구성 요소를 /v2 상속하지 않습니다. 따라서 v1/things에 탑재되어 있으므로 v2은 거기에 탑재되지 않습니다. v1 그대로

내가 v2를 작성하는 경우

resources 대신 경로를 사용하고, 작동,하지만 난 v1v2이 일치하도록 그대로 마운트를 유지하고 싶습니다.

답변

0

난 당신이 V2 오른쪽 견적을 작성하지 맞춤법이 틀린 것 같아요 -> 당신은 API :: 것들 '로 마운트'

그것은 또한에 의해 맡았다 될 수도 ... ''v2`이 아닌 'V2가 API::을 생략하고 'mount things'이라고 쓰고 싶을 수도 있습니다.

+0

여기에 맞춤법이 틀립니다 (방금 고정했습니다). 실제 코드는 괜찮습니다. – pgb

+0

충분합니다. API 생략 : 시도 했습니까? –

+0

예. 같은 문제. 'v2'는'/ v2/things' 대신에'/ things/v2' 경로를 만드는 것 같습니다. – pgb