WCF Web API, WCF Data Servicesとはまた違うREST APIライブラリ

※ご注意
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


WCF Web APIはWCF Data Servicesと同様にWCFでREST APIを持つServiceを構築するためのライブラリですが、Data Servicesが基本的にData Baseのテーブルに対してREST APIを構築する物であったのに対して、Web APIはもう少しDBに対して抽象度が上がり、オブジェクトモデルに対するREST APIを構築するためのライブラリとなっていて、通常のWEB開発者にとってはこちらの方が素直なイメージに近い物だと思います。また、通常のWCFのホスト方法とは別にASP.NETでもサービスをホスト可能となっており、特にASP.NET MVCとの親和性が高く、既存のASP.NET MVCのアプリケーションにREST APIを追加したいような場合や、AzureのWEB Roleに配置したい場合に向いていると思います。

WCF REST Starter kitをご存じの方はそれの後継と考えて良さそうです。(追記:1:11)

この記事はMSエバンジェリストの@chackさんのMSDN Blog記事「Web API を始めてみよう」を発展させて、まずEntity Framework Code Firstのモデルを用意して、そのモデルに対してREST APIを用意するというシナリオで進めていきたいと思います。ですので、そこまでは終わっている前提で進めていきます。

Modelの追加

NuGetなどでEntity Framework 4.1への参照を追加します。

次にModelを追加します。Modelsフォルダの下にHero.csを追加し、以下のようにEF Code FirstのエンティティクラスとDbContextのクラスを追加します。

APIの実装

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

まずはGET。これはChackさんのコードの改造です。

エンティティモデルをリスト化して素直に返すだけです。

次はPOST。

今回はリストで受けて複数のヒーローを一気に追加できるようにしています。

GET以外の処理についてはWebInvokeAttributeクラスを使用し、Method引数でHTTPのコマンドを指定しします。

13行、24行の処理はDBにデータがないときのための処理です。

次はDELETE。

今度はidを引数でとって、そのidのレコードを削除する仕様にしました。

WebInvokeAttributeクラスのUriTemplate引数でidを引数としてとるように指定しています。

次はPUT。

単独オブジェクトを受けて、DBを更新します。

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

POSTなどに複数のメソッドを割り付けたい場合にはメソッドを追加し、WebInvokeアトリビュートのMethodは同じ(POSTならPOST) としつつUriTemplateで追加したメソッドに合わせたuri(処理や引数指定 「Sub?x={x}&y={y}」とか)を設定していくことになります。

追加リソース

次を進めていくための追加リソースです。

WCFのCodePlexがまずは古本的なリソース源です。

WCF Web API ヘルプファイル

これはCodePlexで公開されているWCF Web APIのCHMファイルのZIPファイルで、現在まとまったドキュメントがないWeb APIの理解のためにリファレンスできるドキュメントはほぼこれだけです。特にWCFWebAPI_Con.chmは総論の内容で、まず始めるに当たってはこの中のGetting Startは目を通すべきでしょう。もう一つのWebAPI_mref.chmはライブラリのリファレンスです。

Implementing an Authorization Attribute for WCF Web API(英文)

こちらはASP.NET MVC & Web APIで公開したREST APIに対して認証をかける場合の方法です。

Microsoft Web API – the REST is done by WCF (Part 1)

大変良くまとまったBlog記事です。

全体コード

APIs/SuperHeroApi.cs

Nodels/Hero.cs

Global.asax.cs

プロジェクトのダウンロード

2 thoughts on “WCF Web API, WCF Data Servicesとはまた違うREST APIライブラリ”

コメントを残す