加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 如何拆分葡萄api应用程序?

发布时间:2020-12-16 19:41:06 所属栏目:百科 来源:网络整理
导读:在我看到的每个例子中,人们只能实现一个巨大的api.rb文件.例如: intridea/grape bloudraak/grape-sample-blog-api djones/grape-goliath-example 虽然这种方法工作正常,它可以很快变得拥挤和难以维护,所以我想拆分我的应用程序. 例如,我想从我的资源中拆分
在我看到的每个例子中,人们只能实现一个巨大的api.rb文件.例如:

> intridea/grape
> bloudraak/grape-sample-blog-api
> djones/grape-goliath-example

虽然这种方法工作正常,它可以很快变得拥挤和难以维护,所以我想拆分我的应用程序.

例如,我想从我的资源中拆分实体,然后在不同的文件之间分割我的资源.例如:

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

当我们这样做时,我们会遇到以下消息:

Expected /blog-app/api/resources/post.rb to define Post

解决方案(感谢dB.和我的同事)

您必须将结构更改为:

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

解决方法

post.rb中的类应该是Post,而不是API.那么你可以在类API中装载Post API.
class API < Grape::API
  mount Blog::Post => '/'
end

为了避免混淆,我将Post发布在Resources命名空间中,或者将其重命名为PostAPI.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读