什么是宁静路由?
Posted
技术标签:
【中文标题】什么是宁静路由?【英文标题】:What is Restful Routing? 【发布时间】:2011-01-27 08:53:34 【问题描述】:我熟悉 Ruby On Rails 的路由系统以及 Code Igniter 和 phpCake 如何路由事物,但除了拥有一个基于目录结构提供路由的集中位置之外,还有更多吗?像这样
controller/action/id/
Admin/editUser/22
【问题讨论】:
【参考方案1】:基本前提是,它不是完全依赖 URL 来指示您要访问的网页(并且仅使用一种方法),而是 VERB 和 URL 的组合。
这样,当同一个 URL 与不同的动词(例如 GET、PUT、POST、DELETE)一起使用时,您会转到不同的页面。这使得 URL 更简洁、更短,并且特别适用于 CRUD 应用程序,大多数 Web 应用程序都是。
【讨论】:
【参考方案2】:RESTful Rails 路由,我认为这说明了 REST 的原理
/users/ method="GET" # :controller => 'users', :action => 'index'
/users/1 method="GET" # :controller => 'users', :action => 'show'
/users/new method="GET" # :controller => 'users', :action => 'new'
/users/ method="POST" # :controller => 'users', :action => 'create'
/users/1/edit method="GET" # :controller => 'users', :action => 'edit'
/users/1 method="PUT" # :controller => 'users', :action => 'update'
/users/1 method="DELETE" # :controller => 'users', :action => 'destroy'
【讨论】:
当然,除了/users/new
和 /users/1/edit
不是 REST URI(因为其中包含动词)。也就是说,您可以将“功能页面”作为可以“获取”的资源,即/users/tools/creation_form
和/users/tools/edit_form/1
(请注意,在第二个 URI 中,我添加了一个用户 ID 来为您填充表单)【参考方案3】:
整个宁静的一个重要部分是您应该使用不同的 HTTP 方法来表示不同的操作。
例如,在 Rails 中,如果您要将 HTTP Delete
发送到 /users/[id]
,则表示您要删除该用户。 HTTP Get
将检索用户的适当表示。 HTTP Put
可以更新或创建用户。
这些是一些示例,但由于 HTTP 中没有 RESTful API 的标准,因此并非在所有情况下都是正确的。
【讨论】:
【参考方案4】:它将 HTTP VERBS + URL 映射到控制器中的特定操作
例子:
GET /users/1
前往:
:controller => 'users', :action => 'show'
要查看完整的映射,请转到终端,然后输入:
rake routes
【讨论】:
【参考方案5】:@edtsech 是正确的。我想在这里再补充一件事。
在更新的情况下,方法是“POST”,带有一个隐藏字段,其中包含需要更新的数据。
所以 PUT = POST + 隐藏字段。
【讨论】:
我不明白你在这里想说什么...... POST 肯定不是用来更新记录的......你所说的“隐藏字段”是指有效负载吗? 在 Rails 中,为了更新记录,我们使用带有隐藏字段的 POST 请求,其中包含有效负载。以上是关于什么是宁静路由?的主要内容,如果未能解决你的问题,请参考以下文章