Как работать с POSTed XML через приложение Sinatra Ruby - PullRequest
3 голосов
/ 11 ноября 2009

Я планирую использовать Sinatra для нового крошечного веб-сервиса (WS), который мне нужно собрать для клиента.

WS будет иметь только два метода, один из которых доступен через GET, а другой - через POST. Для метода POST клиент отправит пакет XML на WS sinatra, который проанализирует данные и выдаст ответ HTTP 200 OK или код ошибки 40x.

У меня вопрос, как мне проанализировать входящий POSTed XML-пакет в Sinatra?

Вот пример того, как будет выглядеть входящий пакет данных:

<?xml version="1.0" encoding="utf-8" ?>
<Counts>
  <OccupiedCount>300</OccupiedCount>
  <ReservedCount>40</ReservedCount>
  <VacantCount>160</VacantCount>
  <TotalCount>500</TotalCount>
  <Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum>
  <Timestamp>2009-11-21T14:06:19Z</Timestamp>
  <ApiKey>1234567890qwerty</ApiKey>
</Counts>

Есть ли какой-нибудь способ получить доступ к пакету данных через объект параметров Sinatra, чтобы я мог проанализировать его с помощью чего-то вроде Crack XML? Или мне нужно использовать какую-то переменную Rack, чтобы получить весь пакет данных XML, который был помещен в мой WS?

1 Ответ

0 голосов
/ 11 ноября 2009

Синатра приложение

require 'rubygems'
require 'sinatra'

post '/form' do
    puts params[:xml]
end

Отправка запроса с использованием ваших данных:

curl -d "xml=<?xml version="1.0" encoding="utf-8" ?>
<Counts>
  <OccupiedCount>300</OccupiedCount>
  <ReservedCount>40</ReservedCount>
  <VacantCount>160</VacantCount>
  <TotalCount>500</TotalCount>
  <Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum>
  <Timestamp>2009-11-21T14:06:19Z</Timestamp>
  <ApiKey>1234567890qwerty</ApiKey>
</Counts>
" http://localhost:4567/form

Результат:

- - [11/Nov/2009:12:05:40 PST] "POST /form HTTP/1.1" 200 0
- -> /form
<?xml version=1.0 encoding=utf-8 ?>
<Counts>
  <OccupiedCount>300</OccupiedCount>
  <ReservedCount>40</ReservedCount>
  <VacantCount>160</VacantCount>
  <TotalCount>500</TotalCount>
  <Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum>
  <Timestamp>2009-11-21T14:06:19Z</Timestamp>
  <ApiKey>1234567890qwerty</ApiKey>
</Counts>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...