著作一覧 |
VS2010のWCFサービスでRESTfulなサービスを実装して、GETについてはIEをクライアントにしてしばらく試してから、POSTでXMLを受けるやつを試しに作ってみた。が、クライアントをどうしようか、と考えるまでもなく、RubyのNet::HTTPを使ってさくっと作ったが、どうやっても400となる。
いろいろ試して、どうもメソッド引数を空にすると200になることがわかった。
どうにも不便だが、Requestからボディを読めばいいのかなぁとか試そうとしたら、ヘッダ情報は取れるのだが(キャッシュ処理をするために特化したAPIのようだ)、ボディは取れない。Stream型の引数を与える形でもだめだ。
うーん、といろいろ試して、結局時間切れとなった。
で、今になって、どうもクライアントがContent-Typeにapplication/xmlを設定してPOSTしなければならないらしいとわかった。おれはtext/xmlを設定していたのだった。大嘘。xmlnsが必要。text/xmlでも処理される。
なんで、text/xmlではないんだ? とRFC2376を読むのだが、いまいちわからない。
どうも単なるテキストとして扱ってもよければtext/xmlで、構造化データとして利用するならapplicaton/xmlと書いてあるように読めるが、その一方で、
Within the XML specification, XML entities can be classified into four types. In the XML terminology, they are called "document entities", "external DTD subsets", "external parsed entities", and "external parameter entities". The media types text/xml and application/xml can be used for any of these four types.
ということは結局どっちでも良いように読める。
Applications which use this media typeは、text/xmlだけにWebDAVが明示されている以外は同じことが書いてあるし。
というわけで、結局、よくわからない。
ジェズイットを見習え |