2013-07-12 5 views
3

포도에 API를 쓰고 있지만, Rails 나 Sinatra 등이 없어도 혼자입니다. app.rb 파일을 별도의 파일로 분할하고 싶습니다. 나는 How to split things up in a grape api app?을 보았습니다.하지만 그것은 레일즈와 같습니다.다른 파일로 분할 된 포도 API (non-Rails)

모듈이나 클래스로이 작업을 수행하는 방법을 잘 모르겠습니다. 다른 파일을 큰 서브 클래스로 서브 클래 싱하려고했으나 추한 것이므로 올바르게 작동하는지조차 알지 못합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

현재 폴더별로 분할 된 버전이 있습니다 (v1, v2 등). 그게 전부입니다.

답변

5

주 앱에서 하위 클래스를 만들 필요가 없습니다. 주 앱 내에 별도의 Grape :: API 하위 클래스를 마운트 할 수 있습니다. 물론 이러한 클래스를 별도의 파일로 정의하고 require을 사용하여 필요한 모든 경로, 엔터티 및 도우미를로드 할 수 있습니다.

# I put the big list of requires in another file . . 
    require 'base_requires' 

    class MyApp < Grape::API 
    prefix  'api' 
    version  'v2' 
    format  :json 

    # Helpers are modules which can have their own files of course 
    helpers APIAuthorisation 

    # Each of these routes deals with a particular sort of API object 
    group(:foo) { mount APIRoutes::Foo } 
    group(:bar) { mount APIRoutes::Bar } 
    end 

나는 상당히 임의의 폴더에있는 파일을 정렬 :

# Each file here defines a subclass of Grape::API 
/routes/foo.rb 

# Each file here defines a subclass of Grape::Entity 
/entities/foo.rb 

# Files here marshal together functions from gems, the model and elsewhere for easy use 
/helpers/authorise.rb 
나는 그것이 유용 "도메인 개체"당 하나의 미니 응용 프로그램을 작성하고 다음과 같이 보이는 app.rb 사람들을,로드 발견

난 아마 레일을 에뮬레이트하고 /models/ 폴더 또는 ActiveRecord 또는 DataMapper 정의를 보유하고 비슷한가 발생하지만 그게 내 현재 프로젝트의 다른 패턴에서 나를 위해 제공됩니다.

대부분의 경로는 매우 기본적인 것처럼 보입니다. 관련 경로는 관련 헬퍼 메소드를 호출 한 다음이를 기반으로 엔티티를 표시합니다. 예 : /routes/foo.rb은 다음과 같이 보일 수 있습니다 :

module APIRoutes 
    class Foo < Grape::API 
    helpers APIFooHelpers 

    get :all do 
     present get_all_users_foos, :with => APIEntity::Foo 
    end 

    group "id/:id" do 
     before do 
     @foo = Model::Foo.first(:id => params[:id]) 
     error_if_cannot_access! @foo 
     end 

     get do 
     present @foo, :with => APIEntity::Foo, :type => :full 
     end 

     put do 
     update_foo(@foo, params) 
     present @foo, :with => APIEntity::Foo, :type => :full 
     end 

     delete do 
     delete_foo @foo 
     true 
     end 
    end # group "id/:id" 
    end # class Foo 
end # module APIRoutes 
+0

이 'routes' 파일에는 포도가 필요합니까? – tekknolagi

+0

@tekknolgi :'Grape :: API' 서브 클래스를 정의하기 전에'grape '를 요구해야합니다. 그러나 모든 곳에서 그것을 반복하고 싶지 않으면'app.rb' 메인에있을 수 있습니다. –

+0

정의되지 않은 변수와 클래스 및 물건 때문에 오류가 발생하지 않습니까? – tekknolagi