Rails に XML データを Post する

RailsにJSONデータをPostする -- BONNOH FRACTION 14 を見ていたら
RailsXML 形式で Post されたデータを
ハッシュで受け取れるということを知ったので試してみた。

送信側

なんとなく Prototype.js 1.6.0.1 で送信する。

var url = 'push';
var xml = "<a><b>c</b><b>d</b></a>";
new Ajax.Request(url, {method: 'post', postBody: xml, asynchronous: false, contentType: 'application/xml'});

contentType オプションで application/xml を指定するのがポイント。
Rails は contentType を見て application/xml だったらデータを XML としてパースする。

受信側

Rails 2 では怪しい Post データが来ると CSRF 対策のため
InvalidAuthenticityToken という例外が飛んでしまう。
そこで(ホントはよくないけど)この機能を無効にする。

class XMLController < ApplicationController
  skip_before_filter :verify_authenticity_token # allow CSRF
end

これで Post された XML をハッシュとして扱える。
params にデータが入っているのでそこからアクセスする。

class XMLController < ApplicationController
  skip_before_filter :verify_authenticity_token # allow CSRF
  def push
    if params
      hoge = params['a']['b'][0] # c
      piyo = params['a']['b'][1] # d
    end
  end
end


Rails 2 スゲー!とか思ってたらどうやら Rails 1.x からあるらしい。