首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

了解 Ruby 中的具象状态传输 (REST)-3

了解 Ruby 中的具象状态传输 (REST)-3

构建一些简单的应用程序先从类演示开始。在第一个示例(参见 )中,您想要确定与给定 Company 有关联的 People(基于企业的永久链接)。从 Company 名称空间检索到的记录包含与该 Company 所关联的 People 的永久链接列表。对该 People 散列进行迭代,并根据该永久链接检索 People 的记录。该记录为您提供了 People 的第一个和最后一个名称,以及他或她的头衔也属于 Company 记录(作为 name-title 散列的一部分返回)。
清单 5. 识别与 Company 关联的 People (people.rb)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/ruby

load "company.rb"
load "person.rb"

# Get argument (company permalink)
input = ARGV[0]

company = Crunchbase_Company.new(input)

people = company.people

# Iterate the people hash
people.each do |name, title|

    # Get the person record
    person = Crunchbase_Person.new( name )

    # Emit the name and title
    print "#{person.fname} #{person.lname} | #{title}\n"

end

people = nil
company = nil




执行  中的脚本,如  所示。有了该脚本,您可以提供一个 Company 永久链接,并且结果是个人的第一个和最后一个名称与头衔。
清单 6. 测试 people.rb 脚本
1
2
3
4
5
$ ./people.rb emulex
Jim McCluney | President and CEO
Michael J. Rockenbach | Executive Vice President and CFO
Jeff Benck | Executive Vice President & COO
$




现在,看看一个更复杂的示例。该示例采用了一个给定的 Company,随后确定了执行主管。然后,确定这些主管过去工作过的企业。 提供了一个名为 influence.rb 的脚本。如清单所示,您接受企业名称作为参数,检索企业记录,并随后检索了该企业中当前的 People 散列(通过 People 方法)。然后,对这些 People 进行迭代并通过他们的头衔(并不完全准确,需要考虑到 CrunchBase 中头衔的可变性)来确定主管。对于任何已经确定的主管来说,您发出了这些个人曾经工作过的企业(通过从 People 记录中检索一个企业数组来完成)。
清单 7. 执行关系和影响 (influence.rb)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/ruby

load "crunchbase.rb"

input = ARGV[0]

puts "Executive Relationships to " + input

company = Crunchbase_Company.new(input)

people = company.people

# Iterate through everyone associated with this company
people.each do |name, title|

    # Search for only certain titles
    if title.upcase.include?("CEO") or
       title.upcase.include?("COO") or
       title.upcase.include?("CFO") or
       title.upcase.include?("CHIEF") or
       title.upcase.include?("CTO") then

        person = Crunchbase_Person.new( name )

        companies = person.companies

        companies.each do | firm |
            if input != firm
                puts "  " + firm
            end
        end

    end

end




为大数据企业 Cloudera 演示了这个脚本。正如您从  所看到的,Ruby 和其 gem 对您隐藏了许多细节,这使得您能够专注于手头的任务。
清单 8. 测试 Ruby 脚本的影响
1
2
3
4
5
6
7
8
9
10
11
12
13
$ ./influence.rb cloudera
Executive Relationships to cloudera
  accel-partners
  bittorrent
  mochimedia
  yume
  lookout
  scalextreme
  vivasmart
  yahoo
  facebook
  rock-health
$




使用其他 REST HTTP 方法在此处所示的简单示例中,您只使用了 GET 方法,用于从 CrunchBase 数据库中提取数据。其他站点可能会将界面扩展为可以从其特定的 REST 服务器中检索数据并向其发送数据。 提供了其他 Net::HTTP 方法的简介。
清单 9. 用于其他 RESTful 交互的 HTTP 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
http = Net::HTTP.new("site url")

# Delete a resource
transaction = Net::HTTP:elete.new("resource")
response = http.request(transaction)

# Post a resource
resp, data = Net::HTTP.post_form( url, post_arguments )

# Put a resource
transaction = Net::HTTP:ut.new("resource")
transaction.set_form_data( "form data..." )
response = http.request(transaction)




要想进一步简化 REST 客户端的开发,您可以使用其他的 Ruby gem,比如 rest-client(参阅 )。该 gem 提供了一个 HTTP 上的 REST 层,从而提供了诸如 get、post 和 delete 之类的方法。
返回列表