なんかつくるよ(その1:Web APIを使う)

ASP.NETを使っていたのは5年くらい前で、いまやすっかり様相が変わっております。新しいASP.NETをちょっと勉強しつつ、こちらにメモを書いていこうと思います。

まずさっそくどの技術を使えばいいのかすらわからない。うーん。いろいろさまよったあげくたぶんASP.NETASP.NET MVCってのになったんだろうと見当を付けて、ASP.NET MVC 4をやることにしました。しかしまあ、ベータ情報がまざって出てきて実際にリリースされたものがそれをそのまま踏襲できるのかどうかがよく分からないなあ。まあいいか。とりあえずはじめてみます。

環境はVS2012+.NET 4.0。ソリューションを作って、ASP.NET MVC 4プロジェクトを作成します。作成後にいきなりいくつかの選択肢が出てきます。今回APIをちゃんと作りたいと思うのでWeb APIに進むことにしました(すでに道を逸れている感じがものすごくしますね!)

プロジェクトが出来ると自動的に出来たファイルが山のように。

ValuesController.csというのがすでに開かれていて、RESTの各HTTPメソッドからここに飛んでくるんだなと言うことが見て取れます。何も触らずF5をおもむろにおしてみると

いきなりなんか起動します。

ひとまずAPIってことですから、UIは別にどうでも良いのでとりあえずモデルを作ってみることにします。Modelsの下にPOCOのファイルを適当に追加します。

今回はコンテスト主催アプリを作ろうと思ったので、まずコンテストそのものを定義するためのクラスを作ってみました。

namespace ContestOrganizerAPI.Models {
    public class Competition {
        public long Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
}

つぎにValuesController.csをCompetitionsController.csに書き換え、クラスも書き換えます。中身も適当に変更。[FromBody]とかよくわからん属性があるな。

namespace ContestOrganizerAPI.Controllers {
    public class CompetitionsController : ApiController {
        // GET api/competitions
        public IEnumerable<Competition> Get() {
            return new Competition[] { new Competition(){Id = 1L, Name = "value1",Description = "value2" }};
        }

        // GET api/competitions/5
        public Competition Get(long id) {
            return new Competition() { Id = 5L, Name = "value1", Description = "value2" };
        }

        // POST api/competitions
        public void Post([FromBody]Competition value) {
        }

        // PUT api/competitions/5
        public void Put(long id, [FromBody]Competition value) {
        }

        // DELETE api/competitions/5
        public void Delete(long id) {
            
        }
    }
}

さて、これでF5を押して……もトップページが出るだけなのでAPIがどうなったかはわかんないですね。こういうときはF12っていうIEのツールを使うらしい。IEを起動してF12を押すと出てきた。

[ネットワーク]タブで[キャプチャ]ボタンを押すと、ネットワークのやりとりがキャプチャできます。ふむふむ、JSONでデータが取得できていて中身は「[{"Id":1,"Name":"value1","Description":"value2"}」らしい。ちゃんと出来ています。

さて、次はUIか。