البدء بسرعة

توضّح الخطوات السريعة كيفية إعداد وتشغيل تطبيق يستدعي واجهة برمجة تطبيقات من Google Workspace.

تستخدم عمليات البدء السريع في Google Workspace مكتبات البرامج لواجهة برمجة التطبيقات للتعامل مع بعض تفاصيل عملية المصادقة والتفويض. وننصحك باستخدام مكتبات العميل لتطبيقاتك الخاصة. يستخدم نظام البدء السريع منهجًا مبسّطًا للمصادقة ومناسبًا لبيئة الاختبار. بالنسبة إلى بيئة الإنتاج، ننصحك للتعرّف على المصادقة والتفويض قبل اختيار بيانات اعتماد الوصول المناسبة لتطبيقك.

يمكنك إنشاء تطبيق سطر أوامر Go Go لإرسال طلبات إلى Google Classroom API.

الأهداف

  • إعداد البيئة المحيطة بك.
  • إعداد عيّنة من الكتاب
  • شغِّل النموذج.

المتطلبات الأساسية

  • حساب على Google for Education تم فيه تفعيل Google Classroom.

إعداد البيئة

لإكمال عملية البدء السريع هذه، يمكنك إعداد بيئتك.

تفعيل واجهة برمجة التطبيقات

قبل استخدام Google APIs، عليك تفعيلها في مشروع على Google Cloud. يمكنك تفعيل واجهة برمجة تطبيقات واحدة أو أكثر في مشروع واحد على Google Cloud.

إذا كنت تستخدم مشروعًا جديدًا في Google Cloud لإكمال عملية البدء السريع هذه، يمكنك ضبط شاشة موافقة OAuth وإضافة نفسك كمستخدم تجريبي. إذا سبق لك إكمال هذه الخطوة في مشروعك على السحابة الإلكترونية، انتقِل إلى القسم التالي.

  1. في وحدة تحكّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > شاشة موافقة OAuth.

    الانتقال إلى شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth

  2. اختَر نوع المستخدم لتطبيقك، ثم انقر على إنشاء.
  3. املأ نموذج تسجيل التطبيق، ثم انقر على حفظ ومتابعة.
  4. في الوقت الحالي، يمكنك تخطي إضافة النطاقات والنقر على حفظ ومتابعة. في المستقبل، عند إنشاء تطبيق لاستخدامه خارج مؤسستك على Google Workspace، عليك إضافة نطاقات التفويض التي يحتاج إليها تطبيقك وإثبات ملكيتها.

  5. في حال اختيار خارجي لنوع المستخدم، أضِف مستخدمين تجريبيين:
    1. ضمن اختبار المستخدمين، انقر على إضافة مستخدمين.
    2. أدخِل عنوان بريدك الإلكتروني وأي مستخدمين آخرين مُعتمَدين للاختبار، ثم انقر على حفظ ومتابعة.
  6. مراجعة ملخص تسجيل التطبيقات لإجراء تغييرات، انقر على تعديل. إذا كان تسجيل التطبيق يبدو "حسنًا"، انقر على الرجوع إلى لوحة البيانات.

تفويض بيانات الاعتماد لتطبيق متوافق مع أجهزة سطح المكتب

للمصادقة كمستخدم كمستخدم والوصول إلى بيانات المستخدم في تطبيقك، عليك إنشاء معرِّف عميل OAuth 2.0 أو أكثر. يتم استخدام معرِّف العميل لتحديد تطبيق واحد لخوادم OAuth من Google. إذا كان تطبيقك يعمل على أنظمة أساسية متعددة، يجب إنشاء معرِّف عميل منفصل لكل نظام أساسي.
  1. في وحدة تحكّم Google Cloud، انتقِل إلى رمز القائمة > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى "بيانات الاعتماد"

  2. انقر على إنشاء بيانات اعتماد > معرِّف عميل OAuth.
  3. انقر على نوع التطبيق > تطبيق متوافق مع الكمبيوتر المكتبي.
  4. في حقل الاسم، اكتب اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في وحدة تحكم Google Cloud.
  5. انقر على إنشاء. ستظهر شاشة OAuth التي أنشأها العميل، والتي تعرض معرِّف العميل والرمز الجديد للعميل.
  6. انقر على حسنًا. تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن معرِّفات عميل OAuth 2.0.
  7. احفظ ملف JSON الذي تم تنزيله بتنسيق credentials.json، وانقله إلى دليل العمل.

إعداد مساحة العمل

  1. إنشاء دليل صالح للعمل:

    mkdir quickstart
    
  2. التغيير إلى دليل العمل:

    cd quickstart
    
  3. إعداد الوحدة الجديدة:

    go mod init quickstart
    
  4. الحصول على مكتبة برنامج Google Classroom API Go وحزمة OAuth2:

    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
    
  2. في المتصفّح، انتقِل إلى http://localhost:8000.

  3. عند تنفيذ النموذج لأول مرة، يطلب منك إذن الوصول:

    1. إذا لم تكن قد سجَّلت الدخول إلى حسابك على Google، سيُطلب منك تسجيل الدخول. إذا كنت مسجّلاً الدخول إلى حسابات متعددة، اختَر حسابًا واحدًا لاستخدامه للتفويض.
    2. انقر على قبول.
    3. انسخ الرمز من المتصفّح، والصقه في موجه سطر الأوامر، واضغط على Enter.

    ويتم تخزين معلومات التفويض في نظام الملفات، لذلك في المرة التالية التي تشغّل فيها الرمز النموذجي، لن يُطلب منك منح تفويض.

لقد أنشأت بنجاح تطبيق Go الأول الذي يرسل طلبات إلى Google Classroom API.

الخطوات التالية