Ruby on rails 3 如何在GrapeAPI应用程序中拆分内容?
在我看到的每个示例中,人们只实现一个巨大的api.rb文件。例:Ruby on rails 3 如何在GrapeAPI应用程序中拆分内容?,ruby-on-rails-3,api,grape-api,Ruby On Rails 3,Api,Grape Api,在我看到的每个示例中,人们只实现一个巨大的api.rb文件。例: 虽然这种方法可以很好地工作,但它很快就会变得拥挤,难以维护,所以我想在我的应用程序上进行拆分 例如,我想从资源中分割实体,然后在不同的文件中分割资源。例如: app - api api.rb - entities - weblog.rb - post.rb - comment.rb - resources - weblog.rb - post.rb
app
- api
api.rb
- entities
- weblog.rb
- post.rb
- comment.rb
- resources
- weblog.rb
- post.rb
- comment.rb
现在,api.rb将类似于:
app
- api
api.rb
- resources
- post_api.rb
需要“葡萄”
模块博客
类API
app/api/entities/post.rb类似于:
app
- api
api.rb
- resources
- post_api.rb
模块博客
模块实体
类Post
app/api/resources/post.rb类似于:
app
- api
api.rb
- resources
- post_api.rb
模块博客
类APIInteger,:desc=>Post id
结束
获取“:id”do
显示Post.find(params[:id]),带有:Blog::Entities::Post
结束
结束
结束
结束
当我们这样做时,我们会遇到以下信息:
需要/blog app/api/resources/post.rb来定义post
解决方案(感谢dB.和我的同事) 您必须将结构更改为:
app
- api
api.rb
- resources
- post_api.rb
然后,在post_api.rb中
模块博客
类资源::PostAPI
最后,api.rb变成:
需要“葡萄”
模块博客
类API:路径
格式:json
mount Blog::Resources::PostAPI=>'/'
结束
结束
现在
/api/v1/posts
应该可以工作:)post.rb中的类应该是post,而不是api。然后可以在类API中装入Post API
class API < Grape::API
mount Blog::Post => '/'
end
class-API'/'
结束
为了避免混淆,我也会将Post放在一个资源名称空间中,或者将其重命名为PostAPI。我发现它对路径前缀不起作用:
mount Blog::Post => '/blog'
如果希望路径具有前缀,则不起作用
使用
希望有帮助 非常感谢@dB。事实上,您必须为rails命名名称空间和重命名,以避免混淆。。。现在工作!请注意,您应该能够省略
mount
的右侧,因此只要mount Blog::Resources::PostAPI
就可以了,无需在/
上挂载。如果我有另一个版本的API-v2,并且我想公开不同名称的属性内容,会发生什么,因此,假设我将使用expose:body
而不是expose:content
,同时我还必须支持v1。我想我会开始把实体放进版本文件夹,对吗?或者,在这种设置中,您将如何处理?