คำแนะนำแบบทีละขั้น

บทแนะนำชุดนี้จะแสดงภาพรวมของส่วนต่างๆ ของส่วนเสริม Classroom ที่ใช้งานได้ แต่ละขั้นตอนของบทแนะนำจะอธิบายแนวคิดที่เฉพาะเจาะจงและนำไปใช้ในเว็บแอปพลิเคชันเดียว โดยมีเป้าหมายเพื่อช่วยคุณในการตั้งค่า กำหนดค่า และเปิดใช้งานส่วนเสริมที่ใช้งานได้

ส่วนเสริมต้องโต้ตอบกับโปรเจ็กต์ Google Cloud หากคุณไม่คุ้นเคยกับ Google Cloud เราขอแนะนำให้อ่านคำแนะนำในการเริ่มต้นใช้งาน คุณจัดการข้อมูลเข้าสู่ระบบ การเข้าถึง API และ SDK ของ Google Workspace Marketplace ในคอนโซล Google Cloud ดูข้อมูลเพิ่มเติมเกี่ยวกับ SDK ของ Marketplace ได้ที่หน้าคู่มือข้อมูลผลิตภัณฑ์ใน Google Workspace Marketplace

คู่มือนี้ครอบคลุมหัวข้อต่อไปนี้

  • ใช้ Google Cloud เพื่อสร้างหน้าเว็บที่จะแสดงใน iframe ใน Classroom
  • เพิ่มการลงชื่อเพียงครั้งเดียว (SSO) ของ Google และอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้
  • เรียก API เพื่อแนบส่วนเสริมไปกับงาน
  • ปฏิบัติตามข้อกำหนดหลักในการส่งส่วนเสริมและฟีเจอร์ที่จำเป็น

คู่มือนี้จะถือว่าคุณคุ้นเคยกับแนวคิดพื้นฐานเกี่ยวกับการเขียนโปรแกรมและการพัฒนาเว็บ เราขอแนะนําอย่างยิ่งให้อ่านคู่มือการกําหนดค่าโปรเจ็กต์ก่อนเริ่มดูบทแนะนำ หน้านี้มีรายละเอียดการกําหนดค่าที่สําคัญซึ่งไม่ได้กล่าวถึงในบทแนะนำอย่างครบถ้วน

ตัวอย่างการติดตั้งใช้งาน

ดูตัวอย่างข้อมูลอ้างอิงฉบับเต็มได้ใน Python การใช้งานบางส่วนมีให้บริการใน Java และ Node.js ด้วย การใช้งานเหล่านี้เป็นแหล่งที่มาของโค้ดตัวอย่างที่พบในหน้าต่อๆ ไป

ตำแหน่งที่จะดาวน์โหลด

ตัวอย่าง Python และ Java มีอยู่ในที่เก็บ GitHub

คุณสามารถดาวน์โหลดตัวอย่าง Node.js เป็นไฟล์ ZIP ได้โดยทำดังนี้

ข้อกำหนดเบื้องต้น

โปรดอ่านส่วนต่อไปนี้เพื่อเตรียมโปรเจ็กต์ส่วนเสริมใหม่

ใบรับรอง HTTPS

แม้ว่าคุณจะโฮสต์แอปในสภาพแวดล้อมการพัฒนาใดก็ได้ แต่ส่วนเสริมของ Classroom จะใช้งานได้ผ่าน https:// เท่านั้น คุณจึงต้องมีเซิร์ฟเวอร์ที่มีการเข้ารหัส SSL เพื่อติดตั้งใช้งานแอปหรือทดสอบแอปภายใน iframe ของส่วนเสริม

คุณสามารถใช้ localhost กับใบรับรอง SSL ได้ ให้ลองใช้ mkcert หากต้องการสร้างใบรับรองสำหรับการพัฒนาในเครื่อง

โปรเจ็กต์ Google Cloud

คุณต้องกำหนดค่าโปรเจ็กต์ Google Cloud เพื่อใช้กับตัวอย่างเหล่านี้ ดูภาพรวมขั้นตอนที่จําเป็นในการเริ่มต้นใช้งานได้จากคู่มือ การสร้างโปรเจ็กต์ Google Cloud ส่วนตั้งค่าโปรเจ็กต์ Google Cloud ในบทแนะนำแรกจะอธิบายขั้นตอนการกำหนดค่าที่เฉพาะเจาะจงด้วย

เมื่อเสร็จแล้ว ให้ดาวน์โหลดรหัสไคลเอ็นต์ OAuth 2.0 เป็นไฟล์ JSON โดยคุณต้องเพิ่มไฟล์ข้อมูลเข้าสู่ระบบนี้ลงในไดเรกทอรีตัวอย่างที่แตกไฟล์แล้ว ดูสถานที่ที่เจาะจงได้ที่ทำความเข้าใจไฟล์

ข้อมูลเข้าสู่ระบบ OAuth

ทําตามขั้นตอนต่อไปนี้เพื่อสร้างข้อมูลเข้าสู่ระบบ OAuth ใหม่

  • ไปที่หน้าข้อมูลเข้าสู่ระบบ Google Cloud ตรวจสอบว่าคุณได้เลือกโปรเจ็กต์ที่ถูกต้องที่ด้านบนของหน้าจอแล้ว
  • คลิกสร้างข้อมูลเข้าสู่ระบบ แล้วเลือกรหัสไคลเอ็นต์ OAuth จากเมนูแบบเลื่อนลง
  • ในหน้าถัดไป ให้ทำดังนี้
    • ตั้งค่าประเภทแอปพลิเคชันเป็นเว็บแอปพลิเคชัน
    • ในส่วน URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต ให้คลิกเพิ่ม URI เพิ่ม full path สำหรับเส้นทางการเรียกกลับของแอปพลิเคชัน เช่น https://my.domain.com/auth-callback หรือ https://localhost:5000/callback คุณสร้างและจัดการเส้นทางนี้ในภายหลังในบทแนะนำนี้ คุณแก้ไขหรือเพิ่มเส้นทางดังกล่าวได้ทุกเมื่อ
    • คลิกสร้าง
  • จากนั้นคุณจะได้รับกล่องโต้ตอบที่มีข้อมูลเข้าสู่ระบบที่สร้างใหม่ เลือกตัวเลือกดาวน์โหลด JSON คัดลอกไฟล์ JSON ที่ดาวน์โหลดลงในไดเรกทอรีเซิร์ฟเวอร์

ข้อกําหนดเบื้องต้นเฉพาะภาษา

ดูไฟล์ README ในที่เก็บข้อมูลแต่ละแห่งเพื่อดูรายการข้อกําหนดเบื้องต้นล่าสุด

Python

ตัวอย่าง Python ใช้เฟรมเวิร์ก Flask คุณสามารถดาวน์โหลดซอร์สโค้ดฉบับสมบูรณ์ได้จากลิงก์ที่ให้ไว้

หากจำเป็น ให้ติดตั้ง Python 3.7 ขึ้นไป และตรวจสอบว่า pip พร้อมใช้งาน

python3 -m ensurepip --upgrade

นอกจากนี้ เราขอแนะนําให้คุณตั้งค่าและเปิดใช้งานสภาพแวดล้อมเสมือนของ Python ใหม่

python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate

จะมี requirements.txt ในไดเรกทอรีย่อยของคำแนะนำแบบทีละขั้นแต่ละรายการในตัวอย่างที่ดาวน์โหลด คุณสามารถติดตั้งไลบรารีที่จําเป็นได้อย่างรวดเร็วโดยใช้ pip ใช้คําสั่งต่อไปนี้เพื่อติดตั้งไลบรารีที่จําเป็นสําหรับการแนะนำครั้งแรก

cd flask/01-basic-app
pip install -r requirements.txt

Node.js

ตัวอย่าง Node.js ใช้เฟรมเวิร์ก Express คุณสามารถดาวน์โหลดซอร์สโค้ดที่สมบูรณ์ได้จากลิงก์ที่ระบุ

ตัวอย่างนี้ต้องใช้ Node.js v16.13 ขึ้นไป

ติดตั้งโมดูลโหนดที่จําเป็นโดยใช้ npm

npm install

Java

ตัวอย่าง Java ใช้เฟรมเวิร์ก Spring Boot คุณสามารถดาวน์โหลดซอร์สโค้ดที่สมบูรณ์ได้จากลิงก์ที่ระบุ

ติดตั้ง Java 11 ขึ้นไป หากยังไม่ได้ติดตั้งในเครื่อง

แอปพลิเคชัน Spring Boot สามารถใช้ Gradle หรือ Maven เพื่อจัดการบิลด์และจัดการข้อกําหนด ตัวอย่างนี้ประกอบด้วย Maven Wrapper ที่ช่วยให้คุณสร้างโปรเจ็กต์ได้สําเร็จโดยไม่ต้องติดตั้ง Maven ด้วยตนเอง

ในไดเรกทอรีที่คุณดาวน์โหลดหรือโคลนโปรเจ็กต์ ให้เรียกใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่าคุณมีคุณสมบัติตามข้อกําหนดเบื้องต้นในการใช้งานโปรเจ็กต์

java --version
./mvnw --version

หรือใน Windows ให้ทำดังนี้

java -version
mvnw.cmd --version

ทำความเข้าใจไฟล์

ส่วนต่อไปนี้จะอธิบายเลย์เอาต์ของไดเรกทอรีตัวอย่าง

ชื่อไดเรกทอรี

ที่เก็บแต่ละแห่งจะมีไดเรกทอรีหลายรายการที่ชื่อขึ้นต้นด้วยตัวเลข เช่น /01-basic-app/ ตัวเลขเหล่านี้สอดคล้องกับขั้นตอนการแนะนำที่เฉพาะเจาะจง ไดเรกทอรีแต่ละรายการมีเว็บแอปที่ใช้งานได้อย่างเต็มรูปแบบซึ่งใช้ฟีเจอร์ที่อธิบายไว้ในบทแนะนำแต่ละบท ตัวอย่างเช่น ไดเรกทอรี /01-basic-app/ มีการใช้งานขั้นสุดท้ายสําหรับคำแนะนำแบบทีละขั้นตอนในการสร้างส่วนเสริม

เนื้อหาไดเรกทอรี

เนื้อหาของไดเรกทอรีจะแตกต่างกันไปตามภาษาที่ใช้ติดตั้งใช้งาน ดังนี้

Python

Node.js

แต่ละขั้นตอนของคำแนะนำจะอยู่ใน<step> โฟลเดอร์ย่อยของตัวเอง แต่ละขั้นตอนประกอบด้วย

  • ไฟล์แบบคงที่ เช่น JavaScript, CSS และรูปภาพ จะอยู่ในโฟลเดอร์ ./<step>/public
  • คุณจะพบเราเตอร์ Express ในโฟลเดอร์ ./<step>/routes
  • เทมเพลต HTML จะอยู่ในโฟลเดอร์ ./<step>/views
  • แอปพลิเคชันเซิร์ฟเวอร์คือ ./<step>/app.js

Java

ไดเรกทอรีโปรเจ็กต์ประกอบด้วยสิ่งต่อไปนี้

  • ไดเรกทอรี src.main มีซอร์สโค้ดและการกำหนดค่าเพื่อเรียกใช้แอปพลิเคชัน ไดเรกทอรีนี้ประกอบด้วยสิ่งต่อไปนี้ + ไดเรกทอรี java.com.addons.spring มีไฟล์ Application.java และ Controller.java ไฟล์ Application.java มีหน้าที่รับผิดชอบในการใช้งานเซิร์ฟเวอร์แอปพลิเคชัน ขณะที่ไฟล์ Controller.java จะจัดการตรรกะเกี่ยวกับปลายทาง + ไดเรกทอรี resources มีไดเรกทอรี templates ที่มีไฟล์ HTML และ JavaScript รวมถึงมีไฟล์ application.properties ที่ระบุพอร์ตที่จะเรียกใช้เซิร์ฟเวอร์ เส้นทางไปยังไฟล์คีย์สโตร์ และเส้นทางไปยังไดเรกทอรี templates ตัวอย่างนี้รวมไฟล์คีย์สโตร์ในไดเรกทอรี resources คุณสามารถจัดเก็บไฟล์ไว้ที่ใดก็ได้ แต่อย่าลืมอัปเดตไฟล์ application.properties ด้วยเส้นทางดังกล่าว
    • pom.xml มีข้อมูลที่จำเป็นในการสร้างโปรเจ็กต์และกำหนดข้อกำหนดที่จำเป็น
    • .gitignore มีชื่อไฟล์ที่ไม่ควรอัปโหลดไปยัง Git ตรวจสอบว่าคุณได้เพิ่มเส้นทางไปยังคีย์สโตร์ใน .gitignore นี้แล้ว ในตัวอย่างนี้คือ secrets/*.p12 (เราจะพูดถึงวัตถุประสงค์ของคีย์สโตร์ในส่วนด้านล่าง) สำหรับบทแนะนำที่ 2 ขึ้นไป คุณควรระบุเส้นทางไปยังไฟล์ client_secret.json ด้วยเพื่อให้แน่ใจว่าไม่ได้รวมข้อมูลลับไว้ในที่เก็บข้อมูลระยะไกล สำหรับบทแนะนำที่ 3 ขึ้นไป คุณควรเพิ่มเส้นทางไปยังไฟล์ฐานข้อมูล H2 และ File DataStore Factory ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าที่เก็บข้อมูลเหล่านี้ได้ในบทแนะนำที่ 3 เกี่ยวกับการจัดการการเข้าชมซ้ำ
    • mvnw และ mvnw.cmd คือไฟล์ปฏิบัติการของ Maven Wrapper สำหรับ Unix และ Windows ตามลำดับ เช่น การรัน ./mvnw --version ใน Unix จะแสดงผลเวอร์ชัน Apache Maven และข้อมูลอื่นๆ
    • ไดเรกทอรี .mvn มีการกำหนดค่าสำหรับ Maven Wrapper

เรียกใช้เซิร์ฟเวอร์ตัวอย่าง

คุณต้องเปิดเซิร์ฟเวอร์เพื่อทดสอบ ทําตามวิธีการต่อไปนี้เพื่อเรียกใช้เซิร์ฟเวอร์ตัวอย่างในภาษาที่ต้องการ

Python

ข้อมูลเข้าสู่ระบบ OAuth

สร้างและดาวน์โหลดข้อมูลเข้าสู่ระบบ OAuth ตามที่อธิบายไว้ก่อนหน้านี้ วางไฟล์ JSON ในไดเรกทอรีรูทข้างไฟล์เปิดใช้งานเซิร์ฟเวอร์ของแอปพลิเคชัน

กําหนดค่าเซิร์ฟเวอร์

คุณมีตัวเลือกหลายวิธีในการเรียกใช้เว็บเซิร์ฟเวอร์ เพิ่มรายการใดรายการหนึ่งต่อไปนี้ที่ส่วนท้ายของไฟล์ Python

  1. localhost ที่ไม่ปลอดภัย โปรดทราบว่าวิธีนี้เหมาะสำหรับการทดสอบในหน้าต่างเบราว์เซอร์โดยตรงเท่านั้น ระบบจะโหลดโดเมนที่ไม่ปลอดภัยใน iframe ของส่วนเสริม 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)
    
  2. รักษาความปลอดภัยให้กับ localhost คุณต้องระบุทูเปิลของไฟล์คีย์ SSL สำหรับอาร์กิวเมนต์ ssl_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)
    
  3. เซิร์ฟเวอร์ Gunicorn ตัวเลือกนี้เหมาะสำหรับเซิร์ฟเวอร์หรือการใช้งานระบบคลาวด์ที่พร้อมใช้งานจริง เราขอแนะนำให้ตั้งค่าตัวแปรสภาพแวดล้อม PORT เพื่อใช้กับตัวเลือกการเริ่มนี้

    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")
    

เปิดเซิร์ฟเวอร์

เรียกใช้แอปพลิเคชัน Python เพื่อเปิดเซิร์ฟเวอร์ตามที่กําหนดค่าไว้ในขั้นตอนก่อนหน้า

python main.py

คลิก URL ที่ปรากฏขึ้นเพื่อดูเว็บแอปในเบราว์เซอร์เพื่อยืนยันว่าเว็บแอปทํางานได้อย่างถูกต้อง

Node.js

กําหนดค่าเซิร์ฟเวอร์

หากต้องการเรียกใช้เซิร์ฟเวอร์ผ่าน HTTPS คุณจะต้องสร้างใบรับรองด้วยตนเองเพื่อใช้เรียกใช้แอปพลิเคชันผ่าน HTTPS คุณควรบันทึกข้อมูลเข้าสู่ระบบเหล่านี้เป็น sslcert/cert.pem และ sslcert/key.pem ในโฟลเดอร์รูทของที่เก็บ คุณอาจต้องเพิ่มคีย์เหล่านี้ลงในพวงกุญแจของ OS เพื่อให้เบราว์เซอร์ยอมรับ

ตรวจสอบว่า *.pem อยู่ในไฟล์ .gitignore เนื่องจากคุณไม่ต้องการคอมมิตไฟล์ไปยัง Git

เปิดเซิร์ฟเวอร์

คุณอาจเรียกใช้แอปพลิเคชันด้วยคําสั่งต่อไปนี้โดยแทนที่ step01 ด้วยขั้นตอนที่ถูกต้องที่คุณต้องการเรียกใช้เป็นเซิร์ฟเวอร์ (เช่น step01 สําหรับ 01-basic-app และ step02 สําหรับ 02-sign-in)

npm run step01

หรือ

npm run step02

ซึ่งจะเปิดเว็บเซิร์ฟเวอร์ที่ https://localhost:5000

คุณสิ้นสุดเซิร์ฟเวอร์ได้ด้วย Control + C ในเทอร์มินัล

Java

กําหนดค่าเซิร์ฟเวอร์

หากต้องการเรียกใช้เซิร์ฟเวอร์ผ่าน HTTPS คุณจะต้องสร้างใบรับรองด้วยตนเองเพื่อใช้เรียกใช้แอปพลิเคชันผ่าน HTTPS

ลองใช้ mkcert สําหรับการพัฒนาซอฟต์แวร์ภายใน เมื่อติดตั้ง mkcert แล้ว คำสั่งต่อไปนี้จะสร้างใบรับรองที่เก็บไว้ในเครื่องเพื่อเรียกใช้ผ่าน HTTPS

mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>

ตัวอย่างนี้รวมไฟล์คีย์สโตร์ไว้ในไดเรกทอรีทรัพยากร คุณสามารถจัดเก็บไฟล์ไว้ที่ใดก็ได้ แต่อย่าลืมอัปเดตไฟล์ application.properties ด้วยเส้นทางดังกล่าว ชื่อโดเมนคือโดเมนที่คุณใช้เรียกใช้โปรเจ็กต์ (เช่น localhost)

ตรวจสอบว่า *.p12 อยู่ในไฟล์ .gitignore เนื่องจากคุณไม่ต้องการคอมมิตไฟล์ไปยัง Git

เปิดเซิร์ฟเวอร์

เรียกใช้เซิร์ฟเวอร์โดยเรียกใช้เมธอด main ในไฟล์ Application.java ตัวอย่างเช่น ใน IntelliJ คุณสามารถคลิกขวาไปที่ Application.java > Run 'Application' ในไดเรกทอรี src/main/java/com/addons/spring หรือเปิดไฟล์ Application.java เพื่อคลิกลูกศรสีเขียวทางด้านซ้ายของลายเซ็นเมธอด main(String[] args) หรือจะเรียกใช้โปรเจ็กต์ในหน้าต่างเทอร์มินัลก็ได้ โดยทำดังนี้

./mvnw spring-boot:run

หรือใน Windows ให้ทำดังนี้

mvnw.cmd spring-boot:run

ซึ่งจะเปิดเซิร์ฟเวอร์ที่ https://localhost:5000 หรือที่พอร์ตที่คุณระบุใน application.properties