REST Webサービスの作成が僕には難しすぎたので、誰にでも分かるよう手順を残す。

#まえおき
せっかくC#を勉強しているのなら、なんか流行りの技術をやってみたい！と思い立ち、いろいろWebを眺めていたところ、XamarinとかWPFとかUWPとかREST APIというのがイマドキらしい...ということで、REST Webサービスを作成してみることにしました（この時は、ま、ググればなんとかなるでしょと高を括っていた）。

しかし、「C# REST サービス」でググって出てきた数々の記事を読んでも、難しそーな横文字がバンバン出てきて心が折れてしまい…。正直、ANSI Cより新しい技術についていけない僕には、まず記事の内容が難しすぎました。

C#での実装方法は分かったけど、コンパイルしたものを実行するにはどうすりゃいいのさ？？ママー、main関数が無いよー！

例えるなら、「オススメの海外旅行」の記事を読んだはいいけど、まず飛行機の切符の買い方や、飛行機の乗り方がわからない…そういう状態です。

#神解説との出会い

...という状態であったのですが、ついに神解説を見つけました。

[Getting Started with ASP.NET Web API 2 (C#)](
https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api)

このレベルにまで落とし込んでくれれば、さすがの僕にも理解できました。
ただ、上の記事には書かれていない手順もあり、若干つまずいた部分もあったので、本記事ではその部分を補完した、もはや犬でも猫でもわかる「REST Webサービス作成と動作確認の手順」を示します。

#本記事の手順を実施して何ができるか
* REST Webサービスプログラムの作成（神解説で解説されています）。
* 作成したサービスをコマンドプロンプトから起動する。
* WebブラウザからサービスのURLを開くと、レスポンスが返ってくることを確認する。

#本記事の手順で使用するもの

* パソコン一式
* Microsoft Windows 10 Pro
* Microsoft Visual Studio 2017 Community
* IIS Express 10.0
* Microsoft Edge

Windows 10と新規にインストールするものは特に無いと思います。IIS Expressですが、これは「ASP.NET と Web開発」ワークロード（後述）のインストール時に一緒にインストールされるコンポーネントのようです。

#１．ワークロードのインストール

神解説の中では、プロジェクト新規作成のテンプレートから「ASP.NET Webアプリケーション」を選択する手順がありますが、そんなテンプレート見つからないよ～（T T）という人は、事前にVisual Studioインストーラーから**「ASP.NET と Web開発」**というワークロードをインストールしておく必要があります。

![vs2017_installer.png](https://qiita-image-store.s3.amazonaws.com/0/51871/d2df4814-68fb-95ad-e5ab-ee44bd92bced.png)

Visual Studioインストーラー（上の画像）は、Visual Studioの「新しいプロジェクト」ウィンドウから「Visual Studioインストーラーを開く」のリンクをクリックすると起動します。

#２．REST APIサービスの実装（C#）

サービスプログラムの実装ですが、以下の記事の手順をなぞるだけです。本記事の手順は、以下記事で作成されたアプリケーションを前提としていますので、ソースコードは一字一句違わずに写経します。

[Getting Started with ASP.NET Web API 2 (C#)](https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api)

本記事ではWebブラウザでの簡易な動作確認にとどめるため、ここでは「Create a Web API Project」から「Adding a Controller」までの手順をなぞるだけで十分です。

コーディングが終わったらビルドします。

#３．物理パスとポート番号の確認

ここが一番はまったのですが、ビルドして生成されたサービスプログラムを、どうやって起動すればいいの？という点です。

まず、RESTサービスを起動するのに必要な情報は、サービスの**物理パス**と**ポート番号**です。それを調べるために、いったんVisual Studioからサービスのインスタンスを開始します（以下図）。

![vs2017_debug.png](https://qiita-image-store.s3.amazonaws.com/0/51871/c8793e72-409f-2f71-e25a-84fb6eaf6360.png)

確認メッセージ（以下）が表示された場合、「デバッグの続行」を選択します。

![vs2017_continue_debug.png](https://qiita-image-store.s3.amazonaws.com/0/51871/b36c5415-c3c8-4078-9e48-4d6af02fc0a4.png)

自動的にブラウザが起動し、以下のようなエラー画面が表示されるかもしれませんが、無視して下さい。

![msedge_error.png](https://qiita-image-store.s3.amazonaws.com/0/51871/bda24c9a-6b66-17e6-c699-7e4fbf3083da.png)



すると、タスクトレイに変なアイコン（以下図では4つのうち右下）が表示されますが、これがIIS Expressのアイコンになります。

![iisexpress_in_task.png](https://qiita-image-store.s3.amazonaws.com/0/51871/ea46add4-d64d-790d-f8c1-e217290a3c86.png)

このアイコンを右クリックして表示されるメニューから「すべてのアプリケーションを表示」をクリックします。

![iisespress_context_menu.png](https://qiita-image-store.s3.amazonaws.com/0/51871/34756c1e-48fc-8f8a-61c8-854c3da7dc97.png)

以下のような画面が表示されるので、一覧から「Development Web Site」を選択すると、下にパスが表示されます。また、ポート番号も確認できます（以下例だと「51585」）。**このパスとポート番号をメモっておきます**。

![iisexpress_detail.png](https://qiita-image-store.s3.amazonaws.com/0/51871/5f6e6ffd-b55c-9955-b6fd-a18dbd953679.png)

#４．サービスの起動（コマンドプロンプト）

コマンドプロンプトを起動し、IIS Expressのディレクトリに移動し、以下のコマンドを実行します。物理パス（`C:\Users\～`）とポート番号は、上でメモったものを指定します。

```bat:サービスの起動コマンド
cd /d "C:\Program Files\IIS Express"
iisexpress.exe /path:"[物理パス]" /port:[ポート番号]
```

```bat:コマンドの実行結果
C:\Program Files\IIS Express>iisexpress.exe /path:"C:\Users\yz2cm\OneDrive\Documents\Visual Studio 2017\Projects\ProductsApp\ProductsApp" /port:51585
Copied template config file 'C:\Program Files\IIS Express\AppServer\applicationhost.config' to 'C:\Users\yz2cm\AppData\Local\Temp\iisexpress\applicationhost201771422524518.config'
Updated configuration file 'C:\Users\yz2cm\AppData\Local\Temp\iisexpress\applicationhost201771422524518.config' with given cmd line info.
Starting IIS Express ...
Successfully registered URL "http://localhost:51585/" for site "Development Web Site" application "/"
Registration completed
IIS Express is running.
Enter 'Q' to stop IIS Express
```

IIS Expressは「Q」キー押下で停止します。

#５．Webブラウザからのリクエスト

サービスを起動した状態で、Webブラウザを起動し、以下のURLを開きます。

`http://localhost:[ポート番号]/api/products/`

![msedge_result.png](https://qiita-image-store.s3.amazonaws.com/0/51871/16337c19-1c94-c6ff-f1d8-821fd7e138d1.png)

お、ちゃんとJSON形式でレスポンスが返ってきてますねえ。うれしい。

試しに、引数に`Id(=1)`を指定してリクエストしてみます。

`http://localhost:[ポート番号]/api/products/1`
![msedge_result2.png](https://qiita-image-store.s3.amazonaws.com/0/51871/6581e261-035b-429b-f768-9a281d5fcfac.png)

やったね！v(^ ^)

#おわりに
くぅ疲です。次回は、C#でクライアントアプリ（REST Webサービスにリクエストを投げて、レスポンスを表示するクライアントアプリケーション）を作成する予定です。

（2017年7月15日追記）クライアント編をアップしました。
[続・REST Webサービスの作成が僕には難しすぎたので、誰にでも分かるよう手順を残す。（クライアント編）](http://qiita.com/yz2cm/items/46d8e87a39f844904ea7)