前回のエントリーではMicrosoft.Rest.Clientを利用してAzure API AppのREST APIを利用しました。
ちなみにこれ、AutoRestというプロダクトの一部みたいですね。今日もう少し調べてて知りましたw
さて、前回のエントリーを書いたところ、MobileApps SDKを使うと簡単にできるよ!との情報をいただきましたので試してみました。
確かに簡単ですね。
というわけで、今回はMicrosoft.Azure.Mobile.Clientを利用してREST APIを呼び出してみたいと思います。
Azure MobileApps SDKを利用してREST APIを呼び出す
さて、今回は前回のコードをベースにやや修正を入れてAutoRestからMobileAppsのSDKに変更します。
ベースとなるコードはここにありますので、よかったらご覧ください。
手順は次の通りです。
- Microsoft.Rest.ClientRuntimeのNuGetパッケージをアンインストールする
- Microsoft.Azure.Mobile.ClientをNuGetからインストールする
- 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でしょうか?
それ以上はもう少し検証が必要そうです。
特にパフォーマンスや認証関係などが未評価な点は差し引いて判断ください。
というわけで、今日はここまで。
それではまた!