在RESTful URL

时间:2016-09-01 13:20:46

标签: ruby-on-rails ruby rest url restful-url

给出RESTful API中嵌套资源的以下URL设计:

/magazines/:magazine_id/ads/:id POST

鉴于广告可以在杂志中单独识别广告,因此在杂志中识别杂志的理由是什么?

除了在向用户提供该URL或简单约定时它看起来更好。是否有更深层的含义或约束?

3 个答案:

答案 0 :(得分:1)

嗯,这很大程度上取决于谁在发展。从理论上讲,没有必要。

事实上,Rails指南在2.7.2 Section (Shallow Nesting)中显示了这一点,只有当资源没有id时才可以嵌套资源:

 resources :articles do
   resources :comments, only: [:index, :new, :create]
 end
 resources :comments, only: [:show, :edit, :update, :destroy]

或者在你的情况下:

 resources :magazines do
   resources :ads, only: [:index, :new, :create]
 end
 resources :ads, only: [:show, :edit, :update, :destroy]

答案 1 :(得分:0)

  

鉴于广告ID可以在杂志中单独识别广告?

这是最常见的惯例,但不是通用约定。您可以在模型中覆盖to_param,并违反通用数据库主键约定。想象一下,你也为杂志做过这个(例如用于SEO目的)。在这种情况下,包括路线中的杂志ID / slug可能是非常必要的。

答案 2 :(得分:0)

这正是"浅"作用:

resources :magazines do   
  resources :ads, shallow: true 
end

表示与

完全相同
resources :magazines do
  resources :ads, only: [:index, :new, :create]
end
resources :ads, only: [:show, :edit, :update, :destroy]

参见第2.7.2节http://edgeguides.rubyonrails.org/routing.html

中的浅嵌套