ASP.NET CoreのWeb APIを作成する課題

前回の「ASP.NET Core を使用して Web UI を作成する」の続き。今回は「ASP.NET Core コントローラーを使用して Web API を作成する」をやってみた。

シナリオ

今回のシナリオは会社のWebネットショップとモバイルアプリケーションの前提条件として、ピザインベントリ管理用の RESTful サービス(ピザの種類の追加、表示、変更、削除)を開発するように依頼されたという内容。

(前回ほどはこのシナリオが色濃く登場はしなかった)

面白い点

.NET HTTP REPL を使用した Web API のテストにあるように、

 

 learn.microsoft.com

 

ブラウザでURLを叩かなくても、コマンドラインからAPIの結果を確認できた。

下記のようなコマンドでWeb APIに接続。

httprepl https://localhost:{PORT}/

以降はコマンドプロンプトみたいな感覚で試せる。例えば、下記のようなコマンドでディレクトリ(エンドポイント)を移動できる。

cd WeatherForecast

GETの要求を実行した結果は下記のように表示される

コマンドで試せるということは自動テストが試しやすい。

つまずいた点

HTTPSにアクセスできない

dotnet runを実行すると、下記のように表示されるらしい。しかし、僕のコマンドラインには、https://localhost:7294の行はなかった。

Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7294
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5118 
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Stackoverflowによると、

stackoverflow.com

下記の2通りで解決

  1. dotnet run --launch-profile httpsで起動させる
  2. launchsettings.jsonhttpsの記載を上に持ってくる

2つ目の具体例はこんな感じ

  "profiles": {
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://localhost:7259;http://localhost:5119",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:5119",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },

 

httpreplでWebへの接続

チュートリアルでは、

httprepl https://localhost:{PORT}

と書かれているが、これだけでは接続できなかった。最後にスラッシュが必要

httprepl https://localhost:{PORT}/

httpreplでパラメータを渡す

GETでidに1を渡すには、ブラウザだと下記のように実行できる。

https://localhost:7259/pizza/1

これをコマンドで実行する方法がわからなかったが...

読み進めたら普通に書いてあった。以下2通りで実行できた。

https://localhost:7259/> get pizza/1

 

https://localhost:7259/Pizza> get 1

まとめ

今回は不明点は特になかった。こんな簡単な記述でWeb APIが実装できるのかと関心したのと、コマンドラインAPIを試せるのが面白かった。