Guida rapida di Go

Crea un'applicazione da riga di comando Go che effettua richieste all'API Google Drive.

Le guide rapide spiegano come configurare ed eseguire un'app che chiama un'API Google Workspace. Questa guida rapida utilizza un approccio di autenticazione semplificato adatto a un ambiente di test. Per un ambiente di produzione, ti consigliamo di scoprire di più sull'autenticazione e sull'autorizzazione prima di scegliere le credenziali di accesso appropriate per la tua app.

Questa guida rapida utilizza le librerie client delle API consigliate di Google Workspace per gestire alcuni dettagli del flusso di autenticazione e autorizzazione.

Obiettivi

  • Configurare l'ambiente.
  • Configurare l'esempio.
  • Eseguire l'esempio.

Prerequisiti

  • Un Account Google con Google Drive abilitato.

Configurare l'ambiente

Per completare questa guida rapida, configura l'ambiente.

Abilitare l'API

Prima di utilizzare le API di Google, devi attivarle in un progetto Google Cloud. Puoi attivare una o più API in un singolo progetto Google Cloud.
  • Nella console Google Cloud, abilita l'API Google Drive.

    Abilita l'API

Se utilizzi un nuovo progetto Google Cloud per completare questa guida rapida, configura la schermata per il consenso OAuth. Se hai già completato questo passaggio per il tuo progetto Cloud, vai alla sezione successiva.

  1. Nella console API di Google, vai a Menu > Piattaforma Google Auth > Branding.

    Vai a Branding

  2. Se hai già configurato la piattaforma Google Auth, puoi configurare le seguenti impostazioni della schermata per il consenso OAuth in Branding, Pubblico e Accesso ai dati. Se visualizzi il messaggio Google Auth Platform non ancora configurata, fai clic su Inizia:
    1. In Informazioni sull'app, nel campo Nome app, inserisci un nome per l'app.
    2. In Email di assistenza utente, scegli un indirizzo email di assistenza a cui gli utenti possono contattarti in caso di domande sul consenso.
    3. Fai clic su Avanti.
    4. In Pubblico, seleziona Interno.
    5. Fai clic su Avanti.
    6. In Dati di contatto, inserisci un indirizzo email a cui ricevere notifiche in caso di modifiche al progetto.
    7. Fai clic su Avanti.
    8. In Fine , esamina le Norme relative ai dati utente dei servizi API di Google e, se le accetti, seleziona Accetto le Norme relative ai dati utente: servizi API di Google.
    9. Fai clic su Continua.
    10. Fai clic su Crea.
  3. Per il momento, puoi saltare l'aggiunta di ambiti. In futuro, quando crei un'app da utilizzare al di fuori della tua organizzazione Google Workspace, devi impostare il Tipo di utente su Esterno. Aggiungi poi gli ambiti di autorizzazione richiesti dall'app. Per saperne di più, consulta la guida completa Configurare il consenso OAuth guide.

Autorizzare le credenziali per un'applicazione desktop

Per autenticare gli utenti finali e accedere ai dati utente nella tua app, devi creare uno o più ID client OAuth 2.0. L'ID client viene utilizzato per identificare una singola app nei server OAuth di Google. Se l'app viene eseguita su più piattaforme, devi creare un ID client separato per ogni piattaforma.
  1. Nella console API di Google, vai a Menu > Piattaforma Google Auth > Client.

    Vai a Client

  2. Fai clic su Crea client.
  3. Fai clic su Tipo di applicazione > App desktop.
  4. Nel campo Nome, digita un nome per la credenziale. Questo nome viene visualizzato solo nella console API di Google.
  5. Fai clic su Crea.

    La credenziale appena creata viene visualizzata in "ID client OAuth 2.0".

  6. Salva il file JSON scaricato come credentials.json e sposta il file nella directory di lavoro.

Preparare lo spazio di lavoro

  1. Crea una directory di lavoro:

    mkdir quickstart
    
  2. Passa alla directory di lavoro:

    cd quickstart
    
  3. Inizializza il nuovo modulo:

    go mod init quickstart
    
  4. Scarica la libreria client Go dell'API Google Drive e il pacchetto OAuth2.0:

    go get google.golang.org/api/drive/v3
    go get golang.org/x/oauth2/google
    

Configurare l'esempio

  1. Nella directory di lavoro, crea un file denominato quickstart.go.

  2. Nel file, incolla il seguente codice:

    drive/quickstart/quickstart.go
    package main
    
    import (
    	"context"
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    
    	"golang.org/x/oauth2"
    	"golang.org/x/oauth2/google"
    	"google.golang.org/api/drive/v3"
    	"google.golang.org/api/option"
    )
    
    // Retrieve a token, saves the token, then returns the generated client.
    func getClient(config *oauth2.Config) *http.Client {
    	// The file token.json stores the user's access and refresh tokens, and is
    	// created automatically when the authorization flow completes for the first
    	// time.
    	tokFile := "token.json"
    	tok, err := tokenFromFile(tokFile)
    	if err != nil {
    		tok = getTokenFromWeb(config)
    		saveToken(tokFile, tok)
    	}
    	return config.Client(context.Background(), tok)
    }
    
    // Request a token from the web, then returns the retrieved token.
    func getTokenFromWeb(config *oauth2.Config) *oauth2.Token {
    	authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline)
    	fmt.Printf("Go to the following link in your browser then type the "+
    		"authorization code: \n%v\n", authURL)
    
    	var authCode string
    	if _, err := fmt.Scan(&authCode); err != nil {
    		log.Fatalf("Unable to read authorization code %v", err)
    	}
    
    	tok, err := config.Exchange(context.TODO(), authCode)
    	if err != nil {
    		log.Fatalf("Unable to retrieve token from web %v", err)
    	}
    	return tok
    }
    
    // Retrieves a token from a local file.
    func tokenFromFile(file string) (*oauth2.Token, error) {
    	f, err := os.Open(file)
    	if err != nil {
    		return nil, err
    	}
    	defer f.Close()
    	tok := &oauth2.Token{}
    	err = json.NewDecoder(f).Decode(tok)
    	return tok, err
    }
    
    // Saves a token to a file path.
    func saveToken(path string, token *oauth2.Token) {
    	fmt.Printf("Saving credential file to: %s\n", path)
    	f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
    	if err != nil {
    		log.Fatalf("Unable to cache oauth token: %v", err)
    	}
    	defer f.Close()
    	json.NewEncoder(f).Encode(token)
    }
    
    func main() {
    	ctx := context.Background()
    	b, err := os.ReadFile("credentials.json")
    	if err != nil {
    		log.Fatalf("Unable to read client secret file: %v", err)
    	}
    
    	// If modifying these scopes, delete your previously saved token.json.
    	config, err := google.ConfigFromJSON(b, drive.DriveMetadataReadonlyScope)
    	if err != nil {
    		log.Fatalf("Unable to parse client secret file to config: %v", err)
    	}
    	client := getClient(config)
    
    	srv, err := drive.NewService(ctx, option.WithHTTPClient(client))
    	if err != nil {
    		log.Fatalf("Unable to retrieve Drive client: %v", err)
    	}
    
    	r, err := srv.Files.List().PageSize(10).
    		Fields("nextPageToken, files(id, name)").Do()
    	if err != nil {
    		log.Fatalf("Unable to retrieve files: %v", err)
    	}
    	fmt.Println("Files:")
    	if len(r.Files) == 0 {
    		fmt.Println("No files found.")
    	} else {
    		for _, i := range r.Files {
    			fmt.Printf("%s (%s)\n", i.Name, i.Id)
    		}
    	}
    }

Eseguire l'esempio

  1. Nella directory di lavoro, crea ed esegui l'esempio:

    go run quickstart.go
    
  1. La prima volta che esegui l'esempio, ti viene chiesto di autorizzare l'accesso:
    1. Se non l'hai ancora fatto, accedi al tuo Account Google quando ti viene richiesto. Se hai eseguito l'accesso a più account, seleziona un account da utilizzare per l'autorizzazione.
    2. Fai clic su Accetto.

    L'applicazione Go viene eseguita e chiama l'API Google Drive.

    Le informazioni di autorizzazione vengono archiviate nel file system, quindi la volta successiva che esegui il codice di esempio non ti verrà richiesta l'autorizzazione.

Passaggi successivi