Questa serie di procedure dettagliate illustra tutte le parti mobili di un componente aggiuntivo di Classroom funzionante. Ogni passaggio della procedura dettagliata affronta concetti specifici, implementandoli in una singola applicazione web. L'obiettivo è aiutarti a configurare, impostare e lanciare un componente aggiuntivo funzionale.
Il tuo componente aggiuntivo deve interagire con un progetto Google Cloud. Se non hai familiarità con Google Cloud, ti consigliamo di leggere le guide introduttive. Gestisci le credenziali, l'accesso API e l'SDK di Google Workspace Marketplace nella console Google Cloud. Per saperne di più sull'SDK Marketplace, visita la pagina della guida Scheda di Google Workspace Marketplace.
Questa guida tratta i seguenti argomenti:
- Utilizza Google Cloud per creare una pagina da mostrare in un iframe in Classroom.
- Aggiungi il Single Sign-On (SSO) di Google e consenti agli utenti di accedere.
- Effettua chiamate API per allegare il componente aggiuntivo a un compito.
- Rispetta i requisiti chiave per l'invio dei componenti aggiuntivi e le funzionalità richieste.
Questa guida presuppone che tu abbia familiarità con la programmazione e i concetti fondamentali dello sviluppo web. Ti consigliamo vivamente di leggere la guida alla configurazione del progetto prima di iniziare le procedure dettagliate. Questa pagina contiene dettagli di configurazione importanti che non sono trattati completamente nelle procedure dettagliate.
Esempi di implementazioni
Un esempio di riferimento completo è disponibile in Python. Sono disponibili anche implementazioni parziali in Java e Node.js. Queste implementazioni sono le origini del codice di esempio riportato nelle pagine successive.
Dove scaricare
Gli esempi Python e Java sono disponibili nei repository GitHub:
Il campione Node.js può essere scaricato come file ZIP:
Prerequisiti
Per preparare un nuovo progetto di componenti aggiuntivi, consulta le sezioni seguenti.
Certificato HTTPS
Anche se puoi ospitare la tua app in qualsiasi ambiente di sviluppo, il tuo
componente aggiuntivo di Classroom è disponibile solo tramite https://
. Pertanto,
per eseguire il deployment dell'app o per testarla all'interno
dell'iframe del componente aggiuntivo, è necessario un server con crittografia SSL.
È possibile utilizzare localhost
con un certificato SSL. Se devi creare un certificato per lo sviluppo locale, ti consigliamo di utilizzare mkcert.
Progetto Google Cloud
Devi configurare un progetto Google Cloud da utilizzare con questi esempi. Consulta la guida Creazione di progetti Google Cloud per una panoramica dei passaggi necessari per iniziare. La sezione Configurare un progetto Google Cloud nella prima procedura dettagliata descrive anche le azioni di configurazione specifiche da intraprendere.
Al termine, scarica l'ID client OAuth 2.0 come file JSON. Devi aggiungere questo file delle credenziali alla directory di esempio decompressa. Consulta la sezione Informazioni sui file per le posizioni specifiche.
Credenziali OAuth
Per creare nuove credenziali OAuth:
- Vai alla pagina Credenziali Google Cloud. Assicurati di aver selezionato il progetto corretto nella parte superiore dello schermo.
- Fai clic su CREA CREDENZIALI e scegli ID client OAuth dal menu a discesa.
- Nella pagina successiva:
- Imposta Tipo di applicazione su Applicazione web.
- In URI di reindirizzamento autorizzati, fai clic su AGGIUNGI URI. Aggiungi il percorso
completo per una route di callback per la tua applicazione. Ad esempio,
https://my.domain.com/auth-callback
ohttps://localhost:5000/callback
. Creerai e gestirai questa route più avanti in questa procedura dettagliata. Puoi modificare o aggiungere altri percorsi di questo tipo in qualsiasi momento. - Fai clic su CREA.
- Viene visualizzata una finestra di dialogo con le credenziali appena create. Scegli l'opzione SCARICA JSON. Copia il file JSON scaricato nella directory del server.
Prerequisiti specifici per lingua
Visualizza il file README in ogni repository per l'elenco più aggiornato dei prerequisiti.
Python
Il nostro esempio Python utilizza il framework Flask. Puoi scaricare il codice sorgente completo dai link forniti.
Se necessario, installa Python 3.7 o versioni successive e assicurati che pip
sia disponibile.
python3 -m ensurepip --upgrade
Ti consigliamo inoltre di configurare e attivare un nuovo ambiente virtuale Python.
python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate
In ogni sottodirectory della procedura dettagliata negli esempi scaricati è presente un requirements.txt
. Puoi installare rapidamente le librerie richieste utilizzando
pip
. Utilizza i seguenti comandi per installare le librerie richieste per la
prima procedura dettagliata.
cd flask/01-basic-app
pip install -r requirements.txt
Node.js
Il nostro esempio Node.js utilizza il framework Express. Puoi scaricare il codice sorgente completo dai link forniti.
Questo esempio richiede Node.js v16.13 o versioni successive.
Installa i moduli nodo richiesti utilizzando npm
.
npm install
Java
Il nostro esempio Java utilizza il framework Spring Boot. Puoi scaricare il codice sorgente completo dai link forniti.
Installa Java 11+ se non è già installato sulla tua macchina.
Le applicazioni Spring Boot possono utilizzare Gradle o Maven per gestire le build e le dipendenze. Questo esempio include il wrapper Maven che garantisce una compilazione riuscita senza richiedere l'installazione di Maven.
Nella directory in cui hai scaricato o clonato il progetto, esegui i seguenti comandi per assicurarti di disporre dei prerequisiti per eseguire il progetto.
java --version
./mvnw --version
Oppure su Windows:
java -version
mvnw.cmd --version
Comprendere i file
Le sezioni seguenti descrivono il layout delle directory di esempio.
Nomi delle directory
Ogni repository contiene diverse directory i cui nomi iniziano con un numero,
ad esempio /01-basic-app/
. I numeri corrispondono a passaggi specifici della procedura dettagliata.
Ogni directory contiene un'app web completamente funzionante che implementa le funzionalità
descritte in una particolare procedura dettagliata. Ad esempio, la directory /01-basic-app/
contiene l'implementazione finale della procedura dettagliata Crea un componente aggiuntivo.
Contenuti della directory
I contenuti della directory variano a seconda del linguaggio di implementazione:
Python
La radice della directory contiene i seguenti file:
main.py
: il punto di accesso dell'applicazione Python. Specifica la configurazione del server da utilizzare in questo file, quindi eseguilo per avviare il server.requirements.txt
: i moduli Python necessari per eseguire l'app web. Possono essere installati automaticamente utilizzandopip install -r requirements.txt
.client_secret.json
: il file client secret scaricato da Google Cloud. Tieni presente che questo non è incluso nell'archivio di esempio. Devi rinominare e copiare il file delle credenziali scaricato in ogni directory principale.
config.py
: opzioni di configurazione per il server Flask.La directory
webapp
contiene i contenuti dell'applicazione web. Include i seguenti contenuti:La directory
/templates/
con i modelli Jinja per varie pagine.La directory
/static/
con immagini, CSS e file JavaScript ausiliari.routes.py
: i metodi di gestione per le route dell'applicazione web.__init__.py
: l'inizializzatore per il modulowebapp
. Questo inizializzatore avvia il server Flask e carica le opzioni di configurazione impostate inconfig.py
.File aggiuntivi richiesti da un particolare passaggio della procedura dettagliata.
Node.js
Ogni passaggio della procedura dettagliata si trova nella propria sottocartella <step>
. Ogni passaggio contiene:
- I file statici come JavaScript, CSS e immagini si trovano nella
cartella
./<step>/public
. - I router Express si trovano nelle cartelle
./<step>/routes
. - I modelli HTML si trovano nelle cartelle
./<step>/views
. - L'applicazione server è
./<step>/app.js
.
Java
La directory del progetto include quanto segue:
- La directory
src.main
contiene il codice sorgente e la configurazione per eseguire l'applicazione correttamente. Questa directory include quanto segue: + La directoryjava.com.addons.spring
contiene i fileApplication.java
eController.java
. Il fileApplication.java
è responsabile dell'esecuzione del server delle applicazioni, mentre il fileController.java
gestisce la logica dell'endpoint. + La directoryresources
contiene la directorytemplates
con i file HTML e JavaScript. Contiene anche il fileapplication.properties
che specifica la porta su cui eseguire il server, il percorso del file archivio chiavi e il percorso della directorytemplates
. Questo esempio include il file dell'archivio chiavi nella directoryresources
. Puoi memorizzarlo dove preferisci, ma assicurati di aggiornare il fileapplication.properties
con il percorso corrispondente.pom.xml
contiene le informazioni necessarie per creare il progetto e definire le dipendenze richieste..gitignore
contiene nomi file che non devono essere caricati su Git. Assicurati di aggiungere il percorso del keystore in questo.gitignore
. Nell'esempio fornito, si tratta disecrets/*.p12
(lo scopo del keystore è descritto nella sezione seguente). Per le procedure dettagliate 2 e successive, devi includere anche il percorso del fileclient_secret.json
per assicurarti di non includere i tuoi segreti in un repository remoto. Per le procedure dettagliate 3 e successive, devi aggiungere il percorso al file di database H2 e al factory di datastore dei file. Per ulteriori informazioni sulla configurazione di questi data store, consulta la terza procedura dettagliata sulla gestione delle visite ripetute.mvnw
emvnw.cmd
sono i file eseguibili del wrapper Maven per Unix e Windows, rispettivamente. Ad esempio, l'esecuzione di./mvnw --version
su Unix restituisce la versione di Apache Maven, tra le altre informazioni.- La directory
.mvn
contiene la configurazione per il wrapper Maven.
Esegui il server di esempio
Per testare il server, devi avviarlo. Segui queste istruzioni per eseguire il server di esempio nella lingua che preferisci:
Python
Credenziali OAuth
Crea e scarica le credenziali OAuth come descritto in precedenza. Posiziona il file JSON nella directory principale insieme al file di avvio del server dell'applicazione.
Configurare il server
Hai diverse opzioni per eseguire il server web. Alla fine del file Python, aggiungi uno dei seguenti codici:
localhost
non protetto. Tieni presente che questo è adatto solo per i test diretti in una finestra del browser; i domini non protetti non possono essere caricati nell'iframe del componente aggiuntivo Classroom.if __name__ == "__main__": # Disable OAuthlib's HTTPs verification. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" # Run the web app at http://localhost:5000. app.run(debug=True)
Proteggi
localhost
. Devi specificare una tupla di file di chiavi SSL per l'argomentossl_context
.if __name__ == "__main__": # Run the web app at https://localhost:5000. app.run(host="localhost", ssl_context=("localhost.pem", "localhost-key.pem"), debug=True)
server Gunicorn. Questa opzione è adatta a un server pronto per la produzione o a un deployment cloud. Ti consigliamo di impostare una variabile di ambiente
PORT
da utilizzare con questa opzione di avvio.if __name__ == "__main__": # Run the web app at https://<your domain>:<server_port>. # Defaults to https://<your domain>:8080. server_port = os.environ.get("PORT", "8080") app.run(debug=True, port=server_port, host="0.0.0.0")
Avvia il server
Esegui l'applicazione Python per avviare il server come configurato nel passaggio precedente.
python main.py
Fai clic sull'URL visualizzato per visualizzare la tua app web in un browser e verificare che venga eseguita correttamente.
Node.js
Configurare il server
Per eseguire il server su HTTPS, devi creare un certificato autofirmato
che viene utilizzato per eseguire l'applicazione su HTTPS. Queste credenziali devono essere
salvate come sslcert/cert.pem
e sslcert/key.pem
nella cartella
radice del repository. Potresti dover aggiungere queste chiavi al portachiavi del sistema operativo
affinché il browser le accetti.
Assicurati che *.pem
sia nel file .gitignore
perché non vuoi
eseguire il commit del file in Git.
Avvia il server
Puoi eseguire l'applicazione con il seguente comando sostituendo step01
con il passaggio corretto che vuoi eseguire come server (ad esempio, step01
per 01-basic-app e step02
per 02-sign-in).
npm run step01
o
npm run step02
In questo modo viene avviato il server web all'indirizzo https://localhost:5000
.
Puoi terminare il server con Control + C
nel terminale.
Java
Configurare il server
Per eseguire il server su HTTPS, devi creare un certificato autofirmato che viene utilizzato per eseguire l'applicazione su HTTPS.
Valuta la possibilità di utilizzare mkcert per lo sviluppo locale. Una volta installato mkcert
,
i seguenti comandi generano un certificato archiviato localmente da eseguire tramite
HTTPS.
mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
Questo esempio include il file del keystore nella directory delle risorse. Puoi
memorizzarlo dove preferisci, ma assicurati di aggiornare il
file application.properties
con il percorso corrispondente. Il nome di dominio è
il dominio su cui esegui il progetto (ad esempio, localhost
).
Assicurati che *.p12
sia nel file .gitignore
perché non vuoi
eseguire il commit del file in Git.
Avvia il server
Avvia il server eseguendo il metodo main
nel file Application.java
. In IntelliJ, ad esempio, puoi fare clic con il tasto destro del mouse su
Application.java
> Run 'Application'
nella
directory src/main/java/com/addons/spring
oppure aprire il file Application.java
per fare clic sulla freccia verde a sinistra della firma del metodo main(String[] args)
. In alternativa, puoi eseguire il progetto in una finestra
del terminale:
./mvnw spring-boot:run
o su Windows:
mvnw.cmd spring-boot:run
In questo modo il server viene avviato all'indirizzo https://localhost:5000
o alla porta che hai specificato in application.properties
.