演習 - データ ストアを追加する
ピザ用の Web API の実装を始める前に、操作を実行できるデータ ストアが必要です。
インベントリ内のピザを表すには、model
クラスが必要です。 このモデルには、ピザの特徴を表すプロパティを含めます。 モデルは、Web API にデータを渡すため、また、データ ストアにピザ オプションを保持するために使用されます。
このユニットでのそのデータ ストアは、簡単なローカル メモリ内キャッシュ サービスです。 実際のアプリケーションでは、Entity Framework Core で SQL Server などのデータベースを使うことを検討します。
ピザ モデルを作成する
次のコマンドを実行して、Models フォルダーを作成します。
mkdir Models
Visual Studio Code で Models フォルダーを選んで、Pizza.cs という名前の新しいファイルを追加します。
プロジェクトのルートに、Models ディレクトリと空の Pizza.cs ファイルが含まれるようになります。 ディレクトリ名 Models は規則です。 ディレクトリ名の由来は、Web API で使用している Model-View-Controller アーキテクチャです。
次のコードを Models/Pizza.cs に追加し、変更を保存します。 このクラスにはピザを定義します。
namespace ContosoPizza.Models; public class Pizza { public int Id { get; set; } public string? Name { get; set; } public bool IsGlutenFree { get; set; } }
データ サービスを追加する
次のコマンドを実行して、Services フォルダーを作成します。
mkdir Services
Visual Studio Code でそのフォルダーを選んで、PizzaService.cs という名前の新しいファイルを追加します。
次のコードを Services/PizzaService.cs に追加し、変更を保存します。 このコードでは、メモリ内のピザ データ サービスを作成します。
using ContosoPizza.Models; namespace ContosoPizza.Services; public static class PizzaService { static List<Pizza> Pizzas { get; } static int nextId = 3; static PizzaService() { Pizzas = new List<Pizza> { new Pizza { Id = 1, Name = "Classic Italian", IsGlutenFree = false }, new Pizza { Id = 2, Name = "Veggie", IsGlutenFree = true } }; } public static List<Pizza> GetAll() => Pizzas; public static Pizza? Get(int id) => Pizzas.FirstOrDefault(p => p.Id == id); public static void Add(Pizza pizza) { pizza.Id = nextId++; Pizzas.Add(pizza); } public static void Delete(int id) { var pizza = Get(id); if(pizza is null) return; Pizzas.Remove(pizza); } public static void Update(Pizza pizza) { var index = Pizzas.FindIndex(p => p.Id == pizza.Id); if(index == -1) return; Pizzas[index] = pizza; } }
このサービスにより、既定で 2 つのピザが含まれる簡単なメモリ内データ キャッシュ サービスが提供されます。 この Web API では、デモの目的でそのサービスを使います。 Web API を停止して起動すると、
PizzaService
のコンストラクターにより、メモリ内データ キャッシュは 2 つの既定のピザにリセットされます。
Web API プロジェクトをビルドする
次のコマンドを実行して、アプリをビルドします。
dotnet build
ビルドは警告なしで成功します。 ビルドに失敗した場合は、出力でトラブルシューティング情報を確認してください。
次のユニットでは、Pizza
モデルと PizzaService
クラスを使用するコントローラーを作成します。