Esta página descreve a migração de uma aplicação Cloud Endpoints versão 1.0 existente para os Endpoints Frameworks para App Engine em Java.
Vantagens
A nova estrutura oferece várias vantagens, incluindo:
- Latência do pedido reduzida.
- Melhor integração com as funcionalidades do App Engine, como domínios personalizados.
- Apoio técnico oficial para configurações do Guice.
- Opcionalmente, novas funcionalidades de gestão de APIs.
A versão 2.0 do Endpoints Frameworks não afeta as interfaces da sua API. Os clientes existentes continuam a funcionar após a migração sem alterações ao código do lado do cliente.
Funcionalidades e ferramentas atualmente excluídas
As seguintes funcionalidades não estão disponíveis atualmente. Se precisar de alguma destas opções, envie um pedido de funcionalidade.
- Protocolo JSON-RPC, que é necessário para clientes iOS antigos. Para criar clientes iOS para a sua API do Endpoints Frameworks versão 2.0, recomendamos que use a biblioteca de cliente Objective-C das APIs Google para APIs REST.
- ETags automáticos
- Campos de tipo automáticos
- Integração de IDE
fields
respostas parciais- Criação automática do método da API PATCH
Além disso, o suporte do Android Studio para a versão 1.0 dos Endpoints não é atualmente suportado para a versão 2.0.
Migrar para a versão 2.0 dos frameworks de Endpoints
A versão 2.0 dos Endpoints Frameworks foi movida para artefactos Maven no grupo
com.google.endpoints
.
O JAR obrigatório de base encontra-se no artefacto endpoints-framework
. Se quiser usar a configuração do Guice, adicione o artefacto endpoints-framework-guice
.
As instruções seguintes fornecem um exemplo de como migrar da versão 1.0 dos Frameworks de Endpoints para a versão 2.0 dos Frameworks de Endpoints através de um documento de descoberta:
- Transfira e inicialize a CLI Google Cloud.
- Execute os seguintes comandos:
- Certifique-se de que a CLI gcloud está autorizada a aceder aos seus dados e serviços em Google Cloud:
gcloud auth login
- Usar credenciais padrão da aplicação:
gcloud auth application-default login
- Instale o componente
app-engine-java
do SDK Google Cloud:gcloud components install app-engine-java
- Atualize para a versão mais recente do SDK do Google Cloud e de todos os componentes:
gcloud components update
- Certifique-se de que a CLI gcloud está autorizada a aceder aos seus dados e serviços em Google Cloud:
Migre através do Maven ou do Gradle
Maven
- Remova a dependência antiga, que é o artefacto
appengine-endpoints
: - Adicione a nova dependência do Endpoints Frameworks:
- Adicione o novo plug-in Endpoints Frameworks e defina o nome de anfitrião para um documento de descoberta gerado:
- Adicione o novo plugin do App Engine Maven:
- Atualize o ponto de entrada da API no ficheiro
web.xml
do seu projeto:- Mudar o nome de todas as ocorrências de
SystemServiceServlet
paraEndpointsServlet
- Substitua todas as ocorrências do caminho
/_ah/spi/
pelo novo caminho obrigatório/_ah/api/
A imagem seguinte mostra o conteúdo do
web.xml
antes e depois da migração:Antes da migração
Endpoints Frameworks versão 1.0web.xml
:Após a migração
Frameworks de Endpoints versão 2.0web.xml
: - Mudar o nome de todas as ocorrências de
- Depois de modificar as dependências, limpe o projeto:
mvn clean
- Pode gerar um documento de deteção:
Saiba mais sobre os frameworks de pontos finais do Maven objetivos do plug-in.mvn endpoints-framework:discoveryDocs
- Pode implementar um projeto:
mvn appengine:deploy
Saiba mais acerca dos objetivos do plug-in do Maven App Engine.
Gradle
- Remova a dependência antiga, que é o artefacto
appengine-endpoints
:compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
- Adicione a nova dependência do Endpoints Frameworks:
- Adicione os novos plug-ins do App Engine e dos Frameworks de pontos finais:
- Aplique os novos plug-ins do App Engine e dos Frameworks de pontos finais:
- Defina o ponto final do nome de anfitrião para documentos de descoberta gerados:
- Atualize o ponto de entrada da API no ficheiro
web.xml
do seu projeto:- Mudar o nome de todas as ocorrências de
SystemServiceServlet
paraEndpointsServlet
- Substitua todas as ocorrências do caminho
/_ah/spi/
pelo novo caminho obrigatório/_ah/api/
A imagem seguinte mostra o conteúdo do
web.xml
antes e depois da migração:Antes da migração
Endpoints Frameworks versão 1.0web.xml
:Após a migração
Frameworks de Endpoints versão 2.0web.xml
: - Mudar o nome de todas as ocorrências de
- Depois de modificar as dependências, limpe o projeto com o seguinte comando:
gradle clean
- Pode gerar um documento de descoberta através de:
Saiba mais sobre as tarefas do plugin Gradle Endpoints Frameworksgradle endpointsDiscoveryDocs
- Pode implementar um projeto através de:
gradle appengineDeploy
Saiba mais sobre as tarefas do plugin do Gradle App Engine.
Usar o Guice para configurar o Endpoints Frameworks para Java
Se quiser usar o Guice:
- Adicione a nova dependência do Guice do Endpoints Frameworks:
Maven
Gradle
- Declare um novo módulo que se estenda a
EndpointsModule
e configure-o da seguinte forma:
Validar uma nova implementação
Pode verificar se a nova estrutura está a publicar tráfego:
- Envie alguns pedidos para a nova implementação.
Na Google Cloud consola, aceda à página Registo > Explorador de registos.
Se os pedidos forem apresentados com caminhos que começam por
/_ah/api
, significa que a versão 2.0 dos Frameworks de Endpoints está a publicar a sua API. Os registos não devem apresentar pedidos com caminhos que comecem por/_ah/spi
. Estes pedidos indicam que o proxy da versão 1.0 do Endpoints Frameworks ainda está a publicar pedidos.
Adicionar gestão da API Endpoints
A versão 2.0 do Endpoints Frameworks também lhe permite ativar funcionalidades de gestão de APIs, incluindo:
- Gestão de chaves da API
- Partilha de APIs
- Autenticação do utilizador
- Métricas da API
- Registos da API
Para começar a usar estas funcionalidades, consulte o artigo Adicionar gestão de APIs.
Resolução de problemas
Esta secção descreve comportamentos irregulares comuns ao migrar para a versão 2.0 dos Frameworks de Endpoints e as soluções sugeridas.
A API devolve erros 404
, mas o Explorador de APIs continua a listar as APIs corretamente
Tem de remover a configuração da versão 1.0 do Endpoints Frameworks
quando migrar para a versão 2.0 do Endpoints Frameworks. Se a configuração antiga ainda estiver presente na configuração da aplicação, o serviço Endpoints continua a tratar a app como uma app da versão 1.0. Pode ver pedidos nos registos do App Engine enviados para /_ah/spi
, o que resulta em erros HTTP 404
enviados para o cliente.
Remova as seguintes linhas do ficheiro
web.xml
, se estiverem presentes:<servlet> <servlet-name>SystemServiceServlet</servlet-name> <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class> <init-param> <param-name>services</param-name> <param-value>...</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SystemServiceServlet</servlet-name> <url-pattern>/_ah/spi/*</url-pattern> </servlet-mapping>
Certifique-se de que o ficheiro
web.xml
contém o seguinte:<servlet-mapping> <servlet-name>EndpointsServlet</servlet-name> <url-pattern>/_ah/api/*</url-pattern> </servlet-mapping>
A API está a gerar erros de reflexão
Tem de incluir apenas o artefacto endpoints-framework
na sua aplicação e não o JAR appengine-endpoints
antigo. Se implementar uma aplicação com ambos os JARs, pode deparar-se com erros de reflexão ou erros de tipo de tempo de execução, como NoClassDefFoundError
, NoSuchMethodError
e ClassCastException
. Remova as seguintes linhas do ficheiro de compilação, se estiverem presentes:
Maven
Gradle
compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
Além disso, se alguma das suas outras dependências depender de versões mais antigas do Guava, isto também pode manifestar-se como um método TypeToken
em falta. Tem de garantir que usa o Guava v19 ou o artefacto endpoints-framework-all
, que oculta dependências.
As origens da biblioteca de cliente não são compiladas
Se vir um erro como method does not override or implement a method
from a supertype
ou cannot find symbol method setBatchPath(String)
, é provável que a sua aplicação cliente dependa de uma versão antiga da biblioteca cliente Java da Google. Tem de garantir que o seu artefacto google-api-client
é
1.23.0
ou superior.
Maven
<dependency> <groupId>com.google.api-client</groupId> <artifactId>google-api-client</artifactId> <version>1.23.0</version> </dependency>
Gradle
compile group: 'com.google.api-client', name: 'google-api-client', version: '1.23.0'
Problemas com a melhoria do Datanucleus JPA/JDO
Maven
O novo plug-in do App Engine Maven baseado na CLI do Google Cloud não suporta o melhoramento do Datanucleus de nenhum tipo. Se o seu projeto usar o suporte de melhoramento do Datanucleus JDO ou JPA do plug-in antigo, tem de configurar o plug-in Maven do Datanucleus de terceiros separadamente quando fizer a migração. Consulte o seguinte para mais informações:
Gradle
Se o seu projeto usar o melhoramento do gradle-appengine-plugin
JPA/JDO
Datanucleus, tem de configurar manualmente o melhoramento do Datanucleus
depois de mudar para o novo plug-in do Gradle baseado na CLI gcloud.
Veja um
exemplo do Stackoverflow.