В каждом примере, который я вижу, люди реализуют только один гигантский файл api.rb. Пример:
Несмотря на то, что этот подход работает отлично, он может быстро стать переполненным и сложным в обслуживании, поэтому я хотел бы разделить вещи на своем приложении.
Например, я хотел бы разделить свои объекты с моими ресурсами, а затем разделить ресурсы между разными файлами. Примеры:
app
- api
api.rb
- entities
- weblog.rb
- post.rb
- comment.rb
- resources
- weblog.rb
- post.rb
- comment.rb
Теперь api.rb будет выглядеть примерно так:
require 'grape'
module Blog
class API < Grape::API
prefix "api"
end
end
app/api/entities/post.rb будет выглядеть примерно так:
module Blog
module Entities
class Post < Grape::Entity
root 'posts', 'posts'
expose :id
expose :content
end
end
end
app/api/resources/post.rb будет выглядеть примерно так:
module Blog
class API < Grape::API
resource :posts do
get do
present Post.all, with: Blog::Entities::Post
end
desc "returns the payment method corresponding to a certain id"
params do
requires :id, :type => Integer, :desc => "Post id."
end
get ':id' do
present Post.find(params[:id]), with: Blog::Entities::Post
end
end
end
end
Когда мы это сделаем, мы сталкиваемся со следующим сообщением:
Ожидаемый/blog-app/api/resources/post.rb для определения Post
РЕШЕНИЕ (благодаря дБ и моим сотрудникам)
Вам нужно изменить структуру на что-то вроде:
app
- api
api.rb
- resources
- post_api.rb
Затем в post_api.rb
module Blog
class Resources::PostAPI < Grape::API
resource :posts do
get do
present Post.all
end
end
end
end
Наконец, api.rb становится:
require 'grape'
module Blog
class API < Grape::API
prefix 'api'
version 'v1', :using => :path
format :json
mount Blog::Resources::PostAPI => '/'
end
end
Теперь /api/v1/posts
должен работать:)