Exercício – Executar o aplicativo
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
No painel do terminal, execute o aplicativo:
dotnet run
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.
- O EF Core ecoa comandos SQL como eventos de log
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.
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
Para abrir a URL, selecione-a enquanto mantém a tecla Ctrl pressionada. O navegador abre no local
/
da API, que retorna o textoContoso Pizza management API. Go to /swagger to open the Swagger test UI.
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.
Solicite a lista completa de pizzas:
- No título Pizza, expanda a operação GET /Pizza e clique no botão Experimentar.
- 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
etoppings
são nulas? Esse resultado é esperado porque, no métodoPizzaService.GetAll
, você não usou o método de extensãoInclude
para especificar que as propriedades de navegação devem ser carregadas.Solicitar apenas uma pizza:
- Role para baixo até a operação GET /Pizza{id}, expanda-a e clique no botão Experimentar.
- No campo id, insira 2 e selecione Executar.
A API retorna a pizza "havaiana". As propriedades
sauce
etoppings
são preenchidas porque o métodoPizzaService.GetById
usa o método de extensãoInclude
.Adicione uma pizza:
Role até a operação POST /Pizza (localizada entre as operações GET que você usou), expanda-a e clique no botão Experimentar.
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 } ] }
Selecione Executar.
A API retorna a nova pizza com a propriedade
id
preenchida.Adicione outra cobertura à pizza de churrasco de carne:
- Role para baixo até a operação PUT /Pizza/{id}/addtopping, expanda-a e clique no botão Experimentar.
- No campo id, insira 4.
- No campo toppingId, insira 5.
- 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.Altere o molho da pizza de carne de churrasco:
- Role para baixo até a operação PUT /Pizza/{id}/updatesauce, expanda-a e clique no botão Experimentar.
- No campo id, insira 4.
- No campo sauceId, insira 2.
- 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.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
etoppings
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 } ] }
Você acabou de perceber que uma pizza de peito defumado com molho Alfredo e abacaxi é uma péssima ideia.
Exclua a pizza:
- Encontre a operação DELETE /Pizza{id}, expanda-a e clique no botão Experimentar.
- No campo id, insira 4.
- 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 emPizzaTopping
são excluídos.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.