3

クライアント用にまとめる必要がある新しい小さな Web サービス (WS) に Sinatra を使用することを計画しています。

WS には 2 つのメソッドしかありません。1 つは GET 経由で、もう 1 つは POST 経由でアクセスします。POST メソッドの場合、クライアントは XML パケットを sinatra WS に送信します。sinatra WS はデータを解析し、200 OK HTTP 応答または 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>

Crack XML などで解析できるように、Sinatra params オブジェクトを介してデータ パケットにアクセスする方法はありますか? それとも、WS に POST された XML データ パケット全体を取得するために、ある種の Rack 変数を使用する必要がありますか?

4

1 に答える 1

0

シナトラアプリ

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>
于 2009-11-11T20:09:22.527 に答える