ASP.NET Web APIサーバー編

以前WCF Web APIについて書きましたが、その後紆余曲折あり、まず、WCFのプロダクトでは無くなり、それに従いWCFとしてホストされることは出来なくなり、ASP.NET MVCによるホスト機能に特化され、名前もASP.NET Web APIとなり、実質的にASP.NET MVC 4の1機能になっています。

また、新たに公開されたVisual Studio 2012ではASP.NET 4 Webアプリケーションテンプレートでサポートされています。

※以下記事の元になった記事は日本マイクソフト井上さんの記事(Web APIをはじめてみよう)が元になっています

そこで、以前の記事でWCF Web APIで書かれた内容をASP.NET Web APIで書き直したいと思います。

準備

ASP.NET 4 Webアプリケーションテンプレートを使って新しいプロジェクトを作成します。下の図と異なりますが、ソリューション名はSuperHero2とします。

新しいASP.NET MVC 4プロジェクトダイアログでWeb APIを選択します。

OKをクリックすると、基本のものに加えてWeb API関連のコンポーネントへの参照やファイルが追加されたASP.NET MVC 4のプロジェクトが作成されます。

Modelの追加

APIを通して提供するモデルとなるクラスを追加します。Modelsのフォルダの下にHeroクラスを追加します。EFを使ってSQL Serverにデータ保存するようにしています。

APIの実装

RESTのAPIの実装を追加します。GET, POST, DELETE, PUTを追加します。

まず、Controllersの下にデフォルトで生成された ValuesController.cs の名前をモデル名に合わせて HeroesController.cs に変更します。

HeroesController.csにModelへの参照を追加します。

まずはGetです。

エンティティモデルをリスト化して返しています。

次はPOST。

前回は複数のヒーローをリストで一気に塚で着るようにしていましたが、今回は名前を渡すと一人のヒーローを追加するようにしました。

Web APIのメソッド引数に[FormUrl]属性がついた場合か、何も指定が無い場合には、Urlより引数パースしようとします。[FromBody]属性がついた場合にはHTTPメッセージのボディのデータより引数のデータをパースしようとします。

引数でな与えられた名前で、EFを使ってヒーローのレコードを追加し、成功した場合には201を返すように処理しています。

次はDELETE。

Idを引数にとって、そのIdのヒーローを削除します。

次はPUT。

URL引数のidで与えられたIdのヒーローに対して、ボディに書かれている新しい名前でヒーローの名前委を変更します。

基礎的な内容は以上のようになります。

以前のWCF Web APIとの大きな違いはコントローラの各APIメソッドに対して属性が無くなり、それよりもメソッド名でRESTのどの命令に対応したメソッドかわかるようにしており、属性という設定が廃されてASP.NET MVCの「設定より規約」が徹底されています。

WCF Web APIのときにはWCFなので、サービスのテストページが自動的に作成されていましたが、ASP.NET Web APIとなって、現在その機能は実装されていませんので、Fiddllerなどでテストされる場合のhttpヘッダの設定等については、コード中のXMLコメントに書いています。またヘルプページの自動作成機能も無くなっています。ただ、ASP.NETのロードマップには両方とも含まれているので、いずれこれらの機能も追加されるかもしれません。

今回GitHubでソースコードを公開していますので、全体コードを確認されたい方や、ご興味をもたれた方は下をご確認下さい。

https://github.com/ishisaka/superhero2

One thought on “ASP.NET Web APIサーバー編”

コメントを残す