En esta página se describe cómo migrar una aplicación de Cloud Endpoints versión 1.0 a Endpoints Frameworks para App Engine en Java.
Ventajas
El nuevo marco ofrece varias ventajas, entre las que se incluyen las siguientes:
- Se ha reducido la latencia de las solicitudes.
- Mejor integración con las funciones de App Engine, como los dominios personalizados.
- Compatibilidad oficial con las configuraciones de Guice.
- Opcionalmente, nuevas funciones de gestión de APIs.
La versión 2.0 de Endpoints Frameworks no afecta a las interfaces de tu API. Los clientes actuales seguirán funcionando después de la migración sin necesidad de cambiar el código del lado del cliente.
Funciones y herramientas excluidas actualmente
Las siguientes funciones no están disponibles en este momento. Si necesita alguna de estas funciones, envíe una solicitud de función.
- Protocolo JSON-RPC, que es obligatorio para los clientes de iOS antiguos. Para crear clientes de iOS para tu API de Endpoints Frameworks versión 2.0, te recomendamos que uses la biblioteca de cliente de APIs de Google para Objective-C para APIs REST.
- ETags automáticas
- Campos de tipo automático
- Integración en IDE
fields
respuestas parciales- Creación automática de métodos de API PATCH
Además, Android Studio no admite la versión 1.0 de Endpoints en la versión 2.0.
Migrar a la versión 2.0 de Endpoints Frameworks
La versión 2.0 de Endpoints Frameworks se ha trasladado a los artefactos de Maven del grupo com.google.endpoints
.
El archivo JAR base obligatorio se encuentra en el artefacto endpoints-framework
. Si quieres usar la configuración de Guice, añade el artefacto endpoints-framework-guice
.
Las siguientes instrucciones muestran un ejemplo de cómo migrar de la versión 1.0 de Endpoints Frameworks a la versión 2.0 mediante un documento de descubrimiento:
- Descarga e inicializa Google Cloud CLI.
- Ejecuta los siguientes comandos:
- Asegúrate de que la CLI de gcloud tenga autorización para acceder a tus datos y servicios en Google Cloud:
gcloud auth login
- Usa las credenciales de aplicación predeterminadas:
gcloud auth application-default login
- Instala el componente
app-engine-java
del SDK de Google Cloud:gcloud components install app-engine-java
- Actualiza a la versión más reciente del SDK de Google Cloud y de todos los componentes:
gcloud components update
- Asegúrate de que la CLI de gcloud tenga autorización para acceder a tus datos y servicios en Google Cloud:
Migrar con Maven o Gradle
Maven
- Elimina la dependencia antigua, que es el
artefacto
appengine-endpoints
: - Añade la nueva dependencia de Endpoints Frameworks:
- Añade el nuevo complemento Endpoints Frameworks y define el nombre de host de un documento de descubrimiento generado:
- Añade el nuevo complemento de Maven de App Engine:
- Actualiza el punto de entrada de la API en el archivo
web.xml
de tu proyecto:- Cambiar todas las instancias de
SystemServiceServlet
porEndpointsServlet
- Sustituye todas las instancias de la ruta
/_ah/spi/
por la nueva ruta obligatoria/_ah/api/
.
A continuación, se muestra el contenido de
web.xml
antes y después de la migración:Antes de la migración
Endpoints Frameworks versión 1.0web.xml
:Después de la migración
Endpoints Frameworks versión 2.0web.xml
: - Cambiar todas las instancias de
- Después de modificar las dependencias, limpia el proyecto:
mvn clean
- Puedes generar un documento de descubrimiento:
Consulta más información sobre los objetivos del complemento de Maven Endpoints Frameworks.mvn endpoints-framework:discoveryDocs
- Puedes desplegar un proyecto:
mvn appengine:deploy
Más información sobre los objetivos del complemento de Maven App Engine
Gradle
- Elimina la dependencia antigua, que es el
artefacto
appengine-endpoints
:compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
- Añade la nueva dependencia de Endpoints Frameworks:
- Añade los nuevos complementos de App Engine y Endpoints Frameworks:
- Aplica los nuevos complementos de App Engine y Endpoints Frameworks:
- Define el endpoint del nombre de host de los documentos de descubrimiento generados:
- Actualiza el punto de entrada de la API en el archivo
web.xml
de tu proyecto:- Cambiar todas las instancias de
SystemServiceServlet
porEndpointsServlet
- Sustituye todas las instancias de la ruta
/_ah/spi/
por la nueva ruta obligatoria/_ah/api/
.
A continuación, se muestra el contenido de
web.xml
antes y después de la migración:Antes de la migración
Endpoints Frameworks versión 1.0web.xml
:Después de la migración
Endpoints Frameworks versión 2.0web.xml
: - Cambiar todas las instancias de
- Después de modificar las dependencias, limpia el proyecto con el siguiente comando:
gradle clean
- Puedes generar un documento de descubrimiento de las siguientes formas:
Consulta más información sobre las tareas del complemento de Gradle Endpoints Frameworks.gradle endpointsDiscoveryDocs
- Puedes desplegar un proyecto de las siguientes formas:
gradle appengineDeploy
Consulta más información sobre las tareas del complemento de Gradle App Engine.
Usar Guice para configurar Endpoints Frameworks para Java
Si quieres usar Guice, sigue estos pasos:
- Añade la nueva dependencia de Guice de Endpoints Frameworks:
Maven
Gradle
- Declara un nuevo módulo que extienda
EndpointsModule
y configúralo de la siguiente manera:
Verificar una nueva implementación
Para comprobar que el nuevo framework está sirviendo tráfico, sigue estos pasos:
- Envía algunas solicitudes al nuevo despliegue.
En la Google Cloud consola, ve a la página Registro > Explorador de registros.
Si las solicitudes se muestran con rutas que empiezan por
/_ah/api
, significa que Endpoints Frameworks versión 2.0 está sirviendo tu API. Los registros no deberían mostrar ninguna solicitud con rutas que empiecen por/_ah/spi
. Estas solicitudes indican que el proxy de la versión 1.0 de Endpoints Frameworks sigue atendiendo solicitudes.
Añadir gestión de APIs de Endpoints
Endpoints Frameworks 2.0 también te permite activar funciones de gestión de APIs, como las siguientes:
- Gestión de claves de API
- Compartir APIs
- Autenticación de usuarios
- Métricas de APIs
- Registros de la API
Para empezar a usar estas funciones, consulta el artículo Añadir gestión de APIs.
Solución de problemas
En esta sección se describen los comportamientos erráticos habituales que se producen al migrar a Endpoints Frameworks 2.0 y las soluciones sugeridas.
La API devuelve errores 404
, pero el Explorador de APIs sigue mostrando las APIs correctamente
Debes eliminar la configuración de la versión 1.0 de Endpoints Frameworks al migrar a la versión 2.0. Si la configuración antigua sigue presente en la configuración de la aplicación, el servicio Endpoints seguirá tratando la aplicación como una aplicación de la versión 1.0. Puede que veas solicitudes en tus registros de App Engine enviadas a /_ah/spi
, lo que provocará que se envíen errores HTTP 404
al cliente.
Elimine las siguientes líneas de su archivo
web.xml
, si están 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>
Asegúrate de que tu archivo
web.xml
contenga lo siguiente:<servlet-mapping> <servlet-name>EndpointsServlet</servlet-name> <url-pattern>/_ah/api/*</url-pattern> </servlet-mapping>
La API genera errores de reflexión
Solo debes empaquetar el artefacto endpoints-framework
en tu aplicación, no el antiguo JAR appengine-endpoints
. Si implementas una aplicación con ambos archivos JAR, es posible que se produzcan errores de reflexión o errores de tipo de tiempo de ejecución, como NoClassDefFoundError
, NoSuchMethodError
y ClassCastException
. Elimina las siguientes líneas del archivo de compilación, si las hay:
Maven
Gradle
compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
Además, si alguna de tus otras dependencias depende de versiones anteriores de Guava, esto también puede manifestarse como un método TypeToken
que falta. Debes asegurarte de usar Guava v19 o el artefacto endpoints-framework-all
, que oculta las dependencias.
No se compilan las fuentes de la biblioteca de cliente
Si ves un error como method does not override or implement a method
from a supertype
o cannot find symbol method setBatchPath(String)
, es probable que tu aplicación cliente dependa de una versión antigua de la biblioteca cliente de Java de Google. Debes asegurarte de que tu artefacto google-api-client
sea 1.23.0
o una versión posterior.
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 con la mejora de Datanucleus de JPA o JDO
Maven
El nuevo complemento de Maven de App Engine basado en la CLI de Google Cloud no admite la mejora de Datanucleus de ningún tipo. Si tu proyecto usa la compatibilidad con la mejora de Datanucleus JDO o JPA del antiguo complemento, debes configurar el complemento de Maven de Datanucleus de terceros por separado al migrar. Consulta las siguientes secciones para obtener más información:
Gradle
Si tu proyecto usa la mejora gradle-appengine-plugin
JPA/JDO
Datanucleus, debes configurar manualmente la mejora Datanucleus
después de cambiar al nuevo complemento de Gradle basado en la CLI de gcloud.
Consulta un
ejemplo de Stack Overflow.