nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

REST APIをAzure MobileApps SDKを利用して実行する

前回のエントリーではMicrosoft.Rest.Clientを利用してAzure API AppのREST APIを利用しました。

www.nuits.jp

ちなみにこれ、AutoRestというプロダクトの一部みたいですね。今日もう少し調べてて知りましたw
さて、前回のエントリーを書いたところ、MobileApps SDKを使うと簡単にできるよ!との情報をいただきましたので試してみました。
確かに簡単ですね。

というわけで、今回はMicrosoft.Azure.Mobile.Clientを利用してREST APIを呼び出してみたいと思います。

Azure MobileApps SDKを利用してREST APIを呼び出す

さて、今回は前回のコードをベースにやや修正を入れてAutoRestからMobileAppsのSDKに変更します。

ベースとなるコードはここにありますので、よかったらご覧ください。

github.com

手順は次の通りです。

  1. Microsoft.Rest.ClientRuntimeのNuGetパッケージをアンインストールする
  2. Microsoft.Azure.Mobile.ClientをNuGetからインストールする
  3. MainPageViewModel.csのREST呼び出しコードを修正する

1.と2.は解説の必要はないと思いますので割愛します。
というわけでMainPageViewModel.csの修正方法を解説しましょう。

前回のコードは次のようになっていたはずです。

private async void GetAll()
{
    var helloApiService =
        new HelloApiService(
            new Uri("http://helloapiservice.azurewebsites.net"),
            new AnonymousServiceClientCredentials());
    var values = await helloApiService.GetAllAsync();
    foreach (var value in values)
    {
        Values.Add(value);
    }
}

これを次のように修正します。

private async void GetAll()
{
    var client = 
        new MobileServiceClient(
            "http://helloapiservice.azurewebsites.net");
    var values = 
        await client.InvokeApiAsync<List<string>>(
            "Values", System.Net.Http.HttpMethod.Get, null);
    foreach (var value in values)
    {
        Values.Add(value);
    }
}

これだけ。
確かに簡単です。
AutoRestだとコード自動生成の手間が必要でしたが、MobileApps SDKの場合そう言った手間が一切ありません。

AutoRestとMobileApps SDK考察

触ってみた範囲では、どちらかが一方的に優れているとも言い切れないかな?というのが感想です。
ただし、ここまでの範囲では認証やパフォーマンスなどに一切触れていないため、以下の考察は不十分であることを念頭に置いてお読みください。

AutoRestとMobileApps SDKを比較した場合、APIレベルとしてはMobileApps SDKの方がやや低レベルなレイヤーに位置し、AutoRestの方がやや高レベルに位置するように思えます。

AutoRestはSwaggerからクライアントコードを自動生成するため、実際のREST APIの仕様に則ったクライアントが自動生成されることから、型安全性が高い点が最大のメリットでしょう。

逆にいうと、AutoRestではSwaggerを用意しそこからクライアントを自動生成する手間が発生します。
この点は、MobileApps SDKの方が手軽でしょう。

またAutoRestをXamarinから利用する場合、共通部分を.NET Standard限定にする必要がありまずが、MobileApps SDKはPCLでも利用できその点も優位に思えます。
とはいえAutoRestもNative側からクライアントをインジェクションする形をとればPCLでも利用できそうな気がしないでもないです(また手間が増える。。。)。
今度試してみましょう。

AutoRestとMobileApps SDKという範囲で総括すると、手間をかけても型安全性などを取りたいならAutoRestを、手軽な開発スタイルをとるならMobileApps SDKでしょうか?
それ以上はもう少し検証が必要そうです。

特にパフォーマンスや認証関係などが未評価な点は差し引いて判断ください。

というわけで、今日はここまで。
それではまた!