Serangkaian panduan ini menggambarkan semua bagian yang bergerak dari add-on Classroom yang berfungsi. Setiap langkah penelusuran membahas konsep tertentu, menerapkannya dalam satu aplikasi web. Tujuannya adalah membantu Anda menyiapkan, mengonfigurasi, dan meluncurkan add-on yang berfungsi.
Add-on Anda harus berinteraksi dengan project Google Cloud. Jika Anda belum terbiasa menggunakan Google Cloud, sebaiknya baca panduan Memulai. Anda mengelola kredensial, akses API, dan Google Workspace Marketplace SDK di konsol Google Cloud. Untuk mengetahui informasi selengkapnya tentang Marketplace SDK, buka halaman panduan listingan Google Workspace Marketplace.
Panduan ini mencakup topik berikut:
- Gunakan Google Cloud untuk membuat halaman yang akan ditampilkan dalam iframe di Classroom.
- Menambahkan single sign-on (SSO) Google dan mengizinkan pengguna untuk login.
- Lakukan panggilan API untuk melampirkan add-on ke tugas.
- Penuhi persyaratan pengiriman add-on utama dan fitur yang diperlukan.
Panduan ini mengasumsikan bahwa Anda sudah memahami pemrograman dan konsep dasar pengembangan web. Sebaiknya baca Panduan konfigurasi project sebelum memulai penelusuran. Halaman ini berisi detail konfigurasi penting yang tidak sepenuhnya dibahas dalam panduan.
Contoh penerapan
Contoh referensi lengkap tersedia di Python. Implementasi parsial juga tersedia di Java dan Node.js. Implementasi ini adalah sumber kode contoh yang ada di halaman berikutnya.
Tempat mendownload
Contoh Python dan Java tersedia di repositori GitHub:
Contoh Node.js dapat didownload sebagai file ZIP:
Prasyarat
Tinjau bagian berikut untuk menyiapkan project add-on baru.
Sertifikat HTTPS
Meskipun Anda dapat menghosting aplikasi di lingkungan pengembangan apa pun, add-on Classroom hanya tersedia melalui https://
. Oleh karena itu, Anda memerlukan server dengan enkripsi SSL untuk men-deploy aplikasi atau mengujinya dalam iframe add-on.
Anda dapat menggunakan localhost
dengan sertifikat SSL; pertimbangkan mkcert jika Anda perlu membuat sertifikat untuk pengembangan lokal.
Project Google Cloud
Anda perlu mengonfigurasi project Google Cloud untuk digunakan dengan contoh ini. Lihat panduan pembuatan project Google Cloud untuk mengetahui ringkasan langkah-langkah yang diperlukan untuk memulai. Bagian Siapkan project Google Cloud dalam panduan pertama juga menjelaskan langkah-langkah tindakan konfigurasi khusus yang harus dilakukan.
Setelah selesai, download ID Klien OAuth 2.0 Anda sebagai file JSON; Anda perlu menambahkan file kredensial ini ke direktori contoh yang belum di-unzip. Lihat Memahami file untuk lokasi tertentu.
Kredensial OAuth
Ikuti langkah-langkah berikut untuk membuat kredensial OAuth baru:
- Buka halaman Kredensial Google Cloud. Pastikan Anda telah memilih project yang benar di bagian atas layar.
- Klik CREATE CREDENTIALS, lalu pilih OAuth client ID dari drop-down.
- Di halaman berikutnya:
- Tetapkan Application type ke Web application.
- Di bagian URI pengalihan yang sah, klik TAMBAHKAN URI. Tambahkan jalur
lengkap untuk rute callback aplikasi Anda. Misalnya,
https://my.domain.com/auth-callback
atauhttps://localhost:5000/callback
. Anda akan membuat dan menangani rute ini nanti dalam panduan ini. Anda dapat mengedit atau menambahkan rute tersebut kapan saja. - Klik BUAT.
- Kemudian, Anda akan menerima dialog dengan kredensial yang baru dibuat. Pilih opsi DOWNLOAD JSON. Salin file JSON yang didownload ke direktori server Anda.
Prasyarat khusus bahasa
Lihat file README di setiap repositori untuk mengetahui daftar prasyarat terbaru.
Python
Contoh Python kami menggunakan framework Flask. Anda dapat mendownload kode sumber lengkap dari link yang disediakan.
Jika perlu, instal Python 3.7+ dan pastikan pip
tersedia.
python3 -m ensurepip --upgrade
Sebaiknya Anda juga menyiapkan dan mengaktifkan lingkungan virtual Python baru.
python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate
Ada requirements.txt
di setiap subdirektori panduan dalam contoh yang didownload. Anda dapat menginstal library yang diperlukan dengan cepat menggunakan
pip
. Gunakan perintah berikut untuk menginstal library yang diperlukan untuk panduan pertama.
cd flask/01-basic-app
pip install -r requirements.txt
Node.js
Contoh Node.js kami menggunakan framework Express. Anda dapat mendownload kode sumber lengkap dari link yang disediakan.
Contoh ini memerlukan Node.js v16.13 atau yang lebih baru.
Instal modul node yang diperlukan menggunakan npm
.
npm install
Java
Contoh Java kami menggunakan framework Spring Boot. Anda dapat mendownload kode sumber lengkap dari link yang disediakan.
Instal Java 11+ jika Anda belum menginstalnya di komputer Anda.
Aplikasi Spring Boot dapat menggunakan Gradle atau Maven untuk menangani build dan mengelola dependensi. Contoh ini menyertakan wrapper Maven yang memastikan build berhasil tanpa mengharuskan Anda menginstal Maven itu sendiri.
Di direktori tempat Anda mendownload atau meng-clone project, jalankan perintah berikut untuk memastikan Anda memiliki prasyarat untuk menjalankan project.
java --version
./mvnw --version
Atau di Windows:
java -version
mvnw.cmd --version
Memahami file
Bagian berikut menjelaskan tata letak direktori contoh.
Nama direktori
Setiap repositori berisi beberapa direktori yang namanya diawali dengan angka, seperti /01-basic-app/
. Angka-angka tersebut sesuai dengan langkah-langkah panduan tertentu.
Setiap direktori berisi aplikasi web yang berfungsi penuh yang menerapkan fitur
yang dijelaskan dalam panduan tertentu. Misalnya, direktori /01-basic-app/
berisi implementasi akhir untuk panduan Membuat add-on.
Isi direktori
Isi direktori berbeda-beda bergantung pada bahasa penerapan:
Python
root direktori berisi file berikut:
main.py
- titik entri aplikasi Python. Tentukan konfigurasi server yang ingin Anda gunakan dalam file ini, lalu jalankan untuk memulai server.requirements.txt
- modul Python yang diperlukan untuk menjalankan aplikasi web. Modul ini dapat diinstal secara otomatis menggunakanpip install -r requirements.txt
.client_secret.json
- file rahasia klien yang didownload dari Google Cloud. Perhatikan bahwa file ini tidak disertakan dalam arsip contoh; Anda harus mengganti nama dan menyalin file kredensial yang didownload ke setiap root direktori.
config.py
- opsi konfigurasi untuk server Flask.Direktori
webapp
berisi konten untuk aplikasi web. Paket ini mencakup:Direktori
/templates/
dengan template Jinja untuk berbagai halaman.Direktori
/static/
dengan gambar, CSS, dan file JavaScript tambahan.routes.py
- metode handler untuk rute aplikasi web.__init__.py
- penginisialisasi untuk modulwebapp
. Penginisialisasi ini memulai server Flask dan memuat opsi konfigurasi yang ditetapkan diconfig.py
.File tambahan sesuai yang diperlukan oleh langkah-langkah panduan tertentu.
Node.js
Setiap langkah penelusuran dapat ditemukan di subfolder <step>
masing-masing. Setiap langkah berisi:
- File statis seperti JavaScript, CSS, dan gambar dapat ditemukan di folder
./<step>/public
. - Router Express ada di folder
./<step>/routes
. - Template HTML ada di folder
./<step>/views
. - Aplikasi server adalah
./<step>/app.js
.
Java
Direktori project mencakup hal berikut:
- Direktori
src.main
berisi kode sumber dan konfigurasi untuk menjalankan aplikasi dengan berhasil. Direktori ini mencakup hal berikut: + Direktorijava.com.addons.spring
berisi fileApplication.java
danController.java
. FileApplication.java
bertanggung jawab untuk menjalankan server aplikasi, sedangkan fileController.java
menangani logika endpoint. + Direktoriresources
berisi direktoritemplates
dengan file HTML dan JavaScript. File ini juga berisi fileapplication.properties
yang menentukan port untuk menjalankan server, jalur ke file keystore, dan jalur ke direktoritemplates
. Contoh ini menyertakan file keystore di direktoriresources
. Anda dapat menyimpannya di mana pun Anda mau, tetapi pastikan Anda memperbarui fileapplication.properties
dengan jalur yang sesuai.pom.xml
berisi informasi yang diperlukan untuk membangun project dan menentukan dependensi yang diperlukan..gitignore
berisi nama file yang tidak boleh diupload ke git. Pastikan Anda menambahkan jalur ke keystore Anda di.gitignore
ini. Dalam contoh yang diberikan, ini adalahsecrets/*.p12
(tujuan keystore dibahas di bagian di bawah). Untuk panduan 2 dan seterusnya, Anda juga harus menyertakan jalur ke fileclient_secret.json
untuk memastikan Anda tidak menyertakan rahasia di repositori jarak jauh. Untuk panduan 3 dan seterusnya, Anda harus menambahkan jalur ke file database H2 dan factory penyimpanan data file. Informasi selengkapnya tentang penyiapan penyimpanan data ini dapat ditemukan dalam panduan ketiga tentang menangani kunjungan berulang.mvnw
danmvnw.cmd
masing-masing adalah file yang dapat dieksekusi wrapper Maven untuk Unix dan Windows. Misalnya, menjalankan./mvnw --version
di Unix akan menampilkan versi Apache Maven, beserta informasi lainnya.- Direktori
.mvn
berisi konfigurasi untuk wrapper Maven.
Menjalankan server contoh
Anda perlu meluncurkan server untuk mengujinya. Ikuti petunjuk ini untuk menjalankan server contoh dalam bahasa pilihan Anda:
Python
Kredensial OAuth
Buat dan download kredensial OAuth Anda seperti yang dijelaskan sebelumnya. Tempatkan file JSON di direktori root bersama file peluncuran server aplikasi Anda.
Konfigurasi server
Anda memiliki beberapa opsi untuk menjalankan server web. Di akhir file Python, tambahkan salah satu kode berikut:
localhost
tidak aman. Perhatikan bahwa metode ini hanya cocok untuk pengujian langsung di jendela browser; domain yang tidak aman tidak dapat dimuat di iframe add-on 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)
Amankan
localhost
. Anda harus menentukan tuple file kunci SSL untuk argumenssl_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)
Server Gunicorn. Cara ini cocok untuk server siap produksi atau deployment cloud. Sebaiknya tetapkan variabel lingkungan
PORT
untuk digunakan dengan opsi peluncuran ini.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")
Luncurkan server
Jalankan aplikasi Python Anda untuk meluncurkan server seperti yang dikonfigurasi di langkah sebelumnya.
python main.py
Klik URL yang muncul untuk melihat aplikasi web Anda di browser guna mengonfirmasi bahwa aplikasi berjalan dengan benar.
Node.js
Konfigurasi server
Untuk menjalankan server melalui HTTPS, Anda perlu membuat sertifikat mandiri yang digunakan untuk menjalankan aplikasi melalui HTTPS. Kredensial ini harus
disimpan sebagai sslcert/cert.pem
dan sslcert/key.pem
di folder root repositori. Anda mungkin perlu menambahkan kunci ini ke key chain OS agar browser Anda dapat menerimanya.
Pastikan *.pem
ada di file .gitignore
Anda karena Anda tidak ingin
melakukan commit file ke git.
Luncurkan server
Anda dapat menjalankan aplikasi dengan perintah berikut yang menggantikan step01
dengan langkah yang benar yang ingin Anda jalankan sebagai server (misalnya, step01
untuk 01-basic-app dan step02
untuk 02-sign-in).
npm run step01
atau
npm run step02
Tindakan ini akan meluncurkan server web di https://localhost:5000
.
Anda dapat menghentikan server dengan Control + C
di terminal.
Java
Konfigurasi server
Untuk menjalankan server melalui HTTPS, Anda perlu membuat sertifikat mandiri yang digunakan untuk menjalankan aplikasi melalui HTTPS.
Sebaiknya gunakan mkcert untuk pengembangan lokal. Setelah Anda menginstal mkcert
,
perintah berikut akan membuat sertifikat yang disimpan secara lokal untuk dijalankan melalui
HTTPS.
mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
Contoh ini menyertakan file keystore di direktori resource. Anda dapat
menyimpannya di mana pun Anda inginkan, tetapi pastikan Anda memperbarui
file application.properties
dengan jalur yang sesuai. Nama domain adalah
domain tempat Anda menjalankan project (misalnya, localhost
).
Pastikan *.p12
ada di file .gitignore
Anda karena Anda tidak ingin
melakukan commit file ke git.
Luncurkan server
Luncurkan server dengan menjalankan metode main
dalam file Application.java
. Misalnya, di IntelliJ, Anda dapat mengklik kanan
Application.java
> Run 'Application'
di direktori
src/main/java/com/addons/spring
atau membuka file Application.java
untuk mengklik panah hijau di sebelah kiri tanda tangan metode main(String[] args)
. Atau, Anda dapat menjalankan project di jendela terminal:
./mvnw spring-boot:run
atau di Windows:
mvnw.cmd spring-boot:run
Perintah ini meluncurkan server di https://localhost:5000
atau di port yang Anda
tentukan di application.properties
.