En esta página, se describe cómo migrar una aplicación existente de Cloud Endpoints versión 1.0 a Endpoints Frameworks para App Engine en Java.
Beneficios
El nuevo marco de trabajo cuenta con una serie de beneficios, incluidos los siguientes:
- Latencia de solicitud reducida
- Mejor integración con las características de App Engine, como los dominios personalizados
- Asistencia oficial para configuraciones de Guice.
- De forma opcional, nuevas características de administración de API
Endpoints Frameworks versión 2.0 no afecta las interfaces hacia tu API. Los clientes existentes continúan trabajando después de la migración sin ningún cambio en el código del lado del cliente.
Funciones y herramientas excluidas actualmente
Las siguientes funciones no están disponibles por el momento. Si necesitas alguna de ellas, envía una solicitud de función.
- Protocolo JSON-RPC, que se requiere para los clientes iOS heredados. Si deseas crear clientes iOS para tu API de Endpoints Frameworks versión 2.0, te recomendamos que uses la Biblioteca cliente Objective-C de la API de Google para las API de REST.
- ETags automáticos
- Campos de tipo automáticos
- Integración con IDE
- Respuestas parciales de
fields
- Creación automática del método PATCH API
Además, la asistencia de Android Studio para Endpoints versión 1.0 actualmente no es compatible con la versión 2.0.
Migrar a Endpoints Frameworks versión 2.0
Endpoints Frameworks versión 2.0 ha pasado a los artefactos Maven en el grupo com.google.endpoints
.
El JAR base requerido está en el artefacto endpoints-framework
. Si deseas usar la configuración de Guice, agrega el artefacto endpoints-framework-guice
.
En las siguientes instrucciones, se proporciona un ejemplo de cómo migrar de la versión 1.0 de Endpoints Frameworks a la versión 2.0 de Endpoints Frameworks mediante un Documento de descubrimiento:
- Descarga e inicializa Google Cloud CLI.
- Ejecuta los siguientes comandos:
- Asegúrate de que gcloud CLI esté autorizada para acceder a tus datos y servicios en Google Cloud:
gcloud auth login
- Usa las credenciales predeterminadas de la aplicación:
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 gcloud CLI esté autorizada para acceder a tus datos y servicios en Google Cloud:
Migra con Maven o Gradle
Maven
- Quita la dependencia heredada, que es el artefacto
appengine-endpoints
: - Agrega la nueva dependencia de Endpoints Frameworks:
- Agrega el nuevo complemento de Endpoints Frameworks y define el nombre de host para un documento de descubrimiento generado:
- Agrega el nuevo complemento de Maven de App Engine:
- Actualiza el punto de entrada de la API en el archivo
web.xml
de tu proyecto:- Cambia el nombre de todos los casos de
SystemServiceServlet
aEndpointsServlet
- Reemplaza todos los casos de la ruta de acceso
/_ah/spi/
por la nueva ruta de acceso obligatoria/_ah/api/
El siguiente es 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
: - Cambia el nombre de todos los casos de
- Después de modificar las dependencias, limpia el proyecto con el siguiente comando:
mvn clean
- Puedes generar un documento de descubrimiento con lo siguiente:
Obtén más información sobre los objetivos de los complementos de Maven Endpoints Frameworks.mvn endpoints-framework:discoveryDocs
- Puedes implementar un proyecto con lo siguiente:
mvn appengine:deploy
Obtén más información sobre los objetivos de los complementos de Maven App Engine.
Gradle
- Quita la dependencia heredada, que es el artefacto
appengine-endpoints
, con el siguiente comando:compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
- Agrega la nueva dependencia de Endpoints Frameworks:
- Agrega los nuevos complementos de App Engine y Endpoints Frameworks:
- Aplica los nuevos complementos de App Engine y Endpoints Frameworks:
- Define el extremo del nombre de host para documentos de descubrimiento generados:
- Actualiza el punto de entrada de la API en el archivo
web.xml
de tu proyecto:- Cambia el nombre de todos los casos de
SystemServiceServlet
aEndpointsServlet
- Reemplaza todos los casos de la ruta de acceso
/_ah/spi/
por la nueva ruta de acceso obligatoria/_ah/api/
El siguiente es 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
: - Cambia el nombre de todos los casos de
- Después de modificar las dependencias, limpia el proyecto con lo siguiente:
gradle clean
- Puedes generar un documento de descubrimiento mediante lo siguiente:
Obtén más información sobre las tareas del complemento de Gradle Endpoints Frameworks.gradle endpointsDiscoveryDocs
- Para implementar un proyecto, puedes usar lo siguiente:
gradle appengineDeploy
Obtén más información acerca de las tareas del complemento de Gradle App Engine.
Usa Guice a fin de configurar Endpoints Frameworks para Java
Si deseas usar Guice, haz lo siguiente:
- Agrega la nueva dependencia de Endpoints Frameworks Guice:
Maven
Gradle
- Declara un nuevo módulo que extienda
EndpointsModule
y configúralo de la siguiente manera:
Verifica una nueva implementación
Puedes verificar si el nuevo marco de trabajo esté entregando tráfico:
- Envía algunas solicitudes a la implementación nueva.
En la consola de Google Cloud, ve a la página Registro > Explorador de registros.
Si se muestran solicitudes con rutas que comienzan con
/_ah/api
, Endpoints Frameworks versión 2.0 está entregando a tu API. Los registros no deben mostrar ninguna solicitud con rutas que comiencen con/_ah/spi
. Estas solicitudes indican que Endpoints Frameworks versión 1.0 todavía entrega solicitudes.
Agrega la administración de API para Endpoints
Con Endpoints Frameworks versión 2.0, también puedes activar las funciones de administración de API, incluidas las siguientes:
- Administración de claves de API
- Uso compartido de API
- Autenticación de usuarios
- Métricas de API
- Registros de API
Para comenzar a usar estas funciones, consulta Agrega administración de API.
Solución de problemas
En esta sección, se describen comportamientos erráticos comunes en la migración a Endpoints Frameworks versión 2.0 y las soluciones sugeridas.
La API muestra errores 404
, pero el Explorador de API aún enumera las API correctamente
Debes quitar la configuración antigua de Endpoints Frameworks versión 1.0 cuando migres a Endpoints Frameworks versión 2.0. Si la configuración antigua todavía está presente en la configuración de la aplicación, en el servicio de Endpoints se continúa tratando la aplicación como una aplicación de la versión 1.0. Es posible que veas solicitudes en tus registros de App Engine enviados a /_ah/spi
, lo que da como resultado el envío de errores HTTP 404
al cliente.
Quita las siguientes líneas de tu 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
Debes empaquetar solo el artefacto endpoints-framework
en tu aplicación, no el JAR appengine-endpoints
antiguo. Si implementas una aplicación con ambos JAR, puede que encuentres errores de reflexión o errores de tipo entorno de ejecución, como NoClassDefFoundError
, NoSuchMethodError
y ClassCastException
. Quita las siguientes líneas de tu archivo de compilación, si están presentes:
Maven
Gradle
compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
Además, si cualquiera de tus otras dependencias depende de versiones antiguas de Guava, también se puede manifestar como un método TypeToken
faltante. Debes asegurarte de usar Guava v19 o el artefacto endpoints-framework-all
, que cubre las dependencias.
Las fuentes de la biblioteca cliente no se compilan
Si ves un error del tipo method does not override or implement a method
from a supertype
o cannot find symbol method setBatchPath(String)
, puede que tu aplicación cliente dependa de una versión antigua de la biblioteca cliente de Google Java. Debes asegurarse de que tu artefacto google-api-client
sea 1.23.0
o 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 con las mejoras de JPA/JDO Datanucleus
Maven
El nuevo complemento de Maven para App Engine basado en Google Cloud CLI no es compatible con mejoras de Datanucleus de ningún tipo. Si tu proyecto usa la asistencia de mejoras de Datanucleus JDO o JPA del complemento antiguo, debes configurar el complemento de terceros de Datanucleus Maven de forma separada cuando hagas la migración. Consulta los siguientes vínculos para obtener más información:
Gradle
Si en tu proyecto se usan las mejoras gradle-appengine-plugin
de JPA/JDO de Datanucleus, tienes que configurarlas de forma manual después de cambiar al complemento nuevo de Gradle basado en gcloud CLI.
Observa un ejemplo de Stackoverflow.