如何在葡萄API的应用程序拆分的事情了?(How to split things up in a g

2019-08-16 23:28发布

在每一个例子我看到,人们只实现一个巨大的api.rb文件。 例如:

  • intridea /葡萄
  • bloudraak /葡萄样品博客-API
  • djones /葡萄巨人-示例

虽然这种方法细如,它可以迅速变得拥挤,难以维持,所以我想在我的应用程序的东西分开。

举例来说,我想从我的资源分割我的实体,然后不同的文件之间的分裂我的资源。 举些例子:

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

应用程序/ API /实体/ post.rb会是这样的:

module Blog
  module Entities
    class Post < Grape::Entity
      root 'posts', 'posts'
      expose :id
      expose :content
    end
  end
end

应用程序/ API /资源/ 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定义帖子


SOLUTION(感谢分贝。和我的同事)

你必须结构更改为类似:

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应该工作:)

Answer 1:

在post.rb类应该是后,没有API。 然后你就可以安装类的API里面的邮政API。

class API < Grape::API
  mount Blog::Post => '/'
end

为了避免混淆,我把帖子在资源的命名空间,也或将其重命名为PostAPI。



Answer 2:

我发现它不工作的路径前缀:

mount Blog::Post => '/blog'

如果你想有前缀的路径是行不通的。

使用

namespace :blog do
   mount Blog::Post
end

希望能帮助到你!



文章来源: How to split things up in a grape api app?