Este tutorial mostra-lhe como criar um fluxo de trabalho de tradução que aguarda a sua entrada, ou seja, a intervenção humana, e que liga uma base de dados do Firestore, duas funções do Cloud Run, a API Cloud Translation e uma página Web que usa o SDK do Firebase para atualizar em tempo real.
Com os fluxos de trabalho, pode suportar um ponto final de retorno de chamada (ou webhook) que aguarda a chegada de pedidos HTTP a esse ponto final, retomando a execução do fluxo de trabalho num momento posterior. Neste caso, o fluxo de trabalho aguarda a sua entrada para rejeitar ou validar a tradução de algum texto, mas também pode aguardar um processo externo. Para mais informações, consulte a secção Aguarde através de callbacks.
Arquitetura
Este tutorial cria uma app Web que lhe permite fazer o seguinte:
- Na página Web de tradução, introduza o texto que quer traduzir de inglês para francês. Clique em Traduzir.
- A partir da página Web, é chamada uma função do Cloud Run que inicia a execução do fluxo de trabalho. O texto a traduzir é transmitido como um parâmetro à função e ao fluxo de trabalho.
- O texto é guardado numa base de dados do Cloud Firestore. A Cloud Translation API é invocada. A tradução devolvida é armazenada na base de dados. A app Web é implementada através do Firebase Hosting e é atualizada em tempo real para apresentar o texto traduzido.
- O passo
create_callbackno fluxo de trabalho cria um URL do ponto final de retorno de chamada que também é guardado na base de dados do Firestore. A página Web apresenta agora um botão Validar e um botão Rejeitar. - O fluxo de trabalho está agora pausado e aguarda um pedido HTTP POST explícito para o URL do ponto final de retorno de chamada.
- Pode decidir se quer validar ou rejeitar a tradução. Quando um utilizador clica num botão, é chamada uma segunda função do Cloud Run que, por sua vez, chama o ponto final de retorno de chamada criado pelo fluxo de trabalho, transmitindo o estado de aprovação.
O fluxo de trabalho retoma a execução e guarda um estado de aprovação de
trueoufalsena base de dados do Firestore.
Este diagrama oferece uma vista geral do processo:
Implemente a primeira função do Cloud Run
Esta função do Cloud Run inicia a execução do fluxo de trabalho. O texto a traduzir é transmitido como um parâmetro tanto para a função como para o fluxo de trabalho.
Crie um diretório denominado
callback-translatione com subdiretórios denominadosinvokeTranslationWorkflow,translationCallbackCallepublic:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
Altere para o diretório
invokeTranslationWorkflow:cd ~/callback-translation/invokeTranslationWorkflow
Crie um ficheiro de texto com o nome de ficheiro
index.jsque contenha o seguinte código Node.js:Crie um ficheiro de texto com o nome de ficheiro
package.jsonque contenha os seguintes metadadosnpm:Implemente a função com um acionador HTTP e permita o acesso não autenticado:
gcloud functions deploy invokeTranslationWorkflow \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=invokeTranslationWorkflow \ --set-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},CLOUD_REGION=${REGION},WORKFLOW_NAME=translation_validation \ --trigger-http \ --allow-unauthenticated
A implementação da função pode demorar alguns minutos. Em alternativa, pode usar a interface de funções do Cloud Run na Google Cloud consola para implementar a função.
Depois de implementar a função, pode confirmar a propriedade
httpsTrigger.url:gcloud functions describe invokeTranslationWorkflow
Anote o URL devolvido para o poder usar num passo posterior.
Implemente a segunda função do Cloud Run
Esta função do Cloud Run faz um pedido HTTP POST ao ponto final de retorno de chamada criado pelo fluxo de trabalho, transmitindo um estado de aprovação que reflete se a tradução é validada ou rejeitada.
Altere para o diretório
translationCallbackCall:cd ../translationCallbackCall
Crie um ficheiro de texto com o nome de ficheiro
index.jsque contenha o seguinte código Node.js:Crie um ficheiro de texto com o nome de ficheiro
package.jsonque contenha os seguintes metadadosnpm:Implemente a função com um acionador HTTP e permita o acesso não autenticado:
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
A implementação da função pode demorar alguns minutos. Em alternativa, pode usar a interface de funções do Cloud Run na Google Cloud consola para implementar a função.
Depois de implementar a função, pode confirmar a propriedade
httpsTrigger.url:gcloud functions describe translationCallbackCall
Anote o URL devolvido para o poder usar num passo posterior.
Implemente o fluxo de trabalho
Um fluxo de trabalho é composto por uma série de passos descritos através da sintaxe Workflows, que pode ser escrita no formato YAML ou JSON. Esta é a definição do fluxo de trabalho. Depois de criar um fluxo de trabalho, implementa-o para o disponibilizar para execução.
Altere para o diretório
callback-translation:cd ..
Crie um ficheiro de texto com o nome de ficheiro
translation-validation.yamle com o seguinte conteúdo:Depois de criar o fluxo de trabalho, pode implementá-lo, mas não execute o fluxo de trabalho:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
Crie a sua app Web
Crie uma app Web que chame uma função da nuvem que inicie a execução do fluxo de trabalho. A página Web é atualizada em tempo real para apresentar o resultado do pedido de tradução.
Altere para o diretório
public:cd public
Crie um ficheiro de texto com o nome de ficheiro
index.htmlque contenha a seguinte marcação HTML. (Num passo posterior, vai modificar o ficheiroindex.htmle adicionar os scripts do SDK Firebase.)Crie um ficheiro de texto com o nome de ficheiro
script.jsque contenha o seguinte código JavaScript:Edite o ficheiro
script.js, substituindo os marcadores de posiçãoUPDATE_MEpelos URLs das funções do Cloud Run que anotou anteriormente.No método
translateBtn.addEventListener, substituaconst fnUrl = UPDATE_ME;por:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/invokeTranslationWorkflow";
Na função
callCallbackUrl, substituaconst fnUrl = UPDATE_ME;por:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/translationCallbackCall";
Crie um ficheiro de texto com o nome de ficheiro
style.cssque contenha os seguintes estilos em cascata:
Adicione o Firebase à sua app Web
Neste tutorial, a página HTML, o script JavaScript e a folha de estilos CSS são implementados como recursos estáticos através do Firebase Hosting, mas podem ser alojados em qualquer lugar e publicados localmente na sua própria máquina para fins de teste.
Crie um projeto do Firebase
Antes de poder adicionar o Firebase à sua app, tem de criar um projeto do Firebase para associar à sua app.
-
Na consola do Firebase, clique em Criar um projeto e, de seguida, selecione o seu Google Cloud projeto existente no menu pendente para adicionar recursos do Firebase a esse projeto.
-
Clique em Continuar até ver a opção para adicionar o Firebase.
-
Ignorar a configuração do Google Analytics para o seu projeto.
-
Clique em Adicionar Firebase.
O Firebase aprovisiona automaticamente recursos para o seu projeto do Firebase. Quando o processo estiver concluído, acede à página de vista geral do seu projeto na consola do Firebase.
Registe a sua app no Firebase
Depois de ter um projeto do Firebase, pode adicionar a sua app para a Web ao projeto.
No centro da página de vista geral do projeto, clique no ícone Web (</>) para iniciar o fluxo de trabalho de configuração.
Introduza uma alcunha para a sua app.
Isto só é visível para si na consola do Firebase.
Ignore a configuração do Firebase Hosting por agora.
Clique em Registar app e continue para a consola.
Ative o Cloud Firestore
A app Web usa o Cloud Firestore para receber e guardar dados. Tem de ativar o Cloud Firestore.
Na secção Compilar da consola do Firebase, clique em Base de dados do Firestore.
(Pode ter de expandir primeiro o painel de navegação do lado esquerdo para ver a secção Criar.)
No painel do Cloud Firestore, clique em Criar base de dados.
Selecione Iniciar no modo de teste, usando uma regra de segurança como a seguinte:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }
Clique em Seguinte depois de ler a exclusão de responsabilidade acerca das regras de segurança.
Defina a localização onde os seus dados do Cloud Firestore são armazenados. Pode aceitar a predefinição ou escolher uma região perto de si.
Clique em Ativar para aprovisionar o Firestore.
Adicione o SDK do Firebase e inicialize o Firebase
O Firebase fornece bibliotecas JavaScript para a maioria dos produtos do Firebase. Antes de usar o Firebase Hosting, tem de adicionar os SDKs do Firebase à sua app Web.
- Para inicializar o Firebase na sua app, tem de fornecer a configuração do projeto do Firebase da app.
- Na consola do Firebase, aceda às Definições do projeto .
- No painel As suas apps, selecione a sua app.
- No painel Configuração e configuração do SDK, para carregar bibliotecas do SDK do Firebase a partir da RFC, selecione RFC.
- Copie o fragmento para o ficheiro
index.htmlna parte inferior da etiqueta<body>, substituindo os valores dos marcadores de posiçãoXXXX.
Instale o SDK Firebase JavaScript.
Se ainda não tiver um ficheiro
package.json, crie um executando o seguinte comando a partir do diretóriocallback-translation:npm initInstale o pacote npm
firebasee guarde-o no ficheiropackage.jsonexecutando:npm install firebase
Inicialize e implemente o seu projeto
Para associar os ficheiros do projeto local ao projeto do Firebase, tem de inicializar o projeto. Em seguida, pode implementar a sua app Web.
No diretório
callback-translation, execute o seguinte comando:firebase initSelecione a opção
Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys.Opte por usar um projeto existente e introduza o ID do projeto.
Aceite
publiccomo o diretório raiz público predefinido.Opte por configurar uma app de página única.
Evite a configuração de compilações e implementações automáticas com o GitHub.
Na mensagem
File public/index.html already exists. Overwrite?, escreva Não.Altere para o diretório
public:cd public
No diretório
public, execute o seguinte comando para implementar o seu projeto no site:firebase deploy --only hosting
Teste a app Web localmente
O Firebase Hosting permite-lhe ver e testar alterações localmente
e interagir com recursos de projetos de back-end emulados. Quando usa firebase serve,
a sua app interage com um back-end emulado para o conteúdo e a configuração de alojamento,
mas com o seu back-end real para todos os outros recursos do projeto. Para este tutorial, pode usar firebase serve, mas não é recomendado quando faz testes mais extensivos.
No diretório
public, execute o seguinte comando:firebase serveAbra a app Web no URL local devolvido (normalmente,
http://localhost:5000).Introduza algum texto em inglês e, de seguida, clique em Traduzir.
Deve ser apresentada uma tradução do texto em francês.
Agora, pode clicar em Validar ou Rejeitar.
Na base de dados do Firestore, pode validar os conteúdos. Deve ser semelhante ao seguinte:
approved: true callback: "https://workflowexecutions.googleapis.com/v1/projects/26811016474/locations/us-central1/workflows/translation_validation/executions/68bfce75-5f62-445f-9cd5-eda23e6fa693/callbacks/72851c97-6bb2-45e3-9816-1e3dcc610662_1a16697f-6d90-478d-9736-33190bbe222b" text: "The quick brown fox jumps over the lazy dog." translation: "Le renard brun rapide saute par-dessus le chien paresseux."O estado
approvedétrueoufalse, consoante valide ou rejeite a tradução.
Parabéns! Criou um fluxo de trabalho de tradução com intervenção humana que usa callbacks dos fluxos de trabalho.