Exercício – Executar o aplicativo

Concluído

No exercício anterior, você escreveu o código para que a API de sua equipe implemente operações de banco de dados. Neste exercício, você testará a API que conectou ao banco de dados.

Executar a API

  1. No painel do terminal, execute o aplicativo:

    dotnet run
    
  2. Inspecione a saída da execução do aplicativo e anote as seguintes informações:

    • O EF Core ecoa comandos SQL como eventos de log info conforme eles são executados.
    • Se o banco de dados ainda não existir, as tabelas e os índices serão definidos com comandos SQL CREATE.
    • Se o banco de dados ainda não estiver sido propagado, os comandos INSERT serão executados para adicionar os dados de propagação.
    • Por segurança, os valores de parâmetro não são ecoados para o console. Você pode alterar essa configuração usando EnableSensitiveDataLogging.
  3. Use o SQLite Explorer para explorar o banco de dados propagado. Cada tabela tem dados.

Acessar o Swagger

Agora que a API está em execução, teste-a para ver se as operações funcionam conforme o esperado. A API está configurada para usar o Swagger a fim de fornecer uma IU de teste. O Swagger é uma ferramenta que ajuda você a projetar, criar, documentar e consumir serviços da Web RESTful.

  1. Se a saída for exibida após a execução do aplicativo, localize a URL HTTP em que o aplicativo escuta. A saída deve ser semelhante ao seguinte exemplo:

    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: http://localhost:5200
    
  2. Para abrir a URL, selecione-a enquanto mantém a tecla Ctrl pressionada. O navegador abre no local / da API, que retorna o texto Contoso Pizza management API. Go to /swagger to open the Swagger test UI.

  3. Na barra de endereços do navegador, adicione /swagger no fim da URL e pressione Enter.

Testar operações CRUD

Nas etapas a seguir, você usará a IU do Swagger para testar cada uma das operações da API da mesma forma que um aplicativo cliente faria. Após cada operação, inspecione o banco de dados no SQLite Explorer para ver nele as alterações conforme elas acontecem.

  1. Solicite a lista completa de pizzas:

    1. No título Pizza, expanda a operação GET /Pizza e clique no botão Experimentar.
    2. Selecione o botão Executar.

    A API retorna a lista de pizzas como JSON (em Corpo da resposta).

    [
        {
            "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
        }
        ]
    

    Dica

    Por que as propriedades sauce e toppings são nulas? Esse resultado é esperado porque, no método PizzaService.GetAll, você não usou o método de extensão Include para especificar que as propriedades de navegação devem ser carregadas.

  2. Solicitar apenas uma pizza:

    1. Role para baixo até a operação GET /Pizza{id}, expanda-a e clique no botão Experimentar.
    2. No campo id, insira 2 e selecione Executar.

    A API retorna a pizza "havaiana". As propriedades sauce e toppings são preenchidas porque o método PizzaService.GetById usa o método de extensão Include.

  3. Adicione uma pizza:

    1. Role até a operação POST /Pizza (localizada entre as operações GET que você usou), expanda-a e clique no botão Experimentar.

    2. Na caixa de texto Corpo da solicitação, cole o seguinte JSON:

      {
        "name": "BBQ Beef",
        "sauce": {
          "name": "BBQ",
          "isVegan": false
        },
        "toppings": [
          {
            "name": "Smoked Beef Brisket",
            "calories": 250
          }
        ]
      }
      
    3. Selecione Executar.

    A API retorna a nova pizza com a propriedade id preenchida.

  4. Adicione outra cobertura à pizza de churrasco de carne:

    1. Role para baixo até a operação PUT /Pizza/{id}/addtopping, expanda-a e clique no botão Experimentar.
    2. No campo id, insira 4.
    3. No campo toppingId, insira 5.
    4. Selecione Executar.

    A API atualiza a pizza e retorna um código de sucesso. No banco de dados, é adicionado um registro a PizzaTopping que associa a pizza ao sabor.

  5. Altere o molho da pizza de carne de churrasco:

    1. Role para baixo até a operação PUT /Pizza/{id}/updatesauce, expanda-a e clique no botão Experimentar.
    2. No campo id, insira 4.
    3. No campo sauceId, insira 2.
    4. Selecione Executar.

    A API atualiza a pizza e retorna um código de sucesso. No banco de dados, o registro Pizza é atualizado para associar a pizza ao novo molho.

  6. Retorne à operação GET /Pizza/{id} e solicite a pizza de carne de churrasco definindo o campo id como 4. Em seguida, selecione Executar. Observe que as propriedades sauce e toppings são preenchidas.

    {
        "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. Você acabou de perceber que uma pizza de peito defumado com molho Alfredo e abacaxi é uma péssima ideia.

    Exclua a pizza:

    1. Encontre a operação DELETE /Pizza{id}, expanda-a e clique no botão Experimentar.
    2. No campo id, insira 4.
    3. Selecione Executar.

    A API atualiza a pizza e retorna um código de sucesso. No banco de dados, o registro Pizza e os registros associados em PizzaTopping são excluídos.

  8. No terminal com o aplicativo em execução, selecione Ctrl+C para interromper o aplicativo em execução.

Dica

Faça experimentos com o aplicativo. Sempre que você quiser começar um novo banco de dados, pare o aplicativo e exclua os arquivos ContosoPizza.db, .db-shm e .db-wal. Em seguida, execute o aplicativo novamente.

Ótimo trabalho! O aplicativo está trabalhando com seu banco de dados como esperado! Na próxima unidade, você fará o scaffold de modelos de entidade de um banco de dados existente.