2007-01-23

一个简单的RST实例

关键字: rails
首先用ruby script/generate migration create_table_friends创建一个migration文件,
写入以下代码:

 
  1. class CreateTableFriends < ActiveRecord::Migration  
  2.   def self.up  
  3.   create_table :friends do |t|  
  4.       t.column :first_name:string  
  5.       t.column :last_name:string  
  6.       t.column :phone:string:limit=>12  
  7.       t.column :email:string  
  8.   end  
  9.   end  
  10.   
  11.   def self.down  
  12.   drop_table :friends  
  13.     
  14.   end  
  15. end  

运行: rake migrate
生成相应的数据表friends
利用ruby script/generate scaffold friends生成一个支架,可以通过:http://127.0.0.13000添入几条测试数据。

修改控制器中的list代码:
ruby 代码
 
  1. def list  
  2.   #@friends_pages, @friends = paginate :friends, :per_page => 10  
  3.   @friends=Friend.find(:all)  
  4.   respond_to do |wants|  
  5.      wants.html  
  6.      wants.js  
  7.      wants.xml{render :xml=>@friends.to_xml}  
  8.   end  
  9. end  

这个时候我们可以在浏览器中输入:http://127.0.0.1:3000/friends/list/index.xml 你就可以查看到相应的数据信息,它是以xml形式显示的。

这样我们就完成了简单的一个相当于服务器端的功能,接下来我们就要来实现我们的客户端,我们可以直接通过ruby代码来调用,也可以再建一个rails应用来调用。我们分别给出:
1.
ruby 代码
 
  1. require 'net/http'  
  2.   
  3. Net::HTTP.start('localhost', 3000) do |http|  
  4.   response = http.get('/friends/list', 'Accept' => 'text/xml')  
  5.   
  6.   #Do something with the response.  
  7.   
  8.   puts "Code: #{response.code}"  
  9.   puts "Message: #{response.message}"  
  10.   puts "Body:\n #{response.body}"  
  11. end  

运行以后输出的结果是:

 
  1. Code: 200  
  2. Message: OK  
  3. Body:  
  4.  <?xml version="1.0" encoding="UTF-8"?>  
  5. <friends>  
  6.   <friend>  
  7.     <email>mloki@124.com</email>  
  8.     <first-name>&#39532;</first-name>  
  9.     <id type="integer">3</id>  
  10.     <last-name>&#29702;&#20891;</last-name>  
  11.     <phone>0511-8791837</phone>  
  12.   </friend>  
  13. </friends>  

我们可以看到中文字条无法显示。

2.
在model中建立两个rb文件:

friends_resource.rb
 
  1. class FriendsResource < ActiveResource::Base  
  2.   self.site = 'http://localhost:3000'  
  3. end  
friend.rb
ruby 代码
 
  1. class Friend < FriendsResource  
  2.   self.site += '/friends/list'  
  3. end  

通过ruby script/generate controller getrest生成一个控制器,其中写一个index函数,实现如下:
ruby 代码
 
  1. def index  
  2. @f=Friend.find(:all)  
  3. end  

建立相应的template文件,通过iterate我们就就可以把这个列表中所有的friend的相应属性输出。

注:论坛里好多同学说中文问题,其实只要做以下几件事,就可以很好的解决中文问题:

  1. 在创建数据库的时候,设定其编码为:utf-general-ci
  2. 在datatbase.yaml中设定:encoding: utf8
  3. 最后一点就是把编辑器的编码改为utf-8就可以了(我用的是eclipse,可以实现这个功能的)
我希望坛子上的高手来实现用客户端删除、更改和创建friend。
评论
李超群 2007-01-28   回复
proper 写道
使用 Rest 的方式的话,是不是这段
http://127.0.0.1:3000/friends/list/index.xml

不应该用动词?

比如可以写成:
http://127.0.0.1:3000/friends/
就是那到了全部的friends了
同时还得用get这种method才行。如果是post的话就是新建一个了。
proper 2007-01-28   回复
使用 Rest 的方式的话,是不是这段
http://127.0.0.1:3000/friends/list/index.xml

不应该用动词?

比如可以写成:
http://127.0.0.1:3000/friends/
就是那到了全部的friends了
sea gull 2007-01-25   回复
yooyer 写道
谢谢,你的文章!
我看了http://www.ibm.com/developerworks/cn/java/j-cb08016/index.html
上面有用 Java 代码调用服务的代码,如果用c#,该如何调用web服务啊?


我不会C#的,真的对不起.你可以参照一下那段java代码,我想应该也会用到C#中的网络库的.模仿试一下.
yooyer 2007-01-24   回复
谢谢,你的文章!
我看了http://www.ibm.com/developerworks/cn/java/j-cb08016/index.html
上面有用 Java 代码调用服务的代码,如果用c#,该如何调用web服务啊?
发表评论

该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子

sea gull
搜索本博客
存档
最新评论
评论排行榜