我是rails的新手,并期待有人指出我如何完成以下任务的正确方向: -
我需要通过直接传递XML文档与外部api进行通信 进入cgi(https://api.domain.com/v1/method.cgi)并将content-type设置为 “text / xml”,或将其作为参数传递并将content-type设置为“text / plain”
我应该得到一个XML响应而不是HTML响应,所以没必要 下载HTML响应,存储它,然后为用户呈现本地副本;也不会 我需要将XML文档粘贴在本地生成的HTML表单的参数中 通过浏览器提交,以避免下载HTML。
每个API方法都有示例xml代码(发送,响应,DTD,架构)
实现这一目标的最佳工具/技术是什么!??
其中一个更简单的方法如下: -
**SEND**
<?xml version="1.0" encoding="utf-8" ?>
<SoftwareAPI>
<Method>ListUsers</Method>
<APIKey>123</APIKey>
<Account>
<UserName>admin</UserName>
<Password>Password</Password>
</Account>
</SoftwareAPI>
**RESPONSE**
<?xml version="1.0" encoding="utf-8" ?>
<SoftwareAPIResponse>
<TimeNow>2012-01-23T16:44:00Z</TimeNow>
<ResponseId>01-23-1232729040-23456</ResponseId>
<ListUsersResponse>
<User>
<Team>team</Team>
<Office>office</Office>
<UserName>Joe.Bloggs</UserName>
<Password>Password123</Password>
<FullName>Joe Bloggs</FullName>
<Language>Auto-Detect</Language>
<Telephone>+44 207 123 456 789</Telephone>
<ResponseEmail>joebloggs@domain.co.uk</ResponseEmail>
</User>
</ListUsersResponse>
</SoftwareAPIResponse>
非常感谢提前
强尼
答案 0 :(得分:1)
您猜对了:您的API客户端的最佳位置是模型。使用HTTParty或RestClient等库,此任务相当简单。控制器只需要请求视图所需的数据。
这是使用HTTParty的一些示例代码。由于我没有细节,你必须稍微修改一下。这将是一个模型:
class JonnyService
include HTTParty
base_uri 'http://localhost:3000'
end
然后你可以像这样使用它。请注意,为了更加方便,将一些逻辑(例如,为每个服务方法创建post params)作为类方法移动到模型中可能会更好。
options = {
:body => {
:SoftwareAPI => {
:Method => 'ListUsers',
:APIKey => '123',
:Account => {
:UserName => 'admin',
:Password => 'password'
}
}
}
}
response = JonnyService.post('/service.xml', options)
puts response.inspect
#response can be treated as a data structure:
puts response['ResponseId']