2007年7月5日木曜日

「休日情報Webサービス」をREST対応にする


サービス概要


日本の休日情報を提供する Web サービスです。
SOAP 1.1 および 1.2 に対応しています。REST にはサーバの都合により対応していません。


bear.mini の実験室 「休日情報 Web サービス」

いや、それはサーバの都合じゃなくて、実装してないだけだと思う。確かにASP.NETならSOAPによるXML Webサービスを書くのは簡単だけれども。(←私の勘違いのようでした。bear.miniさんにお詫びして訂正。)面白いと思ったので、自力でREST対応したらどうなるか書いてみた。

ってなわけで、サンプル書いてみた。ソースコードはzipにしておいた。


ポイントはいくつかあるが、



  • HTTPハンドラを使う
    .ashxファイルのこと。詳細は「HTTPハンドラによる動的コンテンツの提供」がおすすめ。

  • System.Xml.Serialization.XmlSerializerを使う
    HolidayInfoとかHolidayNameとかをXMLとして出力するなら、このクラスがお手軽。「ステップ7ハンズオン: XMLを利用したオブジェクトの永続化」や、@ITの記事あたりがわかりやすい。

  • System.Xml.Serialization.XmlRootAttributeやSystem.Xml.Serialization.XmlElementAttributeを使う
    XMLのシリアライズ結果を調整するには、上のカスタム属性をシリアライズ対象クラスに適用するといい。

  • Newtonsoft Json.NETを使う
    JavaScriptから呼び出すならXMLよりJSONのほうが嬉しいのだが、JSON関係は共通ライブラリに含まれていない。自分で書いてもいいんだけど、OSSとして公開されている(ライセンスはCC-BY 2.5)ものがあるのでそれを使う。


といった所か。

2 件のコメント:

  1. ツッコミありがとうございます。
    手元のローカルな環境では、何もしなくても今のままでRESTにも対応してたのですが、レンタルサーバにアップしたら使えなくなってしまったのでそういうもんだと思ってました。
    まあ、当然自分で実装すればRESTにはできるんですが、自分で使う分には必要なかったのと、あとは単に面倒だったのでやっていませんでしたが。

    返信削除
  2. 「今のままでRESTにも対応」というのは、ASP.NET AJAXで[ScriptMethod]をつけておけばJavaScriptから(JSON形式で)呼び出せる機能のことですか?あれは面白いですね。そうなら、レンタルサーバにアップしたら使えなくなってしまったというのを「実装してないだけ」と言うのは失礼な突っ込みでした。すみません。
    「自分で使う分には必要なかった」というのももっともです。私はbear.miniさんの面白いサービスに触発されて、ついコードを書きたくなってしまったのでした。

    返信削除