Отправка и получение XML с использованием http-поста - PullRequest
1 голос
/ 09 января 2012

Я новичок в рельсах и ищу кого-то, чтобы указать мне в правильном направлении, как сделать следующее: -

  • Мне нужно связаться с внешним API, передавая XML-документ напрямую
    в CGI (https://api.domain.com/v1/method.cgi) и установите тип содержимого в «text / xml», или передайте его в качестве параметра и установите тип содержимого «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>
  • Этот метод API не требует взаимодействия с пользователем или представлением, если будет выполнено кодирование из контроллера или я должен создать модель для всех методов API?
  • Как мне выполнить публикацию в URL CGI с указанным выше XML и обработать XML ответа и отображение в виде?
  • Каковы наилучшие методы для достижения этой цели?

Заранее большое спасибо

Jonny

1 Ответ

1 голос
/ 09 января 2012

Как вы уже догадались, лучшим местом для вашего API-клиента является модель.Используя такую ​​библиотеку, как HTTParty или RestClient , эта задача довольно проста.Контроллер должен делать не больше, чем запрашивать данные, необходимые для представления.

Вот пример кода с использованием HTTParty.Поскольку у меня нет деталей, вам придется немного его изменить.Это будет модель:

class JonnyService
  include HTTParty
  base_uri 'http://localhost:3000'
end

Тогда вы можете использовать это так.Обратите внимание, что для дополнительного удобства было бы лучше перенести часть этой логики (например, создание параметров post для каждого метода службы) в модель как методы класса.

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...