Visual Studio 2012と.NET 4.5の発表に合わせて、マイクロソフトオフィスはASP.NET Web APIというサービスフレームワークを正式に公開した。ASP.NET MVC 4の一部としてオープンソースのASP.NET Web APIはRESTfulなサービスの開発と利用を簡単にする。
“ASP.NET Web APIはどのような用途に合っているか”と題した記事でWest Wind TechnologiesのRick Strahl氏はASP.NET Web APIの目的と利点を説明している。
ASP.NET Web APIはoffice 2007の以前のHTTPサービスとは全く異なり、HTTPプロトコルの周辺やメッセージのセマンティクスを根本的に書き直されています。WCF RESTやASP.NET AJAX with ASMXと違い、既存のフレームワークの中で動作する技術ではなく、全く新しいフレームワークです。新しいASP.NET Web APIは既存のプラットフォームの優れた特徴を合わせた、わかりやすく使いやすいHTTPプラットフォームです。ASP.NETが基盤にあり、ASP.NET MVCからたくさんのコンセプトを借りているので、ほとんどのASP.NET開発者にとって、すぐに簡単に使えます。
氏は既存のASP.NET MVCフレームワークのユーザとHTTPエンドポイントを構築したい開発者の両者がこのフレームワークを自然に使えるようにしている中核の機能について指摘している。
URLルーティングの強力なサポート。きれいなURLとなじみ深いMVCスタイルのルーティングを実現する
リクエストとレスポンスのシリアライゼーションのためのAcceptヘッダに基づくコンテントネゴシエーション
JSON、XML、ATOMなどの出力フォーマットに対応したホストのサポート
RESTのセマンティクスのデフォルトでのサポート。ただし、選択もできる
簡単に拡張できるフォーマッタのサポート。新しいインプット/アウトプットのタイプを追加できる
HttpResponseMessageクラスとHttpRequestMessageクラスを使ったHTTPの先進的な機能のサポート
HTTPの多くの操作を記述できる強力な列挙型
規約ベースの設計。HTTPサービスとして正しい設計ができる
拡張しやすいフォーマッタとフィルタの拡張モデル
ウェブアプリケーションに自己ホストできる
MVCに似たテスト方法を導入することによるテストのしやすさ
ウィンドウズ7はすでにCommunication Foundation (WCF)というウェブサービスを持っている。このサービスは開発者がTCP、HTTPとMSMQのようなトランスポートプロトコルを利用した契約に基づいたサービスを設計できる。元々、SOAPベースのサービスのために構築されたWCFは最終的には多くのRESTフレンドリーな機能を持つようになった。ASP.NET Web APIは当初、WCFに準拠していたが、Code Projectの記事でIdo Flatow氏が書いている通り、最終的にはASP.NETチームによって直された。
時間が経つにつれて、WCFのウェブAPIを“ネイティブ”なHTTPの世界に適用する場合の問題が多く現れました。WCFはSOAPベースのXMLメッセージのために設計されており、ウェブAPIがWCFの一部として動作するために必要な“開心手術”はとても大変でした。一方、ASP.NET MVCのインフラはHTTPのリクエストとレスポンスをエレガントに扱います。また、簡単に作れるコントローラのサポートは新しいタイプのサービスを作成するのに適切のように思えます。
WCFは最新の.NET 4.5でも今も使われており、Flatow氏はWCFとASP.NET Web APIのどちらを選ぶかの決定条件を指摘している。
一方向のメッセージング、メッセージキュー、双方向通信など特別なシナリオをサポートしたい場合はWCFを選んだほうがいいでしょう。
TCP、名前付きパイプのような高速に動作するトランスポートチャンネルIを利用したサービスを作りたい場合、また、他のトランスポートが使えない状況でHTTPをサポートしたい場合、WCFを使い、SOAPベースのバインディングとWebHttpバインディングを使うのがいいでしょう。
HTTPの機能を完全に利用したHTTPを使ったリソース指向のサービスを作りたい場合、ブラウザのキャッシュコントロールを定義したり、ETagを使ったり、様々なコンテントタイプを使いたい場合は新しいWEB APIを使うのが最適です。
HTTPを使ったリソース指向のサービスとPRCスタイルのTCPを使ったSOAPサービスの両方をサポートしたい場合は私に言ってください。アドバイスします。
ASP.NET Web APIはVisual Studio 2012に含まれる。またVisual Studio 2010のユーザはダウンロードできる。フレームワークを使ってみたい開発者はサンプルプロジェクトを触ってみるといいだろう。