WCF Web API その3 RESTfulなWEB Serviceにするために改造する

※ご注意
WCF Web APIはマイクロソフトにより現在開発はキャンセルされ、ASP.NET MVC 4のASP.NET Web APIとして制作・公開されています。

.NET Framework/ASP.NETでRESTfulなAPI構築を目的に記事を探されている方は是非以下のリンクからASP.NET Web APIについてご確認下さい。
http://opcdiary.net/?page_id=5981


とりあえず前々回と前回でサービスと、そのクライアントを一通り作ったわけですが、現状RESTfulなWEBサービスとして考えるとあまり良くありません。

どの辺が良くないかというと、POSTのリターンが今のままだと200(OK)となっていて、実際にやっていることはサービス内でヒーローというリソースの新規作成(レコードの追加)しているので、ここは201(Created)を返したい。また、DELETEとPUTでリソースが見つからなかった場合に500(サーバーエラー)としていたのですが、これもやはり良い返し方ではなく、404(Not Found)でクライアントに返すべきでしょう。

ということで、今回は前々回で作成したサービス側にこれらの修正を加えます。

using句の追加

SuperHeroApi.csに以下のusing句を追加します。

POSTの修正

POSTの成功で201を返すようにコードを修正します。

変更した部分は34行です。201(Created)をリターンする応答メッセージのステータスにセットしています。

HTTPリクエストにたする応答のステータスを任意に変更したい場合にはまず、メソッドの戻り値をデータのカスタムタイプそのものではなくHttpResponseMessage(T)を戻り値の方として使用し、HttpResponseMessage.StatusCodeにHttpStatusCode列挙子をセットし、返すようにします。データのカスタムタイプそのものを返すようした場合にはステータスは200がWeb APIにより自動的につけられます。

DELETEの修正

引数で与えられたIDが見つからなかった場合に404を返すように修正します。

修正したの18行目です。HttpResponseExceptionをスローするように変更しています。ここではHttpResponseExceptionの引数にHttpStatusCode列挙子を渡して404(Not Found)を返すようにしています。HttpResponseExceptionの引数なしのコンストラクタで初期化した場合には500を返すように初期化されます。

PUTに対しても同様の修正を行います。

以上の修正を加えることでよりRESTfulになるよう修正できました。

全体コード

SuperHeroAPi.cs

コメントを残す