了解 Ruby 中的具象状态传输 (REST)-3
- UID
- 1066743
|
了解 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 之类的方法。 |
|
|
|
|
|