Ruby on Rails URL中的资源映射(RESTful API)

ran*_*its 6 ruby rest ruby-on-rails

我有点困难想出正确的答案,所以我会在这里征求我的问题.我正在研究RESTFul API.当然,我有多个资源,其中一些资源包括父母与子女之间的关系,其中一些资源是独立的资源.我遇到一些困难的地方在于弄清楚如何让那些将根据我的API构建客户的人们更容易.

情况就是这样.假设我有'街头'资源.每条街都有多个房屋.So Street:has_many to Homes and Homes:belongs_to Street.如果用户想要在特定的主资源上请求HTTP GET,则以下内容应该有效:

http://mymap/streets/5/homes/10

这允许用户获得id为10的家的信息.直接前进.我的问题是,我是否通过授予用户访问权限来违反本书的规则:

http://mymap/homes/10

从技术上讲,家庭资源本身就没有街道.它使感觉它的存在,因为没有封装街道自己的实体,即使业务逻辑,否则说.

处理这个问题的最佳方法是什么?

编辑!为了成为一名优秀的StackOverflow公民,我回过头来看一下如何在上面实现它们的支持代码块.

map.resources :streets,
              :has_many => :homes
              :shallow => true
Run Code Online (Sandbox Code Playgroud)

这将创建我正在寻找的两种类型的路线.

tad*_*man 5

如果您的家庭记录只能属于一个街道,那么当您单独检查一个家庭时,这种关系不会混淆.无论出于何种原因,您仍然可以回溯到相关的街道记录.

在您拥有多对多关系的情况下,对REST结构进行解嵌可能会让您遇到麻烦.如果特定记录仅在特定上下文中有意义,并且您删除了该上下文,则显然存在混淆.

我认为在您的特定情况下,您可能不需要实现这两种方法,而是采用"更平坦"的方法来降低URL的复杂性.

  • 如果你提供了两个选项,你就要确保在其中一个上使用`rel ="canonical"`链接到另一个.(可能会链接_from_更深的_更浅的版本.) (3认同)