Questa pagina descrive la migrazione di un'applicazione Cloud Endpoints versione 1.0 esistente a Endpoints Frameworks per App Engine in Java.
Vantaggi
Il nuovo framework offre una serie di vantaggi, tra cui:
- Latenza delle richieste ridotta.
- Migliore integrazione con le funzionalità di App Engine, come i domini personalizzati.
- Supporto ufficiale per le configurazioni Guice.
- (Facoltativo) Nuove funzionalità di gestione delle API.
Endpoints Frameworks versione 2.0 non influisce sulle interfacce della tua API. I client esistenti continuano a funzionare dopo la migrazione senza modifiche al codice lato client.
Funzionalità e strumenti attualmente esclusi
Le seguenti funzionalità non sono al momento disponibili. Se hai bisogno di uno di questi, invia una richiesta di funzionalità.
- Protocollo JSON-RPC, necessario per i client iOS legacy. Per creare client iOS per la tua API Endpoints Frameworks versione 2.0, ti consigliamo di utilizzare la libreria client Objective-C delle API di Google per le API REST.
- ETag automatiche
- Campi automatici del tipo
- Integrazione con l'ambiente IDE
fields
risposte parziali- Creazione automatica del metodo API PATCH
Inoltre, il supporto di Android Studio per Endpoints versione 1.0 non è attualmente supportato per la versione 2.0.
Migrazione a Endpoints Frameworks versione 2.0
Endpoints Frameworks versione 2.0 è stato spostato negli artefatti Maven nel gruppo
com.google.endpoints
.
Il file JAR di base richiesto si trova nell'artefatto endpoints-framework
. Se vuoi
utilizzare la configurazione Guice, aggiungi l'artefatto endpoints-framework-guice
.
Le istruzioni seguenti forniscono un esempio di come eseguire la migrazione da Endpoints Frameworks versione 1.0 a Endpoints Frameworks versione 2.0 utilizzando un documento di rilevamento:
- Scarica e inizializza Google Cloud CLI.
- Esegui i seguenti comandi:
- Assicurati che gcloud CLI sia autorizzata ad accedere ai tuoi dati e servizi su Google Cloud:
gcloud auth login
- Utilizza le credenziali predefinite dell'applicazione:
gcloud auth application-default login
- Installa il componente
app-engine-java
di Google Cloud SDK:gcloud components install app-engine-java
- Esegui l'aggiornamento all'ultima versione di Google Cloud SDK e di tutti i componenti:
gcloud components update
- Assicurati che gcloud CLI sia autorizzata ad accedere ai tuoi dati e servizi su Google Cloud:
Eseguire la migrazione utilizzando Maven o Gradle
Maven
- Rimuovi la dipendenza legacy, ovvero l'artefatto
appengine-endpoints
: - Aggiungi la nuova dipendenza di Endpoints Frameworks:
- Aggiungi il nuovo plug-in Endpoints Frameworks e definisci il nome host per un documento di rilevamento generato:
- Aggiungi il nuovo plug-in Maven App Engine:
- Aggiorna il punto di ingresso dell'API nel file
web.xml
del progetto:- Rinomina tutte le occorrenze di
SystemServiceServlet
inEndpointsServlet
- Sostituisci tutte le occorrenze del percorso
/_ah/spi/
con il nuovo percorso richiesto/_ah/api/
Di seguito sono riportati i contenuti di
web.xml
prima e dopo la migrazione:Prima della migrazione
Endpoints Frameworks versione 1.0web.xml
:Dopo la migrazione
Endpoints Frameworks versione 2.0web.xml
: - Rinomina tutte le occorrenze di
- Dopo aver modificato le dipendenze, pulisci il progetto:
mvn clean
- Puoi generare un documento di rilevamento:
Scopri di più sugli obiettivi del plug-in Maven Endpoints Frameworks.mvn endpoints-framework:discoveryDocs
- Puoi eseguire il deployment di un progetto:
mvn appengine:deploy
Scopri di più sugli obiettivi del plug-in Maven App Engine.
Gradle
- Rimuovi la dipendenza legacy, ovvero l'artefatto
appengine-endpoints
:compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
- Aggiungi la nuova dipendenza di Endpoints Frameworks:
- Aggiungi i nuovi plug-in App Engine e Endpoints Frameworks:
- Applica i nuovi plug-in App Engine e Endpoints Frameworks:
- Definisci l'endpoint del nome host per i documenti di rilevamento generati:
- Aggiorna il punto di ingresso dell'API nel file
web.xml
del progetto:- Rinomina tutte le occorrenze di
SystemServiceServlet
inEndpointsServlet
- Sostituisci tutte le occorrenze del percorso
/_ah/spi/
con il nuovo percorso richiesto/_ah/api/
Di seguito sono riportati i contenuti di
web.xml
prima e dopo la migrazione:Prima della migrazione
Endpoints Frameworks versione 1.0web.xml
:Dopo la migrazione
Endpoints Frameworks versione 2.0web.xml
: - Rinomina tutte le occorrenze di
- Dopo aver modificato le dipendenze, pulisci il progetto utilizzando:
gradle clean
- Puoi generare un documento di rilevamento utilizzando:
Scopri di più sulle attività del plug-in Gradle Endpoints Frameworksgradle endpointsDiscoveryDocs
- Puoi eseguire il deployment di un progetto utilizzando:
gradle appengineDeploy
Scopri di più sulle attività del plug-in Gradle App Engine.
Utilizzo di Guice per configurare Endpoints Frameworks per Java
Se vuoi utilizzare Guice:
- Aggiungi la nuova dipendenza Guice di Endpoints Frameworks:
Maven
Gradle
- Dichiara un nuovo modulo che estende
EndpointsModule
e configuralo nel seguente modo:
Verifica di un nuovo deployment
Puoi verificare che il nuovo framework stia gestendo il traffico:
- Invia alcune richieste al nuovo deployment.
Nella console Google Cloud , vai alla pagina Logging > Esplora log.
Se le richieste vengono visualizzate con percorsi che iniziano con
/_ah/api
, significa che Endpoints Frameworks versione 2.0 ora gestisce la tua API. I log non devono mostrare richieste con percorsi che iniziano con/_ah/spi
. Queste richieste indicano che il proxy di Endpoints Frameworks versione 1.0 continua a gestire le richieste.
Aggiunta della gestione delle API Endpoints
Endpoints Frameworks versione 2.0 consente anche di attivare le funzionalità di gestione delle API, tra cui:
- Gestione delle chiavi API
- Condivisione delle API
- Autenticazione degli utenti
- Metriche delle API
- Log API
Per iniziare a utilizzare queste funzionalità, consulta la sezione Aggiunta della gestione delle API.
Risoluzione dei problemi
Questa sezione descrive i comportamenti anomali comuni durante la migrazione a Endpoints Frameworks versione 2.0 e le soluzioni suggerite.
L'API restituisce errori 404
, ma Explorer API elenca comunque le API correttamente
Quando esegui la migrazione a Endpoints Frameworks versione 2.0, devi rimuovere la vecchia configurazione di Endpoints Frameworks versione 1.0. Se
la vecchia configurazione è ancora presente nella configurazione
dell'applicazione, il servizio Endpoints continua a trattare l'app
come un'app di versione 1.0.
Potresti visualizzare richieste nei log di App Engine inviate a /_ah/spi
, che
comportano errori HTTP 404
inviati al client.
Se presenti, rimuovi le seguenti righe dal file
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>
Assicurati che il file
web.xml
contenga quanto segue:<servlet-mapping> <servlet-name>EndpointsServlet</servlet-name> <url-pattern>/_ah/api/*</url-pattern> </servlet-mapping>
L'API genera errori di reflection
Devi includere nel pacchetto dell'applicazione solo l'artefatto endpoints-framework
,
non il vecchio JAR appengine-endpoints
. Se esegui il deployment di un'applicazione con entrambi i
file JAR, potresti riscontrare errori di reflection o errori di tipo di runtime, ad esempio
NoClassDefFoundError
, NoSuchMethodError
e ClassCastException
. Rimuovi
le seguenti righe dal file di build, se presenti:
Maven
Gradle
compile group: 'com.google.appengine', name: 'appengine-endpoints', version: '+'
Inoltre, se una delle altre dipendenze dipende da versioni precedenti di
Guava, questo può manifestarsi anche come metodo TypeToken
mancante. Devi assicurarti
di utilizzare Guava v19 o l'artefatto endpoints-framework-all
, che
ombreggia le dipendenze.
Le origini della libreria client non vengono compilate
Se visualizzi un errore come method does not override or implement a method
from a supertype
o cannot find symbol method setBatchPath(String)
, è probabile che la tua applicazione client dipenda da una versione precedente della libreria client Google Java. Devi assicurarti che l'artefatto google-api-client
sia
1.23.0
o superiore.
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'
Problemi con il miglioramento di JPA/JDO Datanucleus
Maven
Il nuovo plug-in Maven di App Engine basato Google Cloud CLI non supporta il miglioramento di Datanucleus di alcun tipo. Se il tuo progetto utilizza il supporto per il miglioramento di Datanucleus JDO o JPA del vecchio plug-in, devi configurare separatamente il plug-in Maven Datanucleus di terze parti durante la migrazione. Vai ai seguenti argomenti per ulteriori informazioni:
Gradle
Se il tuo progetto utilizza il miglioramento gradle-appengine-plugin
JPA/JDO
Datanucleus, devi configurare manualmente il miglioramento Datanucleus
dopo il passaggio al nuovo plug-in Gradle basato su gcloud CLI.
Vedi un
esempio di Stack Overflow.