Este conteúdo ainda não foi otimizado para dispositivos móveis.
Para aproveitar a melhor experiência, acesse nosso site em um computador desktop usando o link enviado a você por e-mail.
Informações gerais
Neste laboratório, você desenvolverá um serviço de back-end para um aplicativo de teste on-line para processar o feedback dos usuários e salvar as pontuações.
O aplicativo de teste tem duas partes: o aplicativo da Web que será executado na primeira janela do Cloud Shell e o aplicativo do worker, executado na segunda janela do Cloud Shell.
Aplicativo da Web: gerencia a lógica de enviar o feedback do usuário para um tópico do Pub/Sub.
Aplicativo do worker: interpreta o feedback fornecido pelo usuário para depois executar a análise de sentimento e armazená-la em um banco de dados (Cloud Spanner).
Esse processo usa os produtos e os serviços do Google Cloud Platform (GCP):
Cloud Pub/Sub: o tópico alerta o aplicativo do worker e fornece a ele novas pontuações e feedback para análise.
Cloud Natural Language: fornece análise de sentimento no feedback.
Cloud Spanner: banco de dados para o aplicativo de teste.
Objetivos
Neste laboratório, você aprenderá a fazer o seguinte:
Criar e publicar mensagens em um tópico do Cloud Pub/Sub
Inscrever-se no tópico para receber mensagens em um aplicativo do worker separado
Fazer análises de sentimento no feedback
Criar uma instância e um esquema de banco de dados do Cloud Spanner e inserir dados nesse banco
Configuração e requisitos
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.
Faça login no Qwiklabs em uma janela anônima.
Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.
Quando tudo estiver pronto, clique em Começar o laboratório.
Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.
Clique em Abrir Console do Google.
Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.
Aceite os termos e pule a página de recursos de recuperação.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:
A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
Para listar o nome da conta ativa, use este comando:
Nesta seção, você acessará o Cloud Shell, clonará o repositório git que contém o aplicativo de teste, definirá as variáveis de ambiente e executará o aplicativo.
Clone o código-fonte no Cloud Shell
Digite o comando a seguir para clonar o repositório para o curso:
O aplicativo vai estar em execução quando aparecer uma resposta semelhante a esta:
20:55:20.756 [restartedMain] INFO c.g.training.appdev.QuizApplication - Started QuizApplication in 20:55:20.756
Configure o aplicativo do worker
Clique em Abrir uma nova guia à direita da guia do Cloud Shell para abrir uma segunda janela do Cloud Shell.
Digite o seguinte comando para alterar o diretório de trabalho:
cd ~/pubsub-languageapi-spanner/start
Prepare o ambiente na segunda janela do Cloud Shell:
. prepare_worker_environment.sh
Esse arquivo de script faz o seguinte:
Exporta as variáveis de ambiente GCLOUD_PROJECT e GCLOUD_BUCKET.
Cria e configura uma conta de serviço do GCP
Imprime o ID do projeto do Google Cloud Platform.
Agora, inicie o aplicativo do worker:
mvn exec:java@worker
Revise o aplicativo de teste
Ainda na segunda janela do Cloud Shell, clique em Visualização na Web > Visualizar na porta 8080 para ter acesso ao aplicativo de teste.
Na barra de navegação, clique em Take Test.
Clique em Places.
Responda à pergunta.
Após responder à pergunta, será exibida uma tela final para enviar feedback.
As pessoas que responderem ao teste poderão dar uma nota e enviar feedback.
Volte para o Cloud Shell. Pressione Ctrl+C nas duas janelas para interromper os aplicativos da Web e do worker.
Tarefa 2. Examinar o código do aplicativo de teste
Nesta seção, você vai examinar a estrutura de arquivos e os arquivos que afetam o aplicativo de teste.
Neste laboratório, você visualizará e editará arquivos. Você pode usar os editores de shell instalados no Cloud Shell, como nano ou vim, ou usar o editor de código do Cloud Shell. Este laboratório usa o editor de código do Cloud Shell.
Inicie o editor do Cloud Shell
No Cloud Shell, clique em Abrir editor.
Revise a estrutura de código do aplicativo do GCP
Acesse a pasta /pubsub-languageapi-spanner/start usando o painel do navegador de arquivos no lado esquerdo do editor.
Agora expanda a pasta /src/main/java/com/google/training/appdev. Todos os caminhos de código Java são relativos a essa pasta.
Selecione o arquivo Feedback.java na pasta .../services/gcp/domain.
Esse arquivo contém uma classe de modelo que representa o feedback enviado pelas pessoas que fizeram o teste.
Selecione o arquivo PublishService.java na pasta .../services/gcp/pubsub.
Esse arquivo contém uma classe de serviço que permite que os aplicativos publiquem mensagens de feedback em um tópico do Cloud Pub/Sub.
Selecione o arquivo LanguageService.java na pasta .../services/gcp/languageapi.
Esse arquivo contém uma classe de serviço que permite que os usuários enviem texto para a API Cloud Natural Language ML e recebam a pontuação de sentimento da API.
Selecione o arquivo SpannerService.java na pasta .../services/gcp/spanner.
Esse arquivo contém uma classe de serviço que permite que os usuários salvem o feedback e os dados de resposta da API Natural Language em uma instância do banco de dados do Cloud Spanner.
Revise o código do aplicativo do back-end e da Web
Selecione o arquivo QuizEndpoint.java na pasta .../api.
O gerenciador de mensagens do POST enviado à rota /api/quizzes/feedback/:quiz publica no Pub/Sub os dados de feedback recebidos do cliente.
Selecione o arquivo ConsoleApp.java na pasta .../backend.
Esse arquivo é executado como um aplicativo separado do console para consumir as mensagens entregues a uma assinatura do Pub/Sub.
Tarefa 3. Como trabalhar com o Cloud Pub/Sub
O aplicativo de teste usa uma função Pub/Sub para acessar respostas e feedback inseridos por um usuário pela interface do teste.
Nesta seção, você criará um tópico e uma assinatura do Cloud Pub/Sub no seu projeto do GCP. Depois, vai publicar e acessar uma mensagem.
Crie um tópico do Cloud Pub/Sub
No console, clique em Menu de navegação > Pub/Sub > Tópicos e em Criar tópico.
Defina o ID do tópico como feedback, e depois clique CRIAR TÓPICO.
A exibição Detalhes do tópico é aberta:
Crie uma assinatura do Cloud Pub/Sub
Volte para a segunda janela do Cloud Shell.
Digite o seguinte comando para criar uma assinatura do Cloud Pub/Sub chamada cloud-shell-subscription no tópico de feedback:
gcloud pubsub subscriptions create cloud-shell-subscription --topic feedback
Observação: se você receber um erro avisando que a conta ativa não tem credenciais válidas, aguarde um minuto e tente o comando novamente.
Publique uma mensagem em um tópico do Cloud Pub/Sub
Publique uma mensagem "Hello world" no tópico de feedback na segunda janela do Cloud Shell:
Tarefa 4. Publique mensagens no Cloud Pub/Sub de forma programática
Nesta seção, você vai escrever o código para publicar mensagens no Cloud Pub/Sub.
Importante: atualize o código nas seções marcadas da seguinte maneira:
// TODO
// END TODO
Para maximizar seu aprendizado, revise o código, os comentários in-line e a documentação da API relacionada.
Publique uma mensagem do Pub/Sub
Abra o arquivo .../services/gcp/pubsub/PublishService.java no editor de código.
Atualize o arquivo adicionando o código conforme indicado.
Declare duas strings estáticas finais PROJECT_ID e TOPIC_NAME:
// TODO: Declare and initialize two Strings,
// PROJECT_ID and TOPIC_NAME
private static final String PROJECT_ID = ServiceOptions.getDefaultProjectId();
private static final String TOPIC_NAME = "feedback";
// END TODO
Mova para o método publishFeedback(...) e crie um objeto TopicName usando as strings PROJECT_ID e TOPIC_NAME.
O nome do tópico faz referência ao tópico do Cloud Pub/Sub que você acabou de criar:
// TODO: Create a TopicName object
// for the feedback topic in the project
TopicName topicName = TopicName.of(PROJECT_ID, TOPIC_NAME);
// END TODO
Declare um objeto Publisher e configure-o como null:
// TODO: Declare a publisher for the topic
Publisher publisher = null;
// END TODO
Ele será inicializado no bloco try a seguir.
Vá para o bloco try e inicialize o objeto do editor usando o builder correspondente:
// TODO: Initialize the publisher
// using a builder and the topicName
publisher = Publisher.newBuilder(topicName).build();
// END TODO
Copie a string serializada em JSON feedbackMessage em uma ByteString:
// TODO: Copy the serialized message
// to a byte string
ByteString data = ByteString.copyFromUtf8(feedbackMessage);
// END TODO
Declare um objeto PubsubMessage e inicialize a mensagem usando o builder correspondente:
// TODO: Create a Pub/Sub message using a
// builder; set the message data
PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
// END TODO
Use o editor para publicar a mensagem e atribua o valor de retorno para o futuro objeto do ID da mensagem:
// TODO: Publish the message,
// assign to the messageIdFuture
messageIdFuture = publisher.publish(pubsubMessage);
// END TODO
Vá para o bloco finally e extraia "messageId" do Pub/Sub do futuro objeto do ID da mensagem:
// TODO: Get the messageId from
// the messageIdFuture
String messageId = messageIdFuture.get();
// END TODO
Conclua o código de publicação fechando o editor:
// TODO: Shutdown the publisher
// to free up resources
if (publisher != null) {
publisher.shutdown();
}
// END TODO
Salve services/gcp/pubsub/PublishService.java.
Escreva o código para usar a funcionalidade de publicação do Pub/Sub
No arquivo .../api/QuizEndpoint.java, declare um novo campo PublishService chamado publishService.
Aplique a anotação @Autowired do Spring:
// TODO: Declare the publishService
@Autowired
private PublishService publishService;
// END TODO
No método processFeedback(...), que gerencia solicitações POST para a rota '/feedback/:quiz', invoque o método publishService.publishFeedback(feedback):
// TODO: Publish the feedback to Pub/Sub
publishService.publishFeedback(feedback);
// END TODO
Salve /api/QuizEndpoint.java.
Execute o aplicativo e crie uma mensagem do Pub/Sub
Na primeira janela do Cloud Shell, reinicie o aplicativo da Web (se estiver em execução, interrompa-o e inicie-o):
mvn spring-boot:run
Exiba o aplicativo da Web, clique em Take Test > Places.
Responda à pergunta, selecione a avaliação, digite um texto de feedback e clique em Send feedback.
Na segunda janela do Cloud Shell, para receber uma mensagem do cloud-shell-subscription:
Tarefa 5. Inscrever-se nos tópicos do Cloud Pub/Sub de forma programática
Nesta seção, você vai escrever o código para criar uma assinatura em um tópico do Cloud Pub/Sub e receber as mensagens de notificações dele no aplicativo do worker.
Escreva o código para criar uma assinatura do Cloud Pub/Sub e receber mensagens
No editor de código, abra o arquivo ...backend/ConsoleApp.java.
Atualize o arquivo adicionando o código conforme indicado.
Pule os blocos TODO para languageService e spannerService. Você vai retornar para eles mais tarde.
No método main(), crie um objeto SubscriptionName para representar uma nova assinatura chamada "worker1-subscription".
// TODO: Create the Pub/Sub subscription name
ProjectSubscriptionName subscription =
ProjectSubscriptionName.of(projectId,
"worker1-subscription");
// END TODO
Crie um objeto SubscriptionAdminClient usando o bloco try:
Observação: também no bloco try, use o cliente administrador de assinaturas para criar uma nova assinatura no tópico de feedback.
Não se esqueça da chave de fechamento.
```JAVA
// TODO: Create the subscriptionAdminClient
try (SubscriptionAdminClient subscriptionAdminClient =
SubscriptionAdminClient.create()) {
// TODO: create the Pub/Sub subscription
// using the subscription name and topic
subscriptionAdminClient.createSubscription(
subscription, topic,
PushConfig.getDefaultInstance(), 0);
// END TODO
}
// END TODO
```
Vá para o código que cria um MessageReceiver e, na substituição receiveMessage(...), extraia os dados da mensagem para uma string:
// TODO: Extract the message data as a JSON String
String fb = message.getData().toStringUtf8();
// END TODO
Use consumer para confirmar a mensagem:
// TODO: Ack the message
consumer.ack();
// END TODO
Após o código que inicializa um ObjectMapper, desserialize os dados da mensagem da string JSON em um objeto de feedback:
// TODO: Deserialize the JSON String
// representing the feedback
// Print out the feedback
Feedback feedback = mapper.readValue(
fb, Feedback.class);
System.out.println("Feedback received: "
+ feedback);
// END TODO
Após o bloco que cria MessageReceiver, declare um Subscriber e inicialize-o como nulo.
Pule alguns blocos TODO e procure este:
// TODO: Declare a subscriber
Subscriber subscriber = null;
// END TODO
Vá para o bloco try e inicialize Subscriber usando o builder padrão correspondente. Você vai precisar informar a assinatura e o destinatário:
// TODO: Initialize the subscriber using
// its default builder
// with a subscription and receiver
subscriber = Subscriber.newBuilder(
subscription, receiver).build();
// END TODO
Adicione um listener ao subscriber para exibir erros:
// TODO: Add a listener to the subscriber
subscriber.addListener(
new Subscriber.Listener() {
@Override
public void failed(
Subscriber.State from,
Throwable failure) {
System.err.println(failure);
}
},
MoreExecutors.directExecutor());
// END TODO
Inicie o subscriber:
// TODO: Start subscribing
subscriber.startAsync().awaitRunning();
// END TODO
Vá para o bloco final. Escreva o código para interromper o subscriber e exclua a assinatura:
// TODO: Stop subscribing
if (subscriber != null) {
subscriber.stopAsync().awaitTerminated();
}
// END TODO
// TODO: Delete the subscription
try (SubscriptionAdminClient
subscriptionAdminClient =
SubscriptionAdminClient.create()) {
subscriptionAdminClient.deleteSubscription(
subscription);
}
// END TODO
Salve backend/ConsoleApp.java.
Execute o aplicativo da Web e do worker e crie uma mensagem do Pub/Sub
Na primeira janela do Cloud Shell, interrompa e inicie o aplicativo da Web:
mvn spring-boot:run
Na segunda janela do Cloud Shell, inicie o aplicativo do worker:
mvn compile exec:java@worker
No Cloud Shell, clique em Visualização na Web > Visualizar na porta 8080 para ver o aplicativo de teste.
Clique em Take Test.
Clique em Places.
Responda à pergunta, selecione a avaliação, digite um texto de feedback e clique em Send Feedback.
Volte para a segunda janela do Cloud Shell.
Você vai perceber que o aplicativo do worker recebeu a mensagem de feedback pelo gerenciador e a exibiu na segunda janela do Cloud Shell. Confira abaixo um exemplo de mensagem de feedback
Feedback received: Feedback{email='app.dev.student@dummy.org', quiz='places', feedback='love the test', rating=5, timestamp=1527564677609, sentimentScore=0.0}
Observação: é possível ignorar com segurança o resultado ALERTA relacionado a Uma operação ilegal de acesso reflexivo.
Interrompa os aplicativos da Web e do console.
Tarefa 6. Usar a API Cloud Natural Language
Nesta seção você vai escrever o código para executar uma análise de sentimento no texto de feedback enviado pelo usuário. Saiba mais na API Google Cloud Natural Language.
Escreva o código para invocar a API Cloud Natural Language
Volte para o editor e abra o arquivo LanguageService.java na pasta services/gcp/languageapi.
Vá para o método analyzeSentiment(...) e crie um objeto LanguageServiceClient em um bloco try.
Nesta etapa, perceba que não há um // END TODO no conteúdo copiado no arquivo:
// TODO: Create the LanguageServiceClient object
try (LanguageServiceClient language =
LanguageServiceClient.create()) {
Crie um novo objeto Document usando o builder dele e configure esse objeto com o conteúdo e tipo do documento:
// TODO: Create a new Document object
// using the builder
// Set the content and type
Document doc = Document.newBuilder()
.setContent(feedback)
.setType(Document.Type.PLAIN_TEXT)
.build();
// END TODO
Use o objeto de cliente do Natural Language para analisar o sentimento do documento, atribuindo o resultado a um objeto Sentiment:
// TODO: Use the client to analyze
// the sentiment of the feedback
Sentiment sentiment = language
.analyzeSentiment(doc)
.getDocumentSentiment();
// END TODO
Em seguida, retorne a pontuação de sentimento do objeto sentiment:
// TODO: Return the sentiment score
return sentiment.getScore();
// END TODO
}
Não se esqueça da chave de fechamento:
Salve o arquivo.
Escreva o código para usar a funcionalidade da API Natural Language
Volte para o arquivo backend/ConsoleApp.java.
Vá para o método main(...).
No método main(), crie um objeto SubscriptionName para representar uma nova assinatura chamada "worker2-subscription".
Isso substitui o "worker1-subscription".
// TODO: Create the Pub/Sub subscription name
ProjectSubscriptionName subscription =
ProjectSubscriptionName.of(projectId,
"worker2-subscription");
// END TODO
No ponto indicado pelos comentários, crie a instância LanguageService usando o método estático create():
// TODO: Create the languageService
LanguageService languageService = LanguageService.create();
// END TODO
No ponto indicado pelos comentários, use o objeto languageService para executar a detecção de sentimento no feedback:
// TODO: Use the Natural Language API to analyze sentiment
float sentimentScore = languageService.analyzeSentiment(
feedback.getFeedback());
// END TODO
Em seguida, registre a pontuação no console e atribua uma nova propriedade de pontuação ao objeto de feedback:
// TODO: Set the feedback object sentiment score
feedback.setSentimentScore(sentimentScore);
System.out.println("Score is: " + sentimentScore);
// END TODO
Salve o arquivo.
Execute os aplicativos da Web e do worker e teste a API Natural Language
Volte para a primeira janela do Cloud Shell e reinicie o aplicativo da Web.
Mude para a segunda janela do Cloud Shell e reinicie o aplicativo do worker.
Visualize o aplicativo da Web e clique em Take Test > Places.
Responda às perguntas, selecione a avaliação, digite um texto de feedback e clique em Send feedback.
Volte para a segunda janela do Cloud Shell.
A saída mostra o aplicativo do worker que invocou a API Cloud Natural Language e exibe a pontuação de sentimento no console ao lado de A pontuação é:.
Exemplo:
Feedback received: Feedback{email='app.dev.student@dummy.org', quiz='places', feedback='loved the test', rating=1, timestamp=1570116062687, sentimentScore=0.0}
Score is: 0.8
Interrompa os aplicativos da Web e do worker.
Tarefa 7. Manter os dados no Cloud Spanner
Nesta seção, você vai criar uma instância, um banco de dados e uma tabela do Cloud Spanner. Em seguida, você escreverá o código para manter os dados do feedback no banco de dados.
Crie uma instância do Cloud Spanner
Volte para o Cloud Console.
Clique em Menu de navegação > Spanner.
Clique em CRIAR INSTÂNCIA.
Defina o nome da instância como quiz-instance.
Na seção Escolher uma configuração, selecione us-central1 no menu suspenso para fazer uma seleção.
Clique em Criar.
Crie um banco de dados e uma tabela do Cloud Spanner
Na página Detalhes da instância de quiz-instance, clique em CRIAR BANCO DE DADOS.
Em Nome do banco de dados, digite quiz-database.
Em Definir seu esquema, digite na caixa de texto a seguinte instrução SQL:
Escreva o código para manter os dados no Cloud Spanner
Observação: saiba mais sobre as APIs do Cloud Spanner em APIs e referência.
Para mais informações sobre as APIs específicas usadas nessa seção, no painel esquerdo da página APIs e referência, na seção de mesmo nome, clique em Biblioteca de cliente > Referência Java.
Volte ao editor de código e vá para o método insertFeedback(...) no arquivo ...services/gcp/spanner/SpannerService.java.
Receba uma referência para o Cloud Spanner.
// TODO: Get a reference to the Spanner API
SpannerOptions options =
SpannerOptions.newBuilder().build();
Spanner spanner = options.getService();
// END TODO
Receba uma referência para o banco de dados do Spanner usando o ID do banco de dados:
// TODO: Get a reference to the quiz-instance
// and its quiz-database
DatabaseId db = DatabaseId.of(
options.getProjectId(),
"quiz-instance",
"quiz-database");
// END TODO
Receba uma referência para o cliente do banco de dados do Cloud Spanner:
// TODO: Get a client for the quiz-database
DatabaseClient dbClient =
spanner.getDatabaseClient(db);
// END TODO
Adicione List<Mutation> para referenciar todas as alterações que serão feitas no banco de dados:
// TODO: Create a list to hold mutations
// against the database
List<Mutation> mutations = new ArrayList<>();
// END TODO
// END TODO
Adicione Mutation que representa a inclusão de dados na tabela de feedback usando os dados do objeto de feedback:
// TODO: Add an insert mutation
mutations.add(
// TODO: Build a new insert mutation
Mutation.newInsertBuilder("Feedback")
.set("feedbackId")
.to(feedback.getEmail() + '_' +
feedback.getQuiz() + "_" +
feedback.getTimestamp())
.set("email")
.to(feedback.getEmail())
.set("quiz")
.to(feedback.getQuiz())
.set("feedback")
.to(feedback.getFeedback())
.set("rating")
.to(feedback.getRating())
.set("score")
.to(
feedback.getSentimentScore())
.set("timestamp")
.to(feedback.getTimestamp())
.build());
// END TODO
Use o cliente do banco de dados para gravar as mutações:
// TODO: Write the change to Spanner
dbClient.write(mutations);
// END TODO
Salve o arquivo.
Escreva o código para usar a funcionalidade do Cloud Spanner
Vá para o método main(...) no arquivo backend/ConsoleApp.java.
No método main(), crie um objeto SubscriptionName para representar uma nova assinatura chamada "worker3-subscription".
Isso substitui "worker2-subscription"
// TODO: Create the Pub/Sub subscription name
ProjectSubscriptionName subscription =
ProjectSubscriptionName.of(projectId,
"worker3-subscription");
// END TODO
No ponto indicado pelos comentários, crie a instância SpannerService:
// TODO: Create the spannerService
SpannerService spannerService = SpannerService.create();
// END TODO
No ponto indicado pelos comentários, use o objeto spannerService para inserir o feedback no banco de dados e imprimir uma mensagem no console:
// TODO: Insert the feedback into Cloud Spanner
spannerService.insertFeedback(feedback);
System.out.println("Feedback saved");
// END TODO
Salve o arquivo.
Execute os aplicativos da Web e do worker e teste o Cloud Spanner
Volte para a primeira janela do Cloud Shell e inicie o aplicativo da Web.
Mude para a segunda janela do Cloud Shell e reinicie o aplicativo do worker.
Visualize o aplicativo de teste e clique em Take Test > Places.
Responda às perguntas, selecione a avaliação, digite um texto de feedback e clique em Send feedback.
Volte para a segunda janela do Cloud Shell.
O aplicativo do worker terá chamado a API Cloud Spanner e exibido a mensagem na janela do console.
Volte para o console. Clique em Menu de navegação > Spanner.
Selecione quiz-instance > quiz-database e clique Consulta no painel à esquerda.
Para executar uma consulta, na caixa de diálogo Consulta, digite SELECT * FROM Feedback e clique em Executar:
SELECT * FROM Feedback
O novo registro de feedback será exibido no banco de dados do Cloud Spanner, que vai incluir os dados da mensagem do Cloud Pub/Sub e a pontuação do teste da API Cloud Natural Language.
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
1 estrela = muito insatisfeito
2 estrelas = insatisfeito
3 estrelas = neutro
4 estrelas = satisfeito
5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2026 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.
Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
No canto superior esquerdo da tela, clique em Começar o laboratório
Usar a navegação anônima
Copie o nome de usuário e a senha fornecidos para o laboratório
Clique em Abrir console no modo anônimo
Fazer login no console
Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
Aceite os termos e pule a página de recursos de recuperação
Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto
Este conteúdo não está disponível no momento
Você vai receber uma notificação por e-mail quando ele estiver disponível
Ótimo!
Vamos entrar em contato por e-mail se ele ficar disponível
Um laboratório por vez
Confirme para encerrar todos os laboratórios atuais e iniciar este
Use a navegação anônima para executar o laboratório
A melhor maneira de executar este laboratório é usando uma janela de navegação anônima
ou privada. Isso evita conflitos entre sua conta pessoal
e a conta de estudante, o que poderia causar cobranças extras
na sua conta pessoal.
Neste laboratório, você vai fazer melhorias no aplicativo de teste on-line desenvolvendo um serviço de back-end para processar o feedback do usuário e salvar as pontuações.
Duração:
Configuração: 0 minutos
·
Tempo de acesso: 120 minutos
·
Tempo para conclusão: 120 minutos