练习 - 运行应用

已完成

在上一个练习中,你为团队的 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. 请按住 Ctrl 并选择该 URL 以打开它。 浏览器将打开 API 的 / 位置,返回文本 Contoso Pizza management API. Go to /swagger to open the Swagger test UI.

  3. 在浏览器的地址栏中,将 /swagger 添加到 URL 的末尾,然后选择 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. 向下滚动到“GET /Pizza{id}”操作并将其展开。 然后选择“试用”。
    2. 在 id 字段中,输入 2 并选择“执行”。

    API 返回“夏威夷”披萨。 请注意,已填充 saucetoppings 属性,因为 PizzaService.GetById 方法使用 Include 扩展方法。

  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. 将另一种配料添加到烧烤牛肉披萨:

    1. 向下滚动到“PUT /Pizza{id}/addtopping”操作并将其展开。 选择“试用”。
    2. 在 id 字段中输入 4。
    3. 在 toppingId 字段中,输入 5。
    4. 选择“执行”。

    API 更新披萨并返回成功代码。 在数据库中,一条记录已添加到 PizzaTopping 以将披萨与配料相关联。

  5. 更改烧烤牛肉披萨上的酱汁:

    1. 向下滚动到“PUT /Pizza{id}/updatesauce”操作并将其展开。 选择“试用”。
    2. 在 id 字段中输入 4。
    3. 在 sauceId 字段中,输入 2。
    4. 选择“执行”。

    API 更新披萨并返回成功代码。 在数据库中,Pizza 记录已更新,将披萨与新酱汁相关联。

  6. 返回到“GET /Pizza{id}”操作,通过将 id 字段设置为 4 来请求烧烤牛肉披萨。 然后选择“执行”。 请注意,saucetoppings 属性已填充。

    {
        "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. 你已意识到用阿尔弗雷多酱和菠萝制作的烟熏牛腩披萨是个糟糕的主意。

    删除披萨:

    1. 找到“DELETE /Pizza{id}”操作并将其展开。 选择“试用”。
    2. 在 id 字段中输入 4。
    3. 选择“执行”。

    API 删除披萨并返回成功代码。 数据库中 PizzaTopping 中的 Pizza 记录和相关联的记录会被删除。

  8. 在运行应用的终端中,选择 Ctrl+C 停止正在运行的应用。

提示

你可以试用该应用。 每当想从新数据库开始时,停止应用并删除 ContosoPizza.db、.db-shm 和 .db-wal 文件。 然后再次运行该应用。

干得漂亮! 该应用正在按预期使用数据库! 在下一个单元中,将从现有数据库搭建实体模型基架。