주 앱에서 하위 클래스를 만들 필요가 없습니다. 주 앱 내에 별도의 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
이 'routes' 파일에는 포도가 필요합니까? – tekknolagi
@tekknolgi :'Grape :: API' 서브 클래스를 정의하기 전에'grape '를 요구해야합니다. 그러나 모든 곳에서 그것을 반복하고 싶지 않으면'app.rb' 메인에있을 수 있습니다. –
정의되지 않은 변수와 클래스 및 물건 때문에 오류가 발생하지 않습니까? – tekknolagi