本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7575993
建立时间:2006年5月29日




[Ruby on Rails]Web services, Rails-style
软件技术

lhwork 发表于 2007/2/8 10:36:28

新的 REST web 服务在 Rails 1.1 内支持,它可以轻易地给你的应用程序添加 web 服务,你应该尽早使用它。 考虑一下:如果你的应用程序有个页面,它显示名单,没有 web 服务支持时它看起来像下面这样: def list @people = Person.find(:all) end 下面是使用 web 服务支持的同样动作: def list @people = Person.find(:all) respond_to do |wants| wants.html wants.xml { render :xml => @people.to_xml } end end 这段话要说明什么,“如果客户端希望以 HTML 来应答这个动作,就像我们已前的应答,但如果客户端相要 XML,在 XML 格式内返回名单。” (Rails 根据客户端递交的 HTTP Accept header 来确定期望的应答格式。) 现在,我们假设你有个动作,它添加一个新的,原先不存在的人员,随意创建它们的公司(按名字)。没有 web 服务支持,它看起来像下面这样: def add @company = Company.find_or_create_by_name(params[:company][:name]) @person = @company.people.create(params[:person]) redirect_to(person_list_url) end 下面是有 web 服务支持的同样动作: def add company = params[:person].delete(:company) @company = Company.find_or_create_by_name(company[:name]) @person = @company.people.create(params[:person]) respond_to do |wants| wants.html { redirect_to(person_list_url) } wants.js wants.xml { render :xml => @person.to_xml(:include => @company) } end end 我们很简单地添加了对 RJS 的足够支付。如果客户端想要 HTML,我们只重定向它们以返回名单。如果它们想要 Javascript(wants.js),那么它是一个 RJS 请求,所以我们渲染与这个动作关联的 RJS 模板。最后,如果客户端想要 XML,我们渲染名单为 XML,但需要动一点脑筋:我们也在被渲染的 XML内包括 person 的公司,所以你会得下面这些: <person> <id>...</id> ... <company> <id>...</id> <name>...</name> ... </company> </person> 注意,要在那个动作的顶部添上: company = params[:person].delete(:company) @company = Company.find_or_create_by_name(company[:name]) 这是因为引入的 XML 文档(如果一个 web 服务请求是在进程内)只可以包含一个唯一的根结点。因此,我们必须重要整理以便请求看起来像这样 (url 编码): person[name]=...&person[company][name]=...&... 并且,像这样 (xml 编码): <person> <name>...</name> <company> <name>...</name> </company> </person> 换句话说,我们生成请求,以便它在一个单独的实体----一个 person 上操作。然后,在动作内,我们从 request 内抽取公司数据,查找或创建公司,然后用余下数据创建新的 person 。 注意,你可以定义你自己的 XML 参数解析器,它将允许你在单个 request 内描述多个实体(例如,把它们包装在单个根结点内),但是如果你只使用流程并接受 Rails 的默认,那么生活会更轻松些。 http://weblog.jamisbuck.org/2006/3/27/web-services-rails-style


阅读全文(2244) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144759781 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号