מדריך למתחילים ב-Go

במדריכים למתחילים מוסבר איך מגדירים ומפעילים אפליקציה שמפעילה קריאה ל-Google Workspace API.

במדריכים למתחילים של Google Workspace נעשה שימוש בספריות הלקוח של ה-API כדי לטפל בחלק מהפרטים של תהליך האימות וההרשאה. מומלץ להשתמש בספריות הלקוח באפליקציות שלכם. במדריך למתחילים הזה נעשה שימוש בגישה פשוטה לאימות שמתאימה לסביבת בדיקה. בסביבת ייצור, מומלץ ללמוד על אימות והרשאה לפני בחירת פרטי הכניסה שמתאימים לאפליקציה.

יצירת אפליקציית שורת פקודה ב-Go ששולחת בקשות ל-Google Classroom API.

מטרות

  • מגדירים את הסביבה.
  • מגדירים את המדגם.
  • מריצים את הדוגמה.

דרישות מוקדמות

  • חשבון Google for Education שבו Google Classroom מופעל.

הגדרת הסביבה

כדי להשלים את המדריך למתחילים הזה, צריך להגדיר את הסביבה.

הפעלת ה-API

לפני שמשתמשים ב-Google APIs, צריך להפעיל אותם בפרויקט ב-Google Cloud. אפשר להפעיל ממשק API אחד או יותר בפרויקט אחד ב-Google Cloud.

אם אתם משתמשים בפרויקט חדש ב-Google Cloud כדי להשלים את המדריך למתחילים הזה, צריך להגדיר את מסך ההסכמה של OAuth. אם כבר השלמתם את השלב הזה בפרויקט ב-Cloud, תוכלו לדלג לקטע הבא.

  1. במסוף Google Cloud, נכנסים לתפריט > > Branding.

    כניסה לדף Branding

  2. אם כבר הגדרתם את , תוכלו להגדיר את ההגדרות הבאות של מסך ההסכמה ל-OAuth בקטע מיתוג, קהל וגישה לנתונים. אם מופיעה ההודעה not configured yet, לוחצים על Get Started:
    1. בקטע פרטי האפליקציה, בשדה שם האפליקציה, מזינים שם לאפליקציה.
    2. בקטע כתובת אימייל לתמיכה במשתמשים, בוחרים כתובת אימייל לתמיכה שבה המשתמשים יוכלו לפנות אליכם אם יש להם שאלות לגבי ההסכמה שלהם.
    3. לוחצים על הבא.
    4. בקטע קהל, בוחרים באפשרות פנימי.
    5. לוחצים על הבא.
    6. בקטע פרטים ליצירת קשר, מזינים כתובת אימייל שאליה יישלחו התראות על שינויים בפרויקט.
    7. לוחצים על הבא.
    8. בקטע סיום, קוראים את המדיניות בנושא נתוני משתמשים בשירותי Google API. אם מסכימים, בוחרים באפשרות אני מסכים/ה למדיניות בנושא נתוני משתמשים בשירותי Google API.
    9. לוחצים על המשך.
    10. לוחצים על יצירה.
  3. בשלב הזה, אפשר לדלג על הוספת היקפי הרשאות. בעתיד, כשיוצרים אפליקציה לשימוש מחוץ לארגון ב-Google Workspace, צריך לשנות את סוג המשתמש לחיצוני. לאחר מכן מוסיפים את היקפי ההרשאה הנדרשים לאפליקציה. למידע נוסף, קראו את המדריך המלא בנושא הגדרת הסכמה ל-OAuth.

מתן הרשאה לפרטי כניסה לאפליקציה למחשב

כדי לאמת משתמשי קצה ולגשת לנתוני המשתמשים באפליקציה, צריך ליצור מזהה לקוח אחד או יותר ב-OAuth 2.0. מזהה לקוח משמש לזיהוי אפליקציה אחת בשרתי OAuth של Google. אם האפליקציה פועלת בכמה פלטפורמות, צריך ליצור מזהה לקוח נפרד לכל פלטפורמה.
  1. במסוף Google Cloud, נכנסים לתפריט > > Clients.

    כניסה לדף Clients

  2. לוחצים על Create Client.
  3. לוחצים על Application type (סוג האפליקציה) > Desktop app (אפליקציה למחשב).
  4. בשדה Name, מקלידים שם לפרטי הכניסה. השם הזה מוצג רק במסוף Google Cloud.
  5. לוחצים על יצירה.

    פרטי הכניסה שנוצרו מופיעים בקטע 'מזהי לקוח של OAuth 2.0'.

  6. שומרים את קובץ ה-JSON שהורדתם בתור credentials.json ומעבירים את הקובץ לספריית העבודה.

הכנת סביבת העבודה

  1. יוצרים ספריית עבודה:

    mkdir quickstart
    
  2. עוברים לספריית העבודה:

    cd quickstart
    
  3. מפעילים את המודול החדש:

    go mod init quickstart
    
  4. מורידים את ספריית הלקוח של Google Classroom API ב-Go ואת חבילת OAuth2.0:

    go get google.golang.org/api/classroom/v1
    go get golang.org/x/oauth2/google
    

הגדרת הדוגמה

  1. בספריית העבודה, יוצרים קובץ בשם quickstart.go.

  2. מדביקים את הקוד הבא בקובץ:

    classroom/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/classroom/v1"
    	"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 credentials file: %v", err)
    	}
    
    	// If modifying these scopes, delete your previously saved token.json.
    	config, err := google.ConfigFromJSON(b, classroom.ClassroomCoursesReadonlyScope)
    	if err != nil {
    		log.Fatalf("Unable to parse client secret file to config: %v", err)
    	}
    	client := getClient(config)
    
    	srv, err := classroom.NewService(ctx, option.WithHTTPClient(client))
    	if err != nil {
    		log.Fatalf("Unable to create classroom Client %v", err)
    	}
    
    	r, err := srv.Courses.List().PageSize(10).Do()
    	if err != nil {
    		log.Fatalf("Unable to retrieve courses. %v", err)
    	}
    	if len(r.Courses) > 0 {
    		fmt.Print("Courses:\n")
    		for _, c := range r.Courses {
    			fmt.Printf("%s (%s)\n", c.Name, c.Id)
    		}
    	} else {
    		fmt.Print("No courses found.")
    	}
    }

הרצת הדוגמה

  1. בספריית העבודה, יוצרים ומריצים את הדוגמה:

    go run quickstart.go
    
  1. בפעם הראשונה שתפעילו את הדוגמה, תתבקשו לאשר את הגישה:
    1. אם עדיין לא נכנסתם לחשבון Google, נכנסים אליו כשמופיעה בקשה לעשות זאת. אם נכנסתם לכמה חשבונות, בוחרים חשבון אחד לצורך ההרשאה.
    2. לוחצים על אישור.

    אפליקציית Go פועלת ומפעילה את Google Classroom API.

    פרטי ההרשאה מאוחסנים במערכת הקבצים, כך שבפעם הבאה שתפעילו את הקוד לדוגמה לא תתבקשו להעניק הרשאה.

השלבים הבאים