Ruby on Rails的 - 区分复数VS单一资源的REST API

我正在构建的URL我的REST API之前,我开始编写任何代码。 Rails的REST魔术是太棒了,但我稍微打扰的URL,如格式:

http://myproject/projects/5

其中项目是我的资源和5是PROJECT_ID。 我想,如果一个用户希望检索所有的项目,那么相应的HTTP GET http://myproject/projects是有道理的。 但是,如果他们要找来获得一个单一的资源信息,如一个项目,然后是有意义的有http://myproject/project/5 VS http://myproject/projects/5 难道是最好的避免这种头痛,或做一些你有着相似的担忧,甚至更好的 - 有一个有效的解决方案?

--------------解决方案-------------

铁轨(3)有很多约定,当涉及到单数VS复数。 例如,模型类始终是单数( Person ),而对应的表总是复数( people )。 (例如Person.all映射到select * from people 。)

的路由,有一个奇异资源以及多个资源的概念。 所以,如果你没有resource :account ,那么你会得到这样的路径/account默认路径或/account/edit的路径,形式要编辑的帐户。 (请注意,Rails使用/accountPUT方法来实际更新帐户/account/edit是一种形式编辑的帐户,这是从该账户本身就是一个单独的资源。)如果你没有resources :people ,但是,再你会得到这样的路径/people /people/1/people/1/edit 。 路径本身指示是否只能有一个给定资源类型的一个实例,或者是否有可能是由某些类型的标识符区分多个实例。

我同意,顺其自然。 考虑如何将URL形成了一个层次。

您的网站的根目录就是你开始访问任何东西。

/项目/范围缩小到只有项目,没有别的了。 从项目,你可以做很多事情,/列表/索引/,/导出,等... / ID限事情进一步发展。

在每个/什么做的范围变窄了,我觉得很有道理。

此外编程是所有关于任意性的规则。 指数法从1开始对0,依此类推。 任何人只要有您的网址工作将理清头绪在短期内。

存在这样的情况奇异路径的资源是有帮助的。 如果你的资源标识被非数字用户定义的名称,然后路由冲突是可能的。 例:

/应用/新 - >创建一个新的应用程序或命名的新节目用户的应用程序?

在这种情况下,您可以选择限制用户的输入,以避免冲突,或者,这可以通过覆盖默认Rails 3的行为被周围的工作:

class ActionDispatch::Routing::Mapper
module Resources
RESOURCE_OPTIONS << :singular_resource
class Resource
def member_scope
@options[:singular_resource] ? "#{singular}/:id" : "#{path}/:id"
end

def nested_scope
@options[:singular_resource] ? "#{singular}/:#{singular}_id" : "#{path}/:#{singular}_id"
end
end
end
end

然后指定一个新的资源路由时:

resources :applications, :singular_resource => true

这将产生的途径:

GET /applications
GET /applications/new
POST /applications
GET /application/:id
GET /application/:id/edit
PUT /application/:id
DELETE /application/:id

分类:Ruby on Rails的 时间:2015-03-15 人气:2
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.462 (s). 10 q(s)