スマホ×Windows Azure開発講座(iOS編)

第3回 iOS上にRESTサービスの構築

この記事を読むのに必要な時間:およそ 3 分

はじめに

前回まではiOSデバイス+Windows Azureプラットフォームの開発における,技術概要と開発環境の構築についてご紹介しました。今回から,実際にAzureサービスとiOSアプリケーションとの開発を始めていきたいと思います。今回はWebロール上で動作させるサービスの開発を行いたいと思います。

Windows Azureのサービス開発における環境構築については,第2回の記事を参考にして,行ってください。本記事では,Visual Studio 2010を使用して開発内容を説明していきます。第2回で紹介したとおり,Visual Web Developer 2010 Expressでも開発可能です。以降,Visual Studioと表記しますので,適宜環境に合わせて読み替えてください。

作成するサービスの概要

今回の例として作成するのは,ユーザが星座を指定してカードを引くという,星座占いもどきのサービスです。サービスを呼び出すと,ランダムにカードを返すメソッドを実装します。iOSデバイスから扱いやすいように,エンティティはJSONで,インターフェースはRESTにします。

プロジェクトのセットアップ

今回作成するサービスは,Windows AzureのWebロールをターゲットとします。開発はWindows Azureエミュレーション環境で行います(第2回の環境構築にこちらも含まれています)。

Visual Studioを(Vista以降では管理者権限で)起動したらテンプレートからプロジェクトを生成します。メニューの「ファイル(F)」「新しいプロジェクト…(P)」でダイアログが開きます。左のリストから「インストールされたテンプレート」「Visual C#」を展開して,「Cloud」を選択します。中央リストに表示された「Windows Azure Project」を選んで,プロジェクト名を名前のテキストボックスに入力します。ここでは「GihyoiOSAzureSample1」とします。[OK]ボタンをクリックすると,次に[New Windows Azure Project]ダイアログが開きます。左のリストから「WCF Service Web Role」を選択して,[>]ボタンで追加して,[OK]ボタンでプロジェクトが生成されます図1)。

図1 Webロールの選択

図1 Webロールの選択

ソリューションにAzureプロジェクトの「GihyoiOSAzureSample1」「WCFServiceWebRole1」があります。後者のプロジェクトの名を変更しておきます。今回は占いをモチーフにしたサービスを作るので,「DivinationWebRole」としましょう。さらに,このプロジェクトの項目の直下に,「Service」「Entity」フォルダを作成しておきます。いずれの操作も「ソリューションエクスプローラー」で,プロジェクトの項目のコンテキストメニュー経由で実行できます。プロジェクト名を変更したら,続けてプロジェクトのプロパティから,[アセンブリ名][既定の名前空間]も同様に「DivinationWebRole」に変えておきます。

エンティティの追加

JSONで表現するカードのエンティティクラスを作成します。作成した「Entity」フォルダを選択してコンテキストメニューから[追加 (D)][新しい項目の追加…(W)]を選びます。[新しい項目の追加]ダイアログでテンプレートのWebから「クラス」を選択します。名前に「Card.cs」を入力して,[追加(A)]をクリックして追加します。

Card.csは下記のとおりにします。

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace DivinationWebRole.Entity
{
    [DataContract]
    public class Card
    {
        [DataMember(Name = "rank")]
        public int Rank { get; set; }

        [DataMember(Name = "desc")]
        public string Description { get; set; }
    }
}

DataContract属性をクラスに,プロパティにDataMember属性を追加します。JSONのキーになるので,Nameを小文字にしてセットしています。

サービスの作成

先ほど,作成した「Service」フォルダを選択してコンテキストメニューから[新しい項目の追加]ダイアログを開き,テンプレートのWebから「AJAX対応WCFサービス」を選択して図2),サービス名を「DivineService.svc」として,[追加(A)]ボタンで閉じます。

そうすると自動的に,Visual Studio上で追加作成されたDivineService.svcのコードが開きます。

図2 Ajax対応WCFサービスの選択

図2 Ajax対応WCFサービスの選択

DoWorkメソッドをDivineメソッドに変えて処理を,下記のとおり実装してみます。Divineメソッドは,zodiac引数に星座を表す文字列を受け取り,それを用いて,CardクラスのDescriptionプロパティをセットします。Rankプロパティにはランダムに1~10の整数をセットします。

Using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;

namespace DivinationWebRole.Service
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class DivineService
    {
        [OperationContract]
        [WebGet(UriTemplate = "card/{zodiac}",
                ResponseFormat = WebMessageFormat.Json)]
        public Entity.Card DrawCard(string zodiac)
        {
            var random = new Random();
            var card = new Entity.Card();
            card.Rank = random.Next(10) + 1;
            card.Description = "This is a sample " + zodiac + " Card.";
            return card;
        }
    }
}

WebGet属性のUriTemplate値は,REST仕様のURLパス適用を定義するものです。

UriTemplateを使用するには,Web.configのビヘイビア(behavior)定義を変更する必要があります。Web.configを開いて,<behavior name="DivinationWebRole.Service.DivineServiceAspNetAjaxBehavior">内の<enableWebScript />を<webHttp/>に置き換えます。

<behavior name="DivinationWebRole.Service.DivineServiceAspNetAjaxBehavior">
  <webHttp />
</behavior>

開発環境でのテスト実行

「DivineService.svc」のコンテキストメニューから[ブラウザーで表示(B)]でサービスが起動し,Internet Explorerが開かれます。

URLは「http://localhost:<ポート>/Service/DivineService.svc」となって,WSDLを使ったクライアントの生成の説明が表示されています図3)。

図3 サービスのページ

図3 サービスのページ

ここでURLパスの末尾に実装したDivineメソッドのパス「card/leo」にアクセスします。

ブラウザーで「http://localhost:<ポート>/Service/DivineService.svc/card/leo」にアクセスすると,JSONでCardクラスの内容が返ります。テキストエディタで開くと,下記のように表示されます。「leo」の部分はパスの値が入り,「7」の値はランダムになります。

{"desc":"This is a sample leo Card.","rank":7}

今回紹介したサンプルコードはこちらからダウンロードできます。

最後に

本記事では,Windows Azureサービスを一般的なWebロール用にWCFベースでC# .NETで作成してみました。次回以降は,今回作成したサービスをクラウドに配備して, サービスにアクセスするiOSアプリケーションの開発を進めていきたいと思います。

再びのご紹介になりますが,Windows Azure プラットフォームは無料で試すことができます。MSDNサブスクリプション会員であれば,さらに相当量の利用が無償で使用できます。これを機会に試してみては,いかがでしょうか。

著者プロフィール

高橋俊光(たかはしとしみつ)

ティルフィン合同会社 代表。

メーカー企業でパッケージソフト開発などに携わった後,ティルフィン合同会社を設立しフリーエンジニアとして,RIAやスマートモバイルアプリとサーバーサイドと広い分野で開発に従事。iOSアプリ トレンドトピック,Newstrushをリリースしている。

コメント

コメントの記入