快速业务通道

跨越边界: REST on Rails - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
法。控制器设置视图使用的 @person 实例变量。因为方法没有指定 视图的名称,所以 Rails 用与控制器动作相同的名称调用视图 —— 在这个示例中,视图位于 app/views/people/show.rhtml。

再来看 list 方法。如果想让这个方法呈现 XML,需要:

删除分页

把 people 实例变量转换成 XML

呈现 XML 而不是 HTML

Rails 使得处理 Web 服务和呈现来自同一 Web 服务的视图成为可能。实际上也不需要分页。为了把 Web 服务的 list 方法简化一些,可以把控制器中的 list 方法变成像清单 3 一样,清除分页。还需要 删除靠近 app/views/people/list.rhtml 代码底部的 “Next Page” 和 “Previous Page” 链接。

清单 3. 简化 list

def list   @people = Person.find_all end

由于删除了分页,也就删除了让用户界面更健壮的一个特性,但是又得到了一些回报。可以用相同的 代码来驱动 Web 服务和视图。如果日后发现需要分页,可以编写一些定制的助手。

现在基本应用程序出来了,可以添加一些 Web 服务了。

向 Rails 控制器添加 Web 服务

如果我想说大话,我可以说 “现在已经有了一个 Web 服务”。记得我对 REST 说过什么?这种风格 的 Web 服务使用指定的资源。我的 Rails 应用程序也具有指定的资源:host_name/people/list 调用我 的 list 服务。REST 风格的 Web 服务也使用 TCP/IP 和 HTTP。我的 Rails 应用程序就是这么做的。而 且格式良好的 HTML 就是 XML 的子集,也满足最后一条 REST 要求。只需在 localhost:3000/people/list 上调用 HTTP get,并解析结果,就可以得到人员列表。这就是关键。REST 的工作方式与 Internet 的工作方式一样。但这并不是真正基于 REST 的 Web 服务。理想情况下,应当 提供反映 Person 含义的 XML 文档而不是用户界面的结构。

真正的服务应当产生纯数据的表示,一个专门针对服务的预期客户而构建的表示。但是示例应用程序 有两个客户:终端用户和 REST 客户。要为两个目的重用相同的代码,需要给 Rails 提供更多信息。 Rails 的设计者可能决定使用额外的 URL 参数,但是处理 URL 可是一项费劲的工作。Rails 不应当用这 些细节增加用户负担。相反,HTTP 提供了指定更多信息的工具:HTTP 头。

要理解 Web 服务的 REST 模型,了解一点 HTTP 是有帮助的。curl(请把它想像成 查看 URL)命令 允许用一个命令查询 URL,并查看响应。基于 Unix 的操作系统默认包含 curl,可以为其他操作系统下 载免费的 curl 工具。通过输入 curl http://some-url,可以将请求限制成只输出默认的响应体(浏览 器呈现的 HTML)。输入 curl -i http://some-url 可以得到更多信息。这个命令返回 HTTP 头,如清单 4 所示。可以看到头配置由表示每个请求的配置的键-值对组成。

清单 4. 用 curl 调用 HTTP 请求

> curl -i http://localhost:3000/people/list HTTP/1.1 200 OK Cache-Control: no-cache Connection: Keep-Alive Date: Tue, 27 Jun 2006 14:54:49 GMT Content-Type: text/html; charset=UTF-8 Server: WEBrick/1.3.1 (Ruby/1.8.4/2005-12-24) Content-Length: 854 Set-Cookie: _session_id=216912045de52786f032b22755c903dd; path=/

跨越边界: REST on Rails(4)

时间:2011-07-25 IBM Bruce Tate

后面将频繁地看到 HTTP get、put、post 和 delete 命令。REST 利用达些命令执行经典的 CRUD (CRUD 是create, read、update 和 delete 的共同缩写)。HTTP 命令到 CRUD 的映射是这样的:

Create(创建):HTTP put

Read(读取):HTTP get

Update(更新):HTTP post

Delete(删除):HTTP delete

浏览器利用 HTTP 头,通过相同的服务器端代码来满足不同类型的请求。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号