Loạt hướng dẫn này minh hoạ tất cả các thành phần của một tiện ích bổ sung hoạt động cho Lớp học. Mỗi bước trong hướng dẫn giải quyết các khái niệm cụ thể, triển khai các khái niệm đó trong một ứng dụng web. Mục tiêu là giúp bạn thiết lập, định cấu hình và chạy một tiện ích bổ sung hoạt động.
Tiện ích bổ sung của bạn phải tương tác với một dự án trên đám mây của Google. Nếu bạn chưa quen với Google Cloud, bạn nên đọc hướng dẫn Bắt đầu sử dụng. Bạn quản lý thông tin đăng nhập, quyền truy cập API và SDK Google Workspace Marketplace trong bảng điều khiển Cloud. Để biết thêm thông tin về SDK Marketplace, hãy truy cập vào trang hướng dẫn về trang thông tin trên Google Workspace Marketplace listing.
Hướng dẫn này đề cập đến các chủ đề sau:
- Sử dụng Google Cloud để tạo một trang hiển thị trong iframe trong Lớp học.
- Thêm tính năng đăng nhập một lần (SSO) của Google và cho phép người dùng đăng nhập.
- Thực hiện lệnh gọi API để đính kèm tiện ích bổ sung vào một bài tập.
- Đáp ứng các yêu cầu chính về việc gửi tiện ích bổ sung và các tính năng bắt buộc.
Hướng dẫn này giả định rằng bạn đã quen thuộc với các khái niệm về lập trình và phát triển web cơ bản. Bạn nên đọc kỹ hướng dẫn Định cấu hình dự án guide trước khi bắt đầu các hướng dẫn. Trang này chứa thông tin quan trọng về cấu hình mà các hướng dẫn không đề cập đầy đủ.
Ví dụ về cách triển khai
Bạn có thể xem một ví dụ tham chiếu hoàn chỉnh bằng Python. Bạn cũng có thể xem các cách triển khai một phần bằng Java và Node.js. Các cách triển khai này là nguồn của mã ví dụ có trong các trang tiếp theo.
Nơi tải xuống
Bạn có thể xem các ví dụ về Python và Java trong kho lưu trữ GitHub:
Bạn có thể tải mẫu Node.js xuống dưới dạng tệp ZIP:
Điều kiện tiên quyết
Xem lại các phần sau để chuẩn bị một dự án tiện ích bổ sung mới.
Chứng chỉ HTTPS
Mặc dù bạn có thể lưu trữ ứng dụng của mình trên mọi môi trường phát triển, nhưng tiện ích bổ sung cho Lớp học chỉ có sẵn thông qua https://. Do đó, bạn cần một máy chủ có tính năng mã hoá SSL để triển khai ứng dụng hoặc kiểm thử ứng dụng trong iframe tiện ích bổ sung.
Bạn có thể sử dụng localhost với chứng chỉ SSL; hãy cân nhắc sử dụng mkcert nếu
bạn cần tạo chứng chỉ cho quá trình phát triển cục bộ.
Dự án Google Cloud
Bạn cần định cấu hình một dự án trên Google Cloud để sử dụng với các ví dụ này. Hãy xem hướng dẫn tạo dự án trên đám mây để biết thông tin tổng quan về các bước cần thiết để bắt đầu. Phần Thiết lập dự án trên Google Cloud trong hướng dẫn đầu tiên cũng hướng dẫn bạn các thao tác định cấu hình cụ thể cần thực hiện.
Khi hoàn tất, hãy tải Mã ứng dụng khách OAuth 2.0 xuống dưới dạng tệp JSON; bạn cần thêm tệp thông tin đăng nhập này vào thư mục ví dụ đã giải nén. Hãy xem phần Tìm hiểu về các tệp để biết các vị trí cụ thể.
Thông tin đăng nhập OAuth
Hãy làm theo các bước sau để tạo thông tin đăng nhập OAuth mới:
- Chuyển đến trang Thông tin đăng nhập của Google Cloud. Đảm bảo rằng bạn đã chọn đúng dự án ở đầu màn hình.
- Nhấp vào TẠO THÔNG TIN ĐĂNG NHẬP rồi chọn Mã ứng dụng OAuth trong trình đơn thả xuống.
- Trên trang tiếp theo:
- Đặt Loại ứng dụng thành Ứng dụng web.
- Trong phần URI chuyển hướng được uỷ quyền, hãy nhấp vào THÊM URI. Thêm đường dẫn đầy đủ cho một tuyến gọi lại cho ứng dụng của bạn. Ví dụ:
https://my.domain.com/auth-callbackhoặchttps://localhost:5000/callback. Bạn sẽ tạo và xử lý tuyến này sau trong hướng dẫn này. Bạn có thể chỉnh sửa hoặc thêm các tuyến như vậy bất cứ lúc nào. - Nhấp vào TẠO.
- Sau đó, bạn sẽ nhận được một hộp thoại có thông tin đăng nhập mới tạo. Chọn tuỳ chọn TẢI JSON XUỐNG. Sao chép tệp JSON đã tải xuống vào thư mục máy chủ.
Điều kiện tiên quyết dành riêng cho ngôn ngữ
Xem tệp README trong mỗi kho lưu trữ để biết danh sách điều kiện tiên quyết mới nhất.
Python
Ví dụ về Python của chúng tôi sử dụng khung Flask. Bạn có thể tải mã nguồn hoàn chỉnh xuống từ các đường liên kết được cung cấp.
Nếu cần, hãy cài đặt Python 3.7+ và đảm bảo rằng pip có sẵn.
python3 -m ensurepip --upgradeBạn cũng nên thiết lập và kích hoạt một môi trường ảo Python mới.
python3 -m venv .classroom-addon-envsource .classroom-addon-env/bin/activate
Có một requirements.txt trong mỗi thư mục con của hướng dẫn trong các ví dụ đã tải xuống. Bạn có thể nhanh chóng cài đặt các thư viện bắt buộc bằng pip. Sử dụng các lệnh sau để cài đặt các thư viện bắt buộc cho hướng dẫn đầu tiên.
cd flask/01-basic-apppip install -r requirements.txt
Node.js
Ví dụ về Node.js của chúng tôi sử dụng khung Express. Bạn có thể tải mã nguồn hoàn chỉnh xuống từ các đường liên kết được cung cấp.
Ví dụ này yêu cầu Node.js phiên bản 16.13 trở lên.
Cài đặt các mô-đun nút bắt buộc bằng npm.
npm installJava
Ví dụ về Java của chúng tôi sử dụng khung Spring Boot. Bạn có thể tải mã nguồn hoàn chỉnh xuống từ các đường liên kết được cung cấp.
Cài đặt Java 11 trở lên nếu bạn chưa cài đặt trên máy.
Các ứng dụng Spring Boot có thể sử dụng Gradle hoặc Maven để xử lý bản dựng và quản lý các phần phụ thuộc. Ví dụ này bao gồm trình bao bọc Maven giúp đảm bảo bản dựng thành công mà không yêu cầu bạn cài đặt chính Maven.
Trong thư mục mà bạn đã tải xuống hoặc nhân bản dự án, hãy chạy các lệnh sau để đảm bảo bạn có các điều kiện tiên quyết để chạy dự án.
java --version./mvnw --version
Hoặc trên Windows:
java -versionmvnw.cmd --version
Tìm hiểu về các tệp
Các phần sau đây mô tả bố cục của các thư mục ví dụ.
Tên thư mục
Mỗi kho lưu trữ chứa một số thư mục có tên bắt đầu bằng một số, chẳng hạn như /01-basic-app/. Các số này tương ứng với các bước cụ thể trong hướng dẫn.
Mỗi thư mục chứa một ứng dụng web hoạt động đầy đủ, triển khai các tính năng được mô tả trong một hướng dẫn cụ thể. Ví dụ: /01-basic-app/
thư mục chứa cách triển khai cuối cùng cho hướng dẫn Tạo tiện ích bổ sung.
Nội dung thư mục
Nội dung thư mục khác nhau tuỳ thuộc vào ngôn ngữ triển khai:
Python
Thư mục gốc chứa các tệp sau:
main.py– điểm truy cập vào ứng dụng Python. Chỉ định cấu hình máy chủ mà bạn muốn sử dụng trong tệp này, sau đó kích hoạt tệp để khởi động máy chủ.requirements.txt– các mô-đun Python cần thiết để chạy ứng dụng web. Bạn có thể cài đặt các mô-đun này tự động bằngpip install -r requirements.txt.client_secret.json– tệp khoá bí mật của ứng dụng khách được tải xuống từ Google Cloud. Xin lưu ý rằng tệp này không có trong kho lưu trữ ví dụ; bạn nên đổi tên và sao chép tệp thông tin đăng nhập đã tải xuống vào từng thư mục gốc.
config.py– các tuỳ chọn cấu hình cho máy chủ Flask.Thư mục
webappchứa nội dung cho ứng dụng web. Nội dung này bao gồm:Thư mục
/templates/có các mẫu Jinja cho nhiều trang.Thư mục
/static/có hình ảnh, CSS và các tệp JavaScript phụ trợ.routes.py- các phương thức trình xử lý cho các tuyến ứng dụng web.__init__.py– trình khởi tạo cho mô-đunwebapp. Trình khởi tạo này khởi động máy chủ Flask và tải các tuỳ chọn cấu hình được đặt trongconfig.py.Các tệp bổ sung theo yêu cầu của một bước cụ thể trong hướng dẫn.
Node.js
Bạn có thể tìm thấy từng bước trong hướng dẫn trong thư mục con <step>
riêng. Mỗi bước chứa:
- Các tệp tĩnh như JavaScript, CSS và hình ảnh có trong thư mục
./<step>/public. - Bộ định tuyến Express có trong thư mục
./<step>/routes. - Các mẫu HTML có trong thư mục
./<step>/views. - Ứng dụng máy chủ là
./<step>/app.js.
Java
Thư mục dự án bao gồm:
- Thư mục
src.mainchứa mã nguồn và cấu hình để chạy ứng dụng thành công. Thư mục này bao gồm: + Thư mụcjava.com.addons.springchứa các tệpApplication.javavàController.java. TệpApplication.javachịu trách nhiệm chạy máy chủ ứng dụng, trong khi tệpController.javaxử lý logic điểm cuối. + Thư mụcresourceschứa thư mụctemplatescó các tệp HTML và JavaScript. Thư mục này cũng chứa tệpapplication.propertieschỉ định cổng để chạy máy chủ, đường dẫn đến tệp kho khoá và đường dẫn đến thư mụctemplatesVí dụ này bao gồm tệp kho khoá trong thư mụcresources. Bạn có thể lưu trữ tệp này ở bất cứ đâu bạn muốn, nhưng hãy đảm bảo rằng bạn cập nhật tệpapplication.propertiesbằng đường dẫn tương ứng.pom.xmlchứa thông tin cần thiết để xây dựng dự án và xác định các phần phụ thuộc bắt buộc..gitignorechứa tên tệp không được tải lên git. Đảm bảo rằng bạn thêm đường dẫn đến kho khoá trong.gitignorenày. Trong ví dụ được cung cấp, đây làsecrets/*.p12(mục đích của kho khoá được thảo luận trong phần bên dưới). Đối với hướng dẫn 2 trở lên, bạn cũng nên thêm đường dẫn đến tệpclient_secret.jsonđể đảm bảo rằng bạn không đưa bí mật vào kho lưu trữ từ xa. Đối với hướng dẫn 3 trở lên, bạn nên thêm đường dẫn đến tệp cơ sở dữ liệu H2 và nhà máy kho dữ liệu tệp. Bạn có thể tìm thêm thông tin về cách thiết lập các kho lưu trữ dữ liệu này có thể được tìm thấy trong hướng dẫn thứ ba về cách xử lý các lượt truy cập lặp lại.mvnwvàmvnw.cmdlà các tệp thực thi trình bao bọc Maven cho Unix và Windows. Ví dụ: khi chạy./mvnw --versiontrên Unix, phiên bản Apache Maven sẽ xuất ra, cùng với các thông tin khác.- Thư mục
.mvnchứa cấu hình cho trình bao bọc Maven.
Chạy máy chủ mẫu
Bạn cần khởi chạy máy chủ để kiểm thử máy chủ đó. Hãy làm theo các hướng dẫn sau để chạy máy chủ mẫu bằng ngôn ngữ bạn chọn:
Python
Thông tin đăng nhập OAuth
Tạo và tải thông tin đăng nhập OAuth xuống như mô tả trước đó. Đặt tệp JSON vào thư mục gốc cùng với tệp khởi chạy máy chủ của ứng dụng.
Định cấu hình máy chủ
Bạn có một số lựa chọn để chạy máy chủ web. Ở cuối tệp Python, hãy thêm một trong những lựa chọn sau:
localhostkhông an toàn. Xin lưu ý rằng lựa chọn này chỉ phù hợp để kiểm thử trực tiếp trong cửa sổ trình duyệt; bạn không thể tải các miền không an toàn trong iframe tiện ích bổ sung cho Lớp học.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)localhostan toàn. Bạn phải chỉ định một bộ tệp khoá SSL cho đối số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)Máy chủ Gunicorn. Lựa chọn này phù hợp với máy chủ sẵn sàng cho hoạt động sản xuất hoặc triển khai trên đám mây. Bạn nên đặt biến môi trường
PORTđể sử dụng với lựa chọn khởi chạy này.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")
Khởi chạy máy chủ
Chạy ứng dụng Python để khởi chạy máy chủ như đã định cấu hình trong bước trước.
python main.pyNhấp vào URL xuất hiện để xem ứng dụng web trong trình duyệt nhằm xác nhận rằng ứng dụng đang chạy đúng cách.
Node.js
Định cấu hình máy chủ
Để chạy máy chủ qua HTTPS, bạn cần tạo một chứng chỉ tự ký được dùng để chạy ứng dụng qua HTTPS. Bạn nên lưu các thông tin đăng nhập này dưới dạng sslcert/cert.pem và sslcert/key.pem trong thư mục gốc của kho lưu trữ. Bạn có thể cần thêm các khoá này vào chuỗi khoá hệ điều hành để trình duyệt chấp nhận các khoá này.
Đảm bảo rằng *.pem có trong tệp .gitignore vì bạn không muốn xác nhận tệp vào git.
Khởi chạy máy chủ
Bạn có thể chạy ứng dụng bằng lệnh sau, thay thế step01 cho bước chính xác mà bạn muốn chạy dưới dạng máy chủ (ví dụ: step01 cho 01-basic-app và step02 cho 02-sign-in).
npm run step01hoặc
npm run step02Lệnh này sẽ khởi chạy máy chủ web tại https://localhost:5000.
Bạn có thể chấm dứt máy chủ bằng Control + C trong dòng lệnh.
Java
Định cấu hình máy chủ
Để chạy máy chủ qua HTTPS, bạn cần tạo một chứng chỉ tự ký được dùng để chạy ứng dụng qua HTTPS.
Cân nhắc sử dụng mkcert cho quá trình phát triển cục bộ. Sau khi bạn cài đặt mkcert, các lệnh sau sẽ tạo một chứng chỉ được lưu trữ cục bộ để chạy qua HTTPS.
mkcert -installmkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
Ví dụ này bao gồm tệp kho khoá trong thư mục tài nguyên. Bạn có thể lưu trữ tệp này ở bất cứ đâu bạn muốn, nhưng hãy đảm bảo rằng bạn cập nhật tệp application.properties bằng đường dẫn tương ứng. Tên miền là miền mà bạn chạy dự án (ví dụ: localhost).
Đảm bảo rằng *.p12 có trong tệp .gitignore vì bạn không muốn xác nhận tệp vào git.
Khởi chạy máy chủ
Khởi chạy máy chủ bằng cách chạy phương thức main trong tệp Application.java. Ví dụ: trong IntelliJ, bạn có thể nhấp chuột phải vào
Application.java > Run 'Application' trong thư mục
src/main/java/com/addons/spring hoặc mở tệp Application.java
để nhấp vào mũi tên màu xanh lục ở bên trái chữ ký phương thức main(String[] args). Ngoài ra, bạn có thể chạy dự án trong cửa sổ dòng lệnh:
./mvnw spring-boot:runhoặc trên Windows:
mvnw.cmd spring-boot:runLệnh này sẽ khởi chạy máy chủ tại https://localhost:5000 hoặc tại cổng mà bạn đã chỉ định trong application.properties.