首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用http post发送和接收XML

使用http post发送和接收XML
EN

Stack Overflow用户
提问于 2012-01-09 11:20:01
回答 1查看 1.7K关注 0票数 1

我对rails很陌生,我希望有人能为我指明正确的方向,如何完成以下工作:

  • 我需要通过直接传递XML文档与外部api进行通信。 ,并将内容类型设置为"text/xml",或将其作为参数传递,并将内容类型设置为“text/https://api.domain.com/v1/method.cgi”。
  • 我应该得到一个XML响应,而不是HTML响应,所以不需要下载HTML响应,存储它,然后为用户呈现一个本地副本;我也不需要将XML文档粘贴到本地生成的HTML表单的参数中,通过浏览器提交它,以避免下载HTML。
  • 每个API方法都有示例xml代码(发送、响应、DTD、Schema)。

实现这一目标的最佳工具/技术是什么??

其中一种较简单的方法如下:

代码语言:javascript
运行
复制
**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>
  • 这个API方法不需要来自用户或视图的交互,是应该从控制器进行编码,还是应该为所有api方法创建一个模型?
  • 如何使用上面指定的XML对cgi url执行post,并处理响应XML并在视图中显示?
  • 实现这一目标的最佳实践是什么?

事先非常感谢

琼尼

EN

回答 1

Stack Overflow用户

发布于 2012-01-09 12:19:10

您猜到了: API客户端的最佳位置是一个模型。使用像HTTPartyRestClient这样的库,这个任务相当容易。控制器只应该请求视图所需的数据。

下面是一些使用HTTParty的示例代码。因为我没有细节,所以你得修改一下。这将是一种模式:

代码语言:javascript
运行
复制
class JonnyService
  include HTTParty
  base_uri 'http://localhost:3000'
end

然后你就可以这样用它了。请注意,为了更方便起见,最好将其中一些逻辑(例如,为每个服务方法创建post参数)作为类方法移到模型中。

代码语言:javascript
运行
复制
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']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8787605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档