書ききれなかったので残りはあとで書く。
うちのチームでは、Windows Mobile、iPhoneアプリの開発をやっています*1。
スマートフォンアプリでは、殆どと言っても良いほどサーバーにアクセスして、なんらかの情報を取得したり保存したりしています。スマートフォン向けに私たちがクライアントアプリを開発し、別の会社さんがサーバーサイドのアプリを同時に並行開発するというのもよくある案件の形です。
以前ですが、サーバー側の実装の進捗遅れにより、クライアント側の進捗も足を取られる形で遅れが出たということもありました。同じような事が起きないように、完全な動作を再現するのは難しいとしてもテストサーバー(WebAPI)を簡単に構築出来ないかどうかを試してみました。
使ったもの
- ASP.NET MVC 2
ホスティングサーバーには、Windows Server 2008を使用しました。このサーバーASP.NET 3.5までしか対応していないので、残念ながらASP.NET 4.0が必須のASP.NET MVC 3は使えませんでした。……ということで今回はASP.NET MVC 2を使いました。
WebAPIの仕様
POSTメソッドでXMLデータを受け取り、それをパースして決められたデータを返します。
URL
http://www.example.com/Kana/ (適当ですよ)
リクエスト
request要素の子としてtext要素があるとして、そこに適当なテキストが格納されているとしましょう。
<?xml version="1.0" encoding="utf-8" ?> <request> <text>ほげほげぴろろ</text> <request>
レスポンス
レスポンスは以下のように、入力されたXMLのtext要素をカタカナに変換して返すようにしましょう。
<?xml version="1.0" encoding="utf-8" ?> <results> <result>ホゲホゲピロロ</result> <results>
3.KanaControllerを追加する
あとで追記する。
4.PostメソッドをKanaControllerに実装する
適当コードです。一応XMLを返します。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Xml.Linq; namespace MvcApplication1.Controllers { public class KanaController : Controller { // // POST: /Kana/ [HttpPost] [ValidateInput(false)] public ActionResult Index(FormCollection collection) { // パラメータとして渡されたXMLを取得 var xml = collection["xml"]; // NOTE: ここでなんか解析したりとか処理したりする // 処理結果をXMLとして返す var result = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), new XElement("results", new XElement("result", "ホゲホゲピロロ"))); return Content(result.ToString(), "application/xml"); } } }
5.動作確認:クライアント側からXMLを送信する
htmlを使ってブラウザからXMLを送って動作確認をするようにしましょう。
<h2>カナへの変更をおこなう</h2> <form action="./Kana" method="post"> <textarea name="xml" style="width:600px; height:130px;"> <?xml version="1.0" encoding="utf-8" ?> <request> <text>ほげほげぴろろ</text> <request> </textarea><br /> <input type=submit /> </form>
これを適当な名前でhtmlとして保存します。ブラウザ(firefox)で開いてみました。
デバッグのためにデプロイした http://localhost/Kana/ から返ってきたXMLはこんな感じになりました。
さいごに
id:shiba-yan と @hatsune_ にASP.NET MVCでWebAPIを作るんだったらJSONを使うのが楽だよと聞いていたので、次はJSONを扱うAPIをこしらえるよ。
*1:Windows Phone 7の案件があると飛んで喜びます。TwitterでDもしくはLinkedInでContactください