演習 - アプリを実行する
前の演習では、データベース操作を実装するチームの API のコードを記述しました。 この演習では、データベースに接続された API をテストします。
API を実行する
ターミナル ウィンドウでアプリを実行します。
dotnet run
アプリの実行からの出力を調べます。次の情報に注意してください。
- EF Core は、実行した SQL コマンドを
info
ログ イベントとしてエコーします。 - データベースがまだ存在しない場合、SQL の
CREATE
コマンドを使ってテーブルとインデックスが定義されます。 - データベースがまだシードされていない場合は、
INSERT
コマンドが実行されてシード データが追加されます。 - セキュリティのため、パラメーターの値はコンソールにエコーされません。 この設定は EnableSensitiveDataLogging を使って変更できます。
- EF Core は、実行した SQL コマンドを
SQLite エクスプローラーを使用して、シードされたデータベースを調べます。 各テーブルにはデータがあります。
Swagger に移動する
API が実行されているので、API をテストして、操作が期待どおりに動作するかどうかを確認します。 API は、Swagger を使用してテスト UI を提供するように構成されています。 Swagger は、RESTful Web サービスの設計、ビルド、ドキュメント化、使用に役立つツールです。
アプリの実行後に表示される出力で、アプリがリッスンする HTTP URL を見つけます。 出力は次の例のようになります。
info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5200
URL を開くには、Ctrl キーを押しながら URL を選びます。 ブラウザーで API の
/
の場所が開かれて、Contoso Pizza management API. Go to /swagger to open the Swagger test UI.
というテキストが返されますブラウザーのアドレス バーで、URL の最後に
/swagger
を追加して、Enter キーを押します。
CRUD の操作をテストする
次の手順では、Swagger UI を使って、クライアント アプリケーションが行う方法で各 API の操作をテストします。 各操作の後、SQLite エクスプローラーでデータベースを調べて、行われたデータベースの変更を確認します。
ピザの完全なリストを要求します。
- 見出し [Pizza] の下で、[GET /Pizza] 操作を展開し、[試してみる] ボタンを選択します。
- [実行] ボタンを選択します。
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 } ]
ヒント
プロパティ
sauce
とtoppings
が null になっているのはなぜでしょう。PizzaService.GetAll
メソッドでは、Include
拡張メソッドを使ってナビゲーション プロパティを読み込むように指定しなかったので、これは想定される結果です。ピザを 1 つ要求します。
- [GET /Pizza/{id}] 操作まで下にスクロールして展開し、[試してみる] ボタンを選択します。
- [id] フィールドに「2」と入力し、[実行] を選択します。
API からは "Hawaiian" ピザが返されます。
PizzaService.GetById
メソッドではInclude
拡張メソッドを使用しているため、sauce
およびtoppings
プロパティが設定されていることに注意してください。新しいピザを追加します。
[POST /Pizza] 操作 (先ほど使用した [GET] 操作の間にある) まで上にスクロールし、それを展開して、[試してみる] ボタンを選択します。
[要求本文] テキスト ボックスに、次の JSON を貼り付けます。
{ "name": "BBQ Beef", "sauce": { "name": "BBQ", "isVegan": false }, "toppings": [ { "name": "Smoked Beef Brisket", "calories": 250 } ] }
[実行] を選択します。
API によって、
id
プロパティが設定された新しいピザが返されます。BBQ Beef ピザに別のトッピングを追加します。
- [PUT /Pizza/{id}/addtopping] 操作まで下に スクロールし、それを展開して、[試してみる] ボタンを選択します。
- id フィールドに、「4」と入力します。
- toppingId フィールドに、「5」と入力します。
- [実行] を選択します。
API によってピザが更新され、成功コードが返されます。 データベースでは、ピザとトッピングを関連付けるレコードが
PizzaTopping
に追加されます。BBQ Beef ピザのソースを変更します。
- [PUT /Pizza/{id}/updatesauce] 操作まで下に スクロールし、それを展開して、[試してみる] ボタンを選択します。
- id フィールドに、「4」と入力します。
- sauceId フィールドに、「2」と入力します。
- [実行] を選択します。
API によってピザが更新され、成功コードが返されます。 データベースでは、
Pizza
レコードが更新され、ピザが新しいソースに関連付けられます。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 } ] }
Alfredo ソースとパイナップルのスモーク ブリスケット ピザがひどいアイデアであることはわかります。
ピザを削除します。
- [DELETE /Pizza/{id}] 操作を見つけて展開し、[試してみる] ボタンを選択します。
- id フィールドに、「4」と入力します。
- [実行] を選択します。
API によってピザが削除され、成功コードが返されます。 データベースでは、
Pizza
レコードと、PizzaTopping
内の関連付けられているレコードが削除されます。アプリを実行しているターミナルで、Ctrl+C キーを押して実行中のアプリを停止します。
ヒント
アプリを試すことができます。 新しいデータベースで始めたいときは常に、アプリを停止し、ContosoPizza.db、.db-shm、.db-wal ファイルを削除します。 その後、アプリをもう一度実行します。
上出来 アプリは意図したとおりにデータベースを操作しています。 次のユニットでは、既存のデータベースからエンティティ モデルをスキャフォールディングします。