Este tutorial mostra como configurar e implementar uma API de exemplo e o Extensible Service Proxy (ESP) executado numa instância no ambiente flexível do App Engine. A API REST do código de exemplo é descrita através da especificação OpenAPI. O tutorial também mostra como criar uma chave da API e usá-la em pedidos à API.
Para uma vista geral do Cloud Endpoints, consulte os artigos Acerca dos Endpoints e Arquitetura dos Endpoints.
Objetivos
Use a seguinte lista de tarefas de alto nível à medida que avança no tutorial. Todas as tarefas são necessárias para enviar pedidos com êxito para a API.
- Configure um Google Cloud projeto, instale o software necessário e crie uma app do App Engine. Consulte a secção Antes de começar.
- Transfira o exemplo de código. Consulte o artigo Obter o exemplo de código.
- Configure o ficheiro
openapi-appengine.yaml, que é usado para configurar pontos finais. Consulte o artigo Configurar pontos finais. - Implemente a configuração do Endpoints para criar um serviço do Endpoints. Consulte o artigo Implementar a configuração dos Endpoints.
- Implemente a API e o ESP no App Engine. Consulte o artigo Implementar o back-end da API.
- Envie um pedido para a API. Consulte o artigo Enviar um pedido para a API.
- Acompanhe a atividade da API. Consulte o artigo Acompanhamento da atividade da API.
- Evite incorrer em cobranças na sua conta Google Cloud . Consulte a secção Limpar.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Tome nota do ID do projeto, uma vez que é necessário mais tarde.
-
Precisa de uma aplicação para enviar pedidos para a API de exemplo.
- Utilizadores do Linux e macOS: este tutorial oferece um exemplo de utilização do
curl, que normalmente vem pré-instalado no seu sistema operativo. Se não tiver ocurl, pode transferi-lo nacurlpágina de lançamentos e transferências. - Utilizadores do Windows: este tutorial fornece um exemplo com
Invoke-WebRequest, que é suportado no PowerShell 3.0 e posterior.
- Utilizadores do Linux e macOS: este tutorial oferece um exemplo de utilização do
- Transfira a CLI do Google Cloud.
-
Atualize a CLI gcloud e instale os componentes do Endpoints.
gcloud components update
-
Certifique-se de que a CLI do Google Cloud (
gcloud) está autorizada a aceder aos seus dados e serviços em Google Cloud: No novo separador do navegador apresentado, selecione uma conta.gcloud auth login
-
Defina o projeto predefinido para o ID do seu projeto.
gcloud config set project YOUR_PROJECT_ID
Substitua YOUR_PROJECT_ID pelo ID do seu projeto. Se tiver outros Google Cloud projetos e quiser usar
gcloudpara os gerir, consulte Gerir configurações da CLI gcloud. - Selecione a região onde quer criar a sua aplicação do App Engine. Execute o seguinte comando para obter uma lista de regiões:
gcloud app regions list
- Crie uma aplicação do App Engine.
Substitua YOUR_PROJECT_ID pelo ID do seu Google Cloud
projeto e YOUR_REGION pela região na qual
quer que a aplicação do App Engine seja criada.
gcloud app create \ --project=YOUR_PROJECT_ID \ --region=YOUR_REGION
- Se a conta de serviço predefinida do App Engine não tiver a função de Editor
(
roles/editor), conceda as seguintes autorizações:- Conceda
roles/servicemanagement.serviceConsumerà conta de serviço predefinida do App Engine ao nível do serviço. - Conceda
roles/servicemanagement.serviceControllerà conta de serviço predefinida do App Engine ao nível do projeto.
Para obter informações sobre a concessão de funções à conta de serviço, consulte Gerir o acesso através da Google Cloud consola.
- Conceda
Obter o exemplo de código
Para clonar ou transferir a API de exemplo:
- O exemplo de código usa o Maven. Se não tiver o Maven 3.3.9 ou superior, transfira-o e instale-o.
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd java-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd python-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Certifique-se de que a
GOPATHvariável de ambiente está definida. - Clone o repositório da app de exemplo para a sua máquina local:
go get -d github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
- Altere para o diretório que contém o código de exemplo:
cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/php-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd php-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd ruby-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd nodejs-docs-samples/endpoints/getting-started
Configurar pontos finais
O exemplo de código inclui o ficheiro de configuração da OpenAPI,
openapi-appengine.yaml, que se baseia na
especificação da OpenAPI v2.0.
- No diretório de código de exemplo, abra o
openapi-appengine.yamlficheiro de configuração.Java Python Ir PHP Ruby NodeJS Tenha em conta o seguinte:
- O exemplo de configuração apresenta as linhas junto ao campo
hostque tem de modificar. Para implementaropenapi-appengine.yamlnos Endpoints, é necessário o documento OpenAPI completo. - O exemplo
openapi-appengine.yamlcontém uma secção para configurar a autenticação que não é necessária para este tutorial. Não tem de configurar as linhas com YOUR-SERVICE-ACCOUNT-EMAIL e YOUR-CLIENT-ID. - A OpenAPI é uma especificação independente do idioma. O mesmo ficheiro
openapi-appengine.yamlencontra-se no exemplogetting-startedno repositório do GitHub de cada idioma para sua conveniência.
- O exemplo de configuração apresenta as linhas junto ao campo
- Na linha com o campo
host, substitua YOUR-PROJECT-ID pelo ID do seu Google Cloud projeto. Por exemplo:host: "example-project-12345.appspot.com"
O Endpoints usa o texto configurado no campo host
como o nome do serviço. Quando implementa a API no back-end do App Engine, é criado automaticamente um registo de DNS com um nome no formato YOUR-PROJECT-ID.appspot.com.
Para obter informações sobre os campos no documento OpenAPI que o Endpoints requer, consulte o artigo Configurar o Endpoints.
Implementar a configuração dos pontos finais
Para implementar a configuração do Endpoints, use o comando gcloud endpoints
services deploy. Este comando usa a gestão de serviços
para criar um serviço gerido.
Para implementar a configuração dos Endpoints:
- Certifique-se de que está no diretório
endpoints/getting-started. - Carregue a configuração e crie um serviço gerido:
gcloud endpoints services deploy openapi-appengine.yaml
Em seguida, o comando gcloud chama a API Service Management para criar um serviço gerido com o nome que especificou no campo host do ficheiro openapi-appengine.yaml.
A gestão de serviços configura o serviço de acordo com as definições no ficheiro openapi-appengine.yaml. Quando faz alterações ao
openapi-appengine.yaml, tem de voltar a implementar o ficheiro para atualizar o serviço
Endpoints.
À medida que cria e configura o serviço, o Service Management
envia informações para o terminal. Pode ignorar com segurança os avisos sobre os caminhos no ficheiro openapi-appengine.yaml que não requerem uma chave da API.
Quando terminar de configurar o serviço, a gestão de serviços apresenta uma mensagem com o ID de configuração do serviço e o nome do serviço, semelhante ao seguinte:
Service Configuration [2017-02-13r0] uploaded for service [example-project-12345.appspot.com]
No exemplo anterior, 2017-02-13r0 é o ID de configuração do serviço e example-project-12345.appspot.com é o serviço Endpoints. O ID de configuração do serviço consiste numa
data/hora seguida de um número de revisão. Se implementar o ficheiro
openapi-appengine.yaml novamente no mesmo dia, o número
de revisão é incrementado no ID de configuração do serviço. Pode ver a configuração do serviço Endpoints na página Endpoints > Serviços na Google Cloud consola.
Se receber uma mensagem de erro, consulte o artigo Resolução de problemas da implementação da configuração de pontos finais.
A verificar os serviços necessários
No mínimo, os pontos finais e o ESP requerem a ativação dos seguintes serviços Google:| Nome | Título |
|---|---|
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
Na maioria dos casos, o comando gcloud endpoints services deploy ativa estes serviços obrigatórios. No entanto, o comando gcloud é concluído com êxito, mas não ativa os serviços necessários nas seguintes circunstâncias:
Se usou uma aplicação de terceiros, como o Terraform, e não incluiu estes serviços.
Implementou a configuração do Endpoints numGoogle Cloud projeto existente no qual estes serviços foram explicitamente desativados.
Use o seguinte comando para confirmar que os serviços necessários estão ativados:
gcloud services list
Se não vir os serviços necessários listados, ative-os:
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.comAtive também o serviço Endpoints:
gcloud services enable ENDPOINTS_SERVICE_NAME
Para determinar o ENDPOINTS_SERVICE_NAME, pode:
Após implementar a configuração do Endpoints, aceda à página Endpoints na Cloud Console. A lista de ENDPOINTS_SERVICE_NAME possíveis é apresentada na coluna Nome do serviço.
Para a OpenAPI, o ENDPOINTS_SERVICE_NAME é o que especificou no campo
hostda sua especificação OpenAPI. Para o gRPC, o ENDPOINTS_SERVICE_NAME é o que especificou no camponameda sua configuração de pontos finais gRPC.
Para mais informações sobre os comandos gcloud, consulte os
serviços gcloud.
Implementar o back-end da API
Até agora, implementou o documento OpenAPI na gestão de serviços, mas ainda não implementou o código que publica o back-end da API. Esta secção explica como implementar a API de exemplo e o ESP no App Engine.
Para implementar o back-end da API:
- Adicione o nome do serviço ao ficheiro
app.yaml:Java Abra o ficheiro
endpoints/getting-started/src/main/appengine/app.yaml.Python Abra o ficheiro
endpoints/getting-started/app.yaml.Ir Abra o ficheiro
endpoints/getting-started/app.yaml.PHP Abra o ficheiro
endpoints/getting-started/app.yaml.Ruby Abra o ficheiro
endpoints/getting-started/app.yaml.NodeJS Abra o ficheiro
endpoints/getting-started/app.yaml.Substitua ENDPOINTS-SERVICE-NAME pelo nome do seu serviço Endpoints. Este é o mesmo nome que configurou no campo
hostdo seu documento OpenAPI. Por exemplo:endpoints_api_service: name: example-project-12345.appspot.com rollout_strategy: managed
A opção
rollout_strategy: managedconfigura o ESP para usar a configuração do serviço implementada mais recente. Quando especifica esta opção, até 5 minutos após implementar uma nova configuração de serviço, o ESP deteta a alteração e começa a usá-la automaticamente. Recomendamos que especifique esta opção em vez de um ID de configuração específico para o ESP usar. - Guarde o ficheiro
app.yaml. - Certifique-se de que está no diretório
endpoints/getting-started. É aqui que se encontra o ficheiro de configuração doopenapi-appengine.yaml. - Execute o seguinte comando para implementar a API de exemplo e o ESP no App Engine:
Uma vez que a secção endpoints_api_service está incluída no ficheiro app.yaml, o comando gcloud app deploy implementa e configura o ESP num contentor separado do ambiente flexível do App Engine. Todo o tráfego de pedidos é encaminhado através do ESP, e este
encaminha pedidos e respostas de e para o contentor que executa o seu
código do servidor de back-end.
Implemente através do Maven:
mvn appengine:stage gcloud app deploy target/appengine-staging
gcloud app deploy
gcloud app deploy
gcloud app deploy
gcloud app deploy
gcloud app deploy
O comando gcloud app deploy cria um registo de DNS no formato YOUR_PROJECT_ID.appspot.com, que usa quando envia pedidos para a API. Recomendamos que aguarde alguns minutos antes de enviar pedidos à sua API enquanto o App Engine é completamente inicializado.
Se receber uma mensagem de erro, consulte o artigo Resolução de problemas da implementação flexível do App Engine.
Para mais informações, consulte o artigo Implementar o back-end da API.
Enviar pedidos para a API
Agora que o serviço está a ser executado no App Engine, pode enviar-lhe pedidos.
Crie uma chave da API e defina uma variável de ambiente
O código de exemplo requer uma chave da API. Para simplificar o pedido, defina uma variável de ambiente para a chave da API.
No mesmo Google Cloud projeto que usou para a sua API, crie uma chave da API na página de credenciais da API. Se quiser criar uma chave da API num Google Cloud projeto diferente, consulte o artigo Ativar uma API no seu Google Cloud projeto.
- Clique em Criar credenciais e, de seguida, selecione Chave de API.
- Copie a chave para a área de transferência.
- Clique em Fechar.
- No computador local, cole a chave da API para a atribuir a uma variável de ambiente:
- No Linux ou macOS:
export ENDPOINTS_KEY=AIza... - No Windows PowerShell:
$Env:ENDPOINTS_KEY="AIza..."
- No Linux ou macOS:
Envie o pedido
Linux ou Mac OS
Crie uma variável de ambiente para o URL do projeto do App Engine. Substitua YOUR_PROJECT_ID pelo seu Google Cloud ID do projeto:
export ENDPOINTS_HOST=https://YOUR_PROJECT_ID.appspot.comEnvie um pedido HTTP através das variáveis de ambiente
ENDPOINTS_HOSTeENDPOINTS_KEYque definiu anteriormente:curl --request POST \ --header "content-type:application/json" \ --data '{"message":"hello world"}' \ "${ENDPOINTS_HOST}/echo?key=${ENDPOINTS_KEY}"
Nos curl anteriores:
- A opção
--dataespecifica os dados a publicar na API. - A opção
--headerespecifica que os dados estão no formato JSON.
PowerShell
Crie uma variável de ambiente para o URL do projeto do App Engine. Substitua YOUR_PROJECT_ID pelo seu Google Cloud ID do projeto:
$Env:ENDPOINTS_HOST="https://YOUR_PROJECT_ID.appspot.com"Envie um pedido HTTP através das variáveis de ambiente
ENDPOINTS_HOSTeENDPOINTS_KEYque definiu anteriormente:(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' ` -Headers @{"content-type"="application/json"} ` -URI "$Env:ENDPOINTS_HOST/echo?key=$Env:ENDPOINTS_KEY").Content
No exemplo anterior, as duas primeiras linhas terminam com um acento grave. Quando colar o exemplo no PowerShell, certifique-se de que não existe um espaço após os acentos graves. Para obter informações sobre as opções usadas no pedido de exemplo, consulte Invoke-WebRequest na documentação da Microsoft.
App de terceiros
Pode usar uma aplicação de terceiros, como a extensão do navegador Chrome Postman, para enviar o pedido:
- Selecione
POSTcomo verbo HTTP. - Para o cabeçalho, selecione a chave
content-typee o valorapplication/json. - Para o corpo, introduza o seguinte:
{"message":"hello world"} -
No URL, use o endereço e a chave da API reais em vez das variáveis de ambiente.
appspot.comPor exemplo:
https://example-project-12345.appspot.com/echo?key=AIza...
A API devolve a mensagem que lhe envia e responde com o seguinte:
{
"message": "hello world"
}
Se não recebeu uma resposta bem-sucedida, consulte o artigo Resolução de problemas de erros de resposta.
Acabou de implementar e testar uma API no Endpoints!
Acompanhamento da atividade da API
Veja os gráficos de atividade da sua API na página Endpoints.
Aceda à página Serviços de pontos finais
Pode demorar alguns momentos até que o pedido seja refletido nos gráficos.
Consulte os registos de pedidos da sua API na página do Explorador de registos.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Consulte o artigo Eliminar uma API e instâncias de API para obter informações sobre como parar os serviços usados por este tutorial.