Cette page décrit la migration d'une application Cloud Endpoints version 1.0 existante vers Endpoints Frameworks pour App Engine en Java.
Avantages
Le nouveau framework présente de nombreux avantages, par exemple :
- Latence réduite des requêtes
- Meilleure intégration aux fonctionnalités d'App Engine (telles que les domaines personnalisés)
- Compatibilité officielle avec les configurations Guice
- En option, de nouvelles fonctionnalités de gestion de l'API
Endpoints Frameworks version 2.0 n'a pas d'incidence sur les interfaces avec l'API. Les clients existants continuent de fonctionner après la migration sans aucune modification du code côté client.
Fonctionnalités et outils actuellement exclus
Les fonctionnalités suivantes ne sont pas disponibles actuellement. Si vous en avez besoin, veuillez soumettre une demande de fonctionnalité.
- Protocole JSON-RPC, requis pour les anciens clients iOS. Si vous souhaitez créer des clients iOS pour l'API Endpoints Frameworks version 2.0, nous vous recommandons d'employer la bibliothèque cliente Objective-C d'API Google pour les API REST.
- ETags automatiques
- Champs de genre automatiques
- Intégration avec l'IDE
- Réponses partielles grâce au paramètre
fields
- Création automatique de méthodes API PATCH
De plus, si Android Studio est compatible avec Endpoints version 1.0, il ne l'est pas pour le moment avec la version 2.0.
Migrer vers Endpoints Frameworks version 2.0
Endpoints Frameworks version 2.0 a été transféré dans les artefacts Maven du groupe com.google.endpoints
.
Le fichier JAR de base requis se trouve dans l'artefact endpoints-framework
. Si vous souhaitez utiliser la configuration Guice, ajoutez l'artefact endpoints-framework-guice
.
Les instructions suivantes fournissent un exemple de migration d'Endpoints Frameworks version 1.0 vers Endpoints Frameworks version 2.0 à l'aide d'un document de découverte :
- Téléchargez et initialisez Google Cloud CLI.
- Exécutez les commandes suivantes :
- Assurez-vous que gcloud CLI est autorisée à accéder à vos données et services sur Google Cloud:
gcloud auth login
- Utilisez les identifiants par défaut de l'application :
gcloud auth application-default login
- Installez le composant
app-engine-java
de Google Cloud SDK:gcloud components install app-engine-java
- Installez la dernière version de Google Cloud SDK et de tous ses composants:
gcloud components update
- Assurez-vous que gcloud CLI est autorisée à accéder à vos données et services sur Google Cloud:
Procéder à la migration à l'aide de Maven ou de Gradle
Maven
- Supprimez l'ancienne dépendance, à savoir l'artefact
appengine-endpoints
: - Ajoutez la nouvelle dépendance Endpoints Frameworks:
- Ajoutez le nouveau plug-in Endpoints Frameworks, puis définissez le nom d'hôte d'un document de découverte généré:
- Ajoutez le nouveau plug-in App Engine Maven:
- Mettez à jour le point d'entrée de l'API dans le fichier
web.xml
de votre projet :- Renommez toutes les occurrences de
SystemServiceServlet
enEndpointsServlet
. - Remplacez toutes les occurrences du chemin d'accès
/_ah/spi/
par le nouveau chemin d'accès requis/_ah/api/
.
Voici le contenu du fichier
web.xml
avant et après la migration :Avant la migration
web.xml
Endpoints Frameworks version 1.0:Après la migration
Fichierweb.xml
Endpoints Frameworks version 2.0: - Renommez toutes les occurrences de
- Après avoir modifié les dépendances, nettoyez le projet :
mvn clean
- Vous pouvez générer un document de découverte :
En savoir plus sur les objectifs du plug-in Maven Endpoints Frameworksmvn endpoints-framework:discoveryDocs
- Vous pouvez déployer un projet :
mvn appengine:deploy
En savoir plus sur les objectifs du plug-in Maven App Engine
Gradle
- Supprimez l'ancienne dépendance, à savoir l'artefact
appengine-endpoints
:compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
- Ajoutez la nouvelle dépendance Endpoints Frameworks:
- Ajoutez les nouveaux plug-ins App Engine et Endpoints Frameworks :
- Appliquez les nouveaux plug-ins App Engine et Endpoints Frameworks:
- Définissez le point de terminaison du nom d'hôte pour les documents de découverte générés:
- Mettez à jour le point d'entrée de l'API dans le fichier
web.xml
de votre projet :- Renommez toutes les occurrences de
SystemServiceServlet
enEndpointsServlet
. - Remplacez toutes les occurrences du chemin d'accès
/_ah/spi/
par le nouveau chemin d'accès requis/_ah/api/
.
Voici le contenu du fichier
web.xml
avant et après la migration :Avant la migration
web.xml
Endpoints Frameworks version 1.0:Après la migration
Fichierweb.xml
Endpoints Frameworks version 2.0: - Renommez toutes les occurrences de
- Après avoir modifié les dépendances, nettoyez le projet à l'aide de la commande suivante :
gradle clean
- Vous pouvez générer un document de découverte à l'aide de la commande suivante :
En savoir plus sur les tâches du plug-in Gradle Endpoints Frameworksgradle endpointsDiscoveryDocs
- Vous pouvez déployer un projet à l'aide de la commande suivante :
gradle appengineDeploy
En savoir plus sur les tâches du plug-in Gradle App Engine
Utiliser Guice pour configurer Endpoints Frameworks en Java
Si vous souhaitez faire appel à Guice :
- Ajoutez la nouvelle dépendance Guice d'Endpoints Frameworks :
Maven
Gradle
- Déclarez un nouveau module qui étend
EndpointsModule
, puis configurez-le comme suit:
Valider un nouveau déploiement
Pour confirmer que le nouveau framework diffuse le trafic, procédez comme suit :
- Envoyez des requêtes au nouveau déploiement.
Dans la console Google Cloud, accédez à la page Journalisation > Explorateur de journaux.
Si les requêtes sont affichées avec des chemins commençant par
/_ah/api
, cela signifie qu'Endpoints Frameworks version 2.0 diffuse maintenant votre API. Les journaux ne doivent afficher aucune requête dont le chemin commence par/_ah/spi
. Ces requêtes indiquent que le proxy Endpoints Frameworks version 1.0 les diffuse toujours.
Ajouter la gestion des API Endpoints
Endpoints Frameworks version 2.0 vous permet également d'activer les fonctionnalités de gestion de l'API, par exemple :
- Gestion des clés API
- Partage de l'API
- Authentification des utilisateurs
- Métriques de l'API
- Journaux de l'API
Pour commencer à utiliser ces fonctionnalités, consultez la page Ajouter la gestion d'API :
Dépannage
Cette section décrit les sources d'instabilité courantes lors de la migration vers Endpoints Frameworks version 2.0, ainsi que les solutions suggérées.
L'API renvoie des erreurs 404
, mais l'explorateur d'API répertorie toujours correctement les API
Vous devez supprimer l'ancienne configuration d'Endpoints Frameworks version 1.0 lors de la migration vers Endpoints Frameworks version 2.0. Si l'ancienne configuration est toujours présente dans la configuration de l'application, le service Endpoints continue à traiter l'application comme s'il s'agissait d'une application version 1.0. Il se peut que des requêtes figurant dans les journaux App Engine soient envoyées à /_ah/spi
, ce qui entraîne l'envoi d'erreurs HTTP 404
au client.
Le cas échéant, supprimez les lignes suivantes de votre fichier
web.xml
:<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>
Assurez-vous que votre fichier
web.xml
contient les éléments suivants :<servlet-mapping> <servlet-name>EndpointsServlet</servlet-name> <url-pattern>/_ah/api/*</url-pattern> </servlet-mapping>
L'API génère des erreurs de réflexion
Vous ne devez packager que l'artefact endpoints-framework
dans l'application, pas l'ancien fichier JAR appengine-endpoints
. Si vous déployez une application avec les deux fichiers JAR, il se peut que vous rencontriez des erreurs de réflexion ou des erreurs de typage à l'exécution, telles que NoClassDefFoundError
, NoSuchMethodError
et ClassCastException
. Le cas échéant, supprimez les lignes suivantes du fichier de version :
Maven
Gradle
compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
De plus, si l'une des autres dépendances dépend d'anciennes versions de Guava, cela peut également se manifester par l'absence de la méthode TypeToken
. Vous devez vous assurer que vous employez Guava v19 ou l'artefact endpoints-framework-all
, qui masque les dépendances.
Les sources de la bibliothèque cliente ne sont pas compilées
Si vous voyez une erreur telle que method does not override or implement a method
from a supertype
ou cannot find symbol method setBatchPath(String)
, cela signifie que votre application cliente dépend probablement d'une ancienne version de la bibliothèque cliente Java de Google. Vous devez vous assurer que l'artefact google-api-client
est de la version 1.23.0
ou d'une version supérieure.
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'
Problèmes liés à l'amélioration de JPA/JDO Datanucleus
Maven
Le nouveau plug-in Maven App Engine basé sur la Google Cloud CLI n'est compatible avec aucun type d'amélioration Datanucleus. Si votre projet bénéficie de la compatibilité avec l'amélioration JDO ou JPA Datanucleus de l'ancien plug-in, vous devez configurer le plug-in Maven Datanucleus tiers séparément lors de la migration. Pour en savoir plus, lisez les informations ci-après.
Gradle
Si votre projet utilise l'amélioration JPA/JDO Datanucleus de gradle-appengine-plugin
, vous devez configurer celle-ci manuellement après être passé au nouveau plug-in Gradle basé sur gcloud CLI.
Consultez un exemple sur Stack Overflow.