演習 - アプリを実行する

完了

前の演習では、データベース操作を実装するチームの API のコードを記述しました。 この演習では、データベースに接続された API をテストします。

API を実行する

  1. ターミナル ウィンドウでアプリを実行します。

    dotnet run
    
  2. アプリの実行からの出力を調べます。次の情報に注意してください。

    • EF Core は、実行した SQL コマンドを info ログ イベントとしてエコーします。
    • データベースがまだ存在しない場合、SQL の CREATE コマンドを使ってテーブルとインデックスが定義されます。
    • データベースがまだシードされていない場合は、INSERT コマンドが実行されてシード データが追加されます。
    • セキュリティのため、パラメーターの値はコンソールにエコーされません。 この設定は EnableSensitiveDataLogging を使って変更できます。
  3. SQLite エクスプローラーを使用して、シードされたデータベースを調べます。 各テーブルにはデータがあります。

Swagger に移動する

API が実行されているので、API をテストして、操作が期待どおりに動作するかどうかを確認します。 API は、Swagger を使用してテスト UI を提供するように構成されています。 Swagger は、RESTful Web サービスの設計、ビルド、ドキュメント化、使用に役立つツールです。

  1. アプリの実行後に表示される出力で、アプリがリッスンする HTTP URL を見つけます。 出力は次の例のようになります。

    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: http://localhost:5200
    
  2. URL を開くには、Ctrl キーを押しながら URL を選びます。 ブラウザーで API の / の場所が開かれて、Contoso Pizza management API. Go to /swagger to open the Swagger test UI. というテキストが返されます

  3. ブラウザーのアドレス バーで、URL の最後に /swagger を追加して、Enter キーを押します。

CRUD の操作をテストする

次の手順では、Swagger UI を使って、クライアント アプリケーションが行う方法で各 API の操作をテストします。 各操作の後、SQLite エクスプローラーでデータベースを調べて、行われたデータベースの変更を確認します。

  1. ピザの完全なリストを要求します。

    1. [ピザ] 見出しの下で、[GET /Pizza] 操作を展開し、[試してみる] を選択します。
    2. [実行] ボタンを選択します。

    API により、ピザのリストが JSON として返されます ([応答本文] の下)。

    [
        {
            "id": 1,
            "name": "Meat Lovers",
            "sauce": null,
            "toppings": null
        },
        {
            "id": 2,
            "name": "Hawaiian",
            "sauce": null,
            "toppings": null
        },
        {
            "id": 3,
            "name": "Alfredo Chicken",
            "sauce": null,
            "toppings": null
        }
        ]
    

    ヒント

    プロパティ saucetoppings が null になっているのはなぜでしょう。 PizzaService.GetAll メソッドでは、Include 拡張メソッドを使ってナビゲーション プロパティを読み込むように指定しなかったので、これは想定される結果です。

  2. ピザを 1 つ要求します。

    1. GET /Pizza{id} 操作まで下にスクロールして、それを展開します。 次に、[試してみる] を選びます。
    2. [id] フィールドに「2」と入力し、[実行] を選択します。

    API からは "Hawaiian" ピザが返されます。 PizzaService.GetById メソッドでは Include 拡張メソッドを使用しているため、sauce および toppings プロパティが設定されていることに注意してください。

  3. 新しいピザを追加します。

    1. POST /Pizza 操作 (先ほど使用した GET 操作の間にあります) まで上にスクロールして、それを展開します。 次に、[試してみる] を選びます。

    2. [要求本文] テキスト ボックスに、次の JSON を貼り付けます。

      {
        "name": "BBQ Beef",
        "sauce": {
          "name": "BBQ",
          "isVegan": false
        },
        "toppings": [
          {
            "name": "Smoked Beef Brisket",
            "calories": 250
          }
        ]
      }
      
    3. [実行] を選択します。

    API によって、id プロパティが設定された新しいピザが返されます。

  4. BBQ Beef ピザに別のトッピングを追加します。

    1. PUT /Pizza{id}/addtopping 操作まで下にスクロールして、それを展開します。 [試してみる] を選択します。
    2. id フィールドに、「4」と入力します。
    3. toppingId フィールドに、「5」と入力します。
    4. [実行] を選択します。

    API によってピザが更新され、成功コードが返されます。 データベースでは、ピザとトッピングを関連付けるレコードが PizzaTopping に追加されます。

  5. BBQ Beef ピザのソースを変更します。

    1. PUT /Pizza{id}/updatesauce 操作まで下にスクロールして、それを展開します。 [試してみる] を選択します。
    2. id フィールドに、「4」と入力します。
    3. sauceId フィールドに、「2」と入力します。
    4. [実行] を選択します。

    API によってピザが更新され、成功コードが返されます。 データベースでは、Pizza レコードが更新され、ピザが新しいソースに関連付けられます。

  6. GET /Pizza{id} 操作に戻り、id フィールドを 4 に設定して、BBQ Beef ピザを要求します。 次に、[実行] を選びます。 sauce および toppings プロパティが設定されていることに注目してください。

    {
        "id": 4,
        "name": "BBQ Beef",
        "sauce": {
            "id": 2,
            "name": "Alfredo",
            "isVegan": false
        },
        "toppings": [
            {
            "id": 5,
            "name": "Pineapple",
            "calories": 75
            },
            {
            "id": 6,
            "name": "Smoked Beef Brisket",
            "calories": 250
            }
        ]
    }
    
  7. Alfredo ソースとパイナップルのスモーク ブリスケット ピザがひどいアイデアであることはわかります。

    ピザを削除します。

    1. DELETE /Pizza{id} 操作を見つけて展開します。 [試してみる] を選択します。
    2. id フィールドに、「4」と入力します。
    3. [実行] を選択します。

    API によってピザが削除され、成功コードが返されます。 データベースでは、Pizza レコードと、PizzaTopping 内の関連付けられているレコードが削除されます。

  8. アプリを実行しているターミナルで、Ctrl+C キーを押して実行中のアプリを停止します。

ヒント

アプリを試すことができます。 新しいデータベースで始めたいときは常に、アプリを停止し、ContosoPizza.db.db-shm.db-wal ファイルを削除します。 それから、アプリをもう一度実行します。

上出来 アプリは意図したとおりにデータベースを操作しています。 次のユニットでは、既存のデータベースからエンティティ モデルをスキャフォールディングします。