我水也

われみずなり

Azure上に.NET Coreでモバイルバックエンドを作ってみる

このエントリは Microsoft Azure Advent Calendar 2016 - Qiita の17日目です。

最近弊社で Xamarin に取り組んでいることもあり、全然モバイル畑ではないですが、勢いで Xamarin(その2) Advent Calendar 2016 - Qiita にもエントリしてしまったので、Azure側でバックエンドを実装してみようと思います。


まず、AzureにはMobile Appという超便利なモバイルバックエンドがあるので、普通に簡単に使いたい人はそちらを使うことをおすすめします。
このハンズオン資料の通りに進めるとMobile Appを使ったいい感じのiOS/Androidアプリが出来上がりますので、使ってみたい方は是非こちらを参考にしてください。
github.com
github.com

さて、今回はXamarinで実装したiOS/AndroidアプリをクライアントとするWeb APIを作ります。
普段はRuby on Railsをメインで触っているのですが、 Azure App Services がRuby未対応でPHP/Python/Node.jsとあるのですが、どれもなんとなく触ったことがあり、せっかくXamarin触るのでASP.NET Coreで実装してみたいと思います。← OSS on Azure!!
C#でびゅー!!
完全にサンプルのため、細かい認証やセキュリティなど全く気にしておりません。


今回の環境はこんな感じです。

  • Visual Studio for Mac Preview 2 (7.0 build 560)
  • .NET Core 1.0.0-preview2-1-003177

Overview

  1. リポジトリの準備
  2. Azure API Appの準備/設定
  3. ソリューションの作成
  4. NuGetパッケージの取得
  5. 実装
  6. リポジトリへプッシュ&デプロイ

リポジトリの準備

とりあえずリポジトリを準備しましょう。私は今回Bitbucketに作成しました。
ない方はFTPなどでもアップロード可能なので問題はありませんが、VSTS/GitHub/Bitbucketであればリポジトリとブランチの設定をするだけで、プッシュされた際に自動デプロイが行われますので、是非作成したいところです。

今回作成したリポジトリを一応公開しています。
bitbucket.org

Azure API Appの準備/設定

  • Azure Portal(https://portal.azure.com)を開きます
  • App Servicesメニューを選択します
  • + Add ボタンで新規追加しましょう
  • API Appで検索し、API Appを選択し作成
  • App Nameを入力し、サブスクリプションを選択
  • リソースグループを作成/選択しプランを選んで作成

(注意)プランはデフォルトでは課金されるプランだったと思うので、試しに触ってみたりする方はFreeプランを選択しましょう

作成されたAPI AppのDeployment optionsメニューを選択し、先程作成したリポジトリを登録します。
私はとりあえずサンプルなのでブランチはmasterにしました。

ここまでで一旦Azureはおしまいです。
(書きながらAzure Advent CalendarなのにAzure要素が少ない気がした・・・)

ソリューションの作成

  • VS for Macを開き、新規ソリューションを作成します
  • 「.NET Core」->「App」->「ASP.NET Core Empty Web Application」
  • Project Nameを入力し、作成

実装

この ASP.NET Core で Riot.js その1 - Qiita 記事を参考にさせていただき、APIとして必要そうな部分だけを実装しました。
内容についてはリポジトリを参照ください。
本当はSQL Server使いたかったのですが、今回はMockで断念しました・・・
マサカリという名のプルリク緩募です。C#不勉強なもので、勉強させてください。

リポジトリへプッシュ&デプロイ

実装が終わりましたら、コミット&プッシュをします。
ここでプッシュをすると最初に作ったAPI App側でデプロイが始まります。


実際にリクエストしてみると・・・このようなjsonが返ってきました!

[
    {
        "id":"a85f7358-a1b6-4aa1-9a9b-86b002824396",
        "name":"Udon",
        "zipCode":"222-2222",
        "address":"Nakasu",
        "phoneNumber":"092-222-2222",
        "memo":null
    },
    {
        "id":"326b03d9-2eb7-4c49-9fb0-7b47d97abe08",
        "name":"Ramen",
        "zipCode":"333-3333",
        "address":"Nagahama",
        "phoneNumber":"092-333-3333",
        "memo":null
    },
    {
        "id":"06810410-4358-47f8-bc99-79727974ef02",
        "name":"Pizza",
        "zipCode":"111-1111",
        "address":"Tenjin",
        "phoneNumber":"092-111-1111",
        "memo":null
    },
    {
        "id":"320b65e3-4433-42af-8145-6286c0d06426",
        "name":"Bento",
        "zipCode":"000-0000",
        "address":"Hakata",
        "phoneNumber":"092-000-0000",
        "memo":null
    }
]


Azure要素がちょっと少なかったですが、これをベースに Xamarin(その2) Advent Calendar 2016 - Qiita こっちでクライアント実装を頑張りたいと思います。