ものがたり(旧)

atsushieno.hatenablog.com に続く

スキーマレスWebサービス

話がずれていったWebサービス論について吉松さんが疑問符を投げかけている

Webサービス」って話しづらいんだよね…SOAと同じでまず定義が不明確だし。はてなWebサービスみたいなのが「RSS提供しているだけじゃん」って言われちゃってたりするし。XML-RPCベースで動いているXimianのRed Carpet*1も持ち出せるのやら。吉松さんに日経ByteのWebサービス論が興味深いですよと言うわけにもいかないし(w

って思ってたら僕もこの前「Webサービスを」云々とか定義すっ飛ばして書いてました。反省。あれはWSDLのことです。

僕がコメントすべきは「役に立たない」2/3のWSDLについてかな。ってもう↑で本筋の話は終わっている気分ですが。以下は脇道のWSDL/XSDについてのみです。所詮余談だから「続く」にしてみようか。そうしちゃえ。


バグのあるWSDLは(互換性が求められるWebサービスとして)役に立たないし、世に流れているWSDLにバグがあるものが多い(2/3かどうかなんて知りませんよ)というのは、実感としてはやっぱり正しい。eBayのwsdlにも問題があったし、SilverStreamが作ったNovell製品のwsdlにも問題がありました。complexType派生しまくりでホントにcomplexなスキーマばっか。

何でそんな複雑なのを書いちゃうの?というと、WSDL書いている側は、既に存在するシステムとつなごうと何とかスキーマを整合させようとして、あんまし分かっていないXML Schemaをあーでもないこーでもないと摺り合わせて、よっしゃあツールがエラーだって言わなくなったコレでいこー、という感じで作っていると思うのです(実際はどうだか知りませんが、流れてくるスキーマを見るとそんなかほりがしてきます)。

(でもそれがWSDL/XSDがあそこまで面倒になっている理由の本質だと思うんだだよね…)

一方で、現実に使われているWSDLベースのスキーマの多くは、ゼロから構築することができた運の良い人たちのもので、ツールで自動生成したものを全くいじらなかったり、理解可能な範囲で簡単に仕上げてきたりするもので、これらはフツーに動作します。たぶん。ツールも複雑なスキーマは対応できないのでしません。

これらは別にXSDなんて使わなくてもxml over httpで出来そうですが、ツールで型まで勝手にプラットフォームに合わせて生成してくれるのは便利なので、別に使わない理由は特にありません。気がつくとunique particle attribution違反になったりして、あわててsequenceをchoiceに置き換えて、強く型付けされていたものがパーになったりすることはあるかもしれませんが。

もっとも値の型だってXSDと必ずしも合致しているとは限らないんですが。それこそ<age>20</age>は0x20歳かもしれないですし(w そしたら結局int.Parse()とかしなきゃいけないですね。

いずれにしろ、残り1/3についてまで否定しているのは僕ではありません。*2

*1:今ではNovell ZenWorksに統合されちゃいましたが。

*2:上でちょっとサービスしちゃったけど。