Ta seria przewodników ilustruje wszystkie elementy działającego dodatku do Classroom. Każdy krok przewodnika dotyczy konkretnych pojęć i ich implementacji w jednej aplikacji internetowej. Celem jest pomoc w skonfigurowaniu i uruchomieniu działającego dodatku.
Twój dodatek musi wchodzić w interakcję z projektem Google Cloud. Jeśli nie znasz Google Cloud, zalecamy przeczytanie przewodników dla początkujących. W konsoli Google Cloud możesz zarządzać danymi logowania, dostępem do interfejsu API i pakietem SDK Google Workspace Marketplace. Więcej informacji o pakiecie SDK Marketplace znajdziesz na stronie przewodnika po tworzeniu ofert w Google Workspace Marketplace.
W przewodniku znajdziesz te tematy:
- Tworzenie strony w Google Cloud, która będzie wyświetlana w elemencie iframe w Classroom.
- Dodawanie logowania jednokrotnego Google i umożliwianie użytkownikom logowania się.
- Wywoływanie interfejsu API w celu dołączenia dodatku do zadania.
- Spełnianie najważniejszych wymagań dotyczących przesyłania dodatków i wymaganych funkcji.
W tym przewodniku zakładamy, że znasz podstawy programowania i tworzenia stron internetowych. Zanim zaczniesz korzystać z przewodników, zdecydowanie zalecamy przeczytanie przewodnika po konfiguracji projektu. Ta strona zawiera ważne informacje o konfiguracji, które nie są w pełni omówione w przewodnikach.
Przykładowe implementacje
Kompletny przykład referencyjny jest dostępny w Pythonie. Częściowe implementacje są też dostępne w Javie i Node.js. Te implementacje są źródłami przykładowego kodu, który znajdziesz na kolejnych stronach.
Gdzie pobrać
Przykłady w Pythonie i Javie są dostępne w repozytoriach GitHub:
Przykładowy kod w Node.js można pobrać jako plik ZIP:
Wymagania wstępne
Aby przygotować nowy projekt dodatków, zapoznaj się z tymi sekcjami.
Certyfikat HTTPS
Aplikację możesz hostować w dowolnym środowisku programistycznym, ale dodatek do Classroom jest dostępny tylko przez https://. Dlatego do wdrożenia aplikacji lub przetestowania jej w elemencie iframe dodatku potrzebujesz serwera z szyfrowaniem SSL.
Możesz używać localhost z certyfikatem SSL. Jeśli
musisz utworzyć certyfikat do lokalnego programowania, rozważ użycie narzędzia mkcert.
Projekt Google Cloud
Musisz skonfigurować projekt Google Cloud do użycia z tymi przykładami. Więcej informacji o niezbędnych krokach znajdziesz w przewodniku po tworzeniu projektu Google Cloud. W sekcji Konfigurowanie projektu Google Cloud w pierwszym przewodniku znajdziesz też informacje o konkretnych działaniach konfiguracyjnych.
Gdy skończysz, pobierz identyfikator klienta OAuth 2.0 jako plik JSON. Musisz dodać ten plik danych logowania do rozpakowanego katalogu z przykładem. Konkretne lokalizacje znajdziesz w sekcji Interpretowanie plików.
Dane logowania OAuth
Aby utworzyć nowe dane logowania OAuth, wykonaj te czynności:
- Otwórz stronę danych logowania Google Cloud. Upewnij się, że u góry ekranu masz wybrany odpowiedni projekt.
- Kliknij UTWÓRZ DANE LOGOWANIA i w menu wybierz Identyfikator klienta OAuth.
- Na następnej stronie:
- Ustaw Typ aplikacji na Aplikacja internetowa.
- W sekcji Autoryzowane identyfikatory URI przekierowania kliknij DODAJ URI. Dodaj pełną ścieżkę do trasy wywołania zwrotnego w aplikacji. Na przykład
https://my.domain.com/auth-callbacklubhttps://localhost:5000/callback. Tę trasę utworzysz i obsłużysz później w tym przewodniku. W każdej chwili możesz edytować te trasy lub dodawać ich więcej. - Kliknij UTWÓRZ.
- Otworzy się okno z nowo utworzonymi danymi logowania. Wybierz opcję POBIERZ JSON. Skopiuj pobrany plik JSON do katalogu serwera.
Wymagania wstępne dotyczące poszczególnych języków
Najnowszą listę wymagań wstępnych znajdziesz w pliku README w każdym repozytorium.
Python
Nasz przykład w Pythonie korzysta z platformy Flask. Pełny kod źródłowy możesz pobrać z podanych linków.
W razie potrzeby zainstaluj Pythona w wersji 3.7 lub nowszej i upewnij się, że jest dostępny pip.
python3 -m ensurepip --upgradeZalecamy też skonfigurowanie i aktywowanie nowego wirtualnego środowiska Pythona.
python3 -m venv .classroom-addon-envsource .classroom-addon-env/bin/activate
W każdym podkatalogu przewodnika w pobranych przykładach znajduje się plik requirements.txt. Wymagane biblioteki możesz szybko zainstalować za pomocą pip. Aby zainstalować wymagane biblioteki na potrzeby pierwszego przewodnika, użyj tych poleceń.
cd flask/01-basic-apppip install -r requirements.txt
Node.js
Nasz przykład w Node.js korzysta z platformy Express. Pełny kod źródłowy możesz pobrać z podanych linków.
Ten przykład wymaga Node.js w wersji 16.13 lub nowszej.
Zainstaluj wymagane moduły Node za pomocą npm.
npm installJava
Nasz przykład w Javie korzysta z platformy Spring Boot. Pełny kod źródłowy możesz pobrać z podanych linków.
Jeśli nie masz jeszcze zainstalowanej Javy 11 lub nowszej, zainstaluj ją.
Aplikacje Spring Boot mogą używać Gradle lub Maven do obsługi kompilacji i zarządzania zależnościami. Ten przykład zawiera otokę Maven, która zapewnia pomyślną kompilację bez konieczności instalowania samego Mavena.
W katalogu, w którym masz pobrany lub sklonowany projekt, uruchom te polecenia, aby upewnić się, że masz wymagania wstępne do uruchomienia projektu.
java --version./mvnw --version
Lub w systemie Windows:
java -versionmvnw.cmd --version
Interpretowanie plików
W sekcjach poniżej opisujemy układ katalogów z przykładami.
Nazwy katalogów
Każde repozytorium zawiera kilka katalogów, których nazwy zaczynają się od cyfry, np. /01-basic-app/. Liczby odpowiadają konkretnym krokom przewodnika.
Każdy katalog zawiera w pełni funkcjonalną aplikację internetową, która implementuje funkcje opisane w danym przewodniku. Na przykład /01-basic-app/
katalog zawiera ostateczną implementację przewodnika Tworzenie dodatku.
Zawartość katalogu
Zawartość katalogu różni się w zależności od języka implementacji:
Python
Katalog główny zawiera te pliki:
main.py– punkt wejścia aplikacji w Pythonie. W tym pliku określ konfigurację serwera, której chcesz używać, a następnie uruchom go, aby uruchomić serwer.requirements.txt– moduły Pythona wymagane do uruchomienia aplikacji internetowej. Można je zainstalować automatycznie za pomocąpip install -r requirements.txt.client_secret.json– plik z tajnym kluczem klienta pobrany z Google Cloud. Pamiętaj, że nie jest on uwzględniony w archiwum z przykładem. Musisz zmienić nazwę pobranego pliku danych logowania i skopiować go do każdego katalogu głównego.
config.py– opcje konfiguracji serwera Flask.Katalog
webappzawiera treści aplikacji internetowej. Obejmuje on:Katalog
/templates/z szablonami Jinja dla różnych stron.Katalog
/static/z obrazami, CSS i pomocniczymi plikami JavaScript.routes.py– metody obsługi tras aplikacji internetowej.__init__.py– inicjator modułuwebapp. Ten inicjator uruchamia serwer Flask i wczytuje opcje konfiguracji ustawione w plikuconfig.py.Dodatkowe pliki wymagane w danym kroku przewodnika.
Node.js
Każdy krok przewodnika znajduje się w osobnym <step>
podfolderze. Każdy krok zawiera:
- Pliki statyczne, takie jak JavaScript, CSS i obrazy, znajdują się w folderze
./<step>/public. - Routery Express znajdują się w folderach
./<step>/routes. - Szablony HTML znajdują się w folderach
./<step>/views. - Aplikacja serwera to
./<step>/app.js.
Java
Katalog projektu zawiera te elementy:
- Katalog
src.mainzawiera kod źródłowy i konfigurację umożliwiającą prawidłowe uruchomienie aplikacji. Ten katalog zawiera te elementy: +java.com.addons.springkatalog zawiera plikiApplication.javaiController.java. PlikApplication.javaodpowiada za uruchamianie serwera aplikacji, a plikController.java– za obsługę logiki punktu końcowego. + Katalogresourceszawiera katalogtemplatesz plikami HTML i JavaScript. Zawiera też plikapplication.propertiesokreślający port do uruchomienia serwera, ścieżkę do pliku magazynu kluczy i ścieżkę do katalogutemplates. Ten przykład zawiera plik magazynu kluczy w kataloguresources. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby zaktualizować plikapplication.propertieso odpowiednią ścieżkę.pom.xmlzawiera informacje potrzebne do skompilowania projektu i zdefiniowania wymaganych zależności..gitignorezawiera nazwy plików, których nie należy przesyłać do Gita. Pamiętaj, aby dodać ścieżkę do magazynu kluczy w tym pliku.gitignore. W podanym przykładzie jest tosecrets/*.p12(cel magazynu kluczy omówimy w sekcji poniżej). W przypadku przewodnika 2 i nowszych przewodników należy też uwzględnić ścieżkę do plikuclient_secret.json, aby nie umieszczać tajnych kluczy w zdalnym repozytorium. W przypadku przewodnika 3 i nowszych przewodników należy dodać ścieżkę do pliku bazy danych H2 i fabryki magazynu danych. Więcej informacji o konfiguracji tych magazynów danych można znaleźć w trzecim przewodniku dotyczącym obsługi powracających użytkowników.mvnwimvnw.cmdto odpowiednio pliki wykonywalne otoki Maven dla systemów Unix i Windows. Na przykład uruchomienie polecenia./mvnw --versionw systemie Unix spowoduje wyświetlenie m.in. wersji Apache Maven.- Katalog
.mvnzawiera konfigurację otoki Maven.
Uruchamianie przykładowego serwera
Aby przetestować serwer, musisz go uruchomić. Aby uruchomić przykładowy serwer w wybranym języku, postępuj zgodnie z tymi instrukcjami.
Python
Dane logowania OAuth
Utwórz i pobierz dane logowania OAuth zgodnie z opisem powyżej. Umieść plik JSON w katalogu głównym obok pliku uruchamiającego serwer aplikacji.
Konfigurowanie serwera
Serwer WWW możesz uruchomić na kilka sposobów. Na końcu pliku Pythona dodaj jedną z tych opcji:
Niezabezpieczony
localhost. Pamiętaj, że ta opcja nadaje się tylko do bezpośredniego testowania w oknie przeglądarki. Niezabezpieczonych domen nie można wczytywać w elemencie iframe dodatku do 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)Zabezpieczony
localhost. W przypadku argumentussl_contextmusisz podać krotkę plików kluczy SSL.if __name__ == "__main__": # Run the web app at https://localhost:5000. app.run(host="localhost", ssl_context=("localhost.pem", "localhost-key.pem"), debug=True)Serwer Gunicorn. Ta opcja nadaje się do wdrożenia na serwerze produkcyjnym lub w chmurze. Zalecamy ustawienie zmiennej środowiskowej
PORTdo użycia z tą opcją uruchamiania.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")
Uruchamianie serwera
Uruchom aplikację w Pythonie, aby uruchomić serwer skonfigurowany w poprzednim kroku.
python main.pyKliknij wyświetlony adres URL, aby wyświetlić aplikację internetową w przeglądarce i sprawdzić, czy działa prawidłowo.
Node.js
Konfigurowanie serwera
Aby uruchomić serwer przez HTTPS, musisz utworzyć certyfikat samodzielny, który będzie używany do uruchamiania aplikacji przez HTTPS. Te dane logowania należy zapisać jako sslcert/cert.pem i sslcert/key.pem w folderze głównym repozytorium. Aby przeglądarka je zaakceptowała, może być konieczne dodanie tych kluczy do pęku kluczy systemu operacyjnego.
Upewnij się, że w pliku .gitignore znajduje się *.pem, ponieważ nie chcesz zatwierdzać tego pliku w Gicie.
Uruchamianie serwera
Aplikację możesz uruchomić za pomocą tego polecenia, zastępując step01 prawidłowym krokiem, który chcesz uruchomić jako serwer (np. step01 w przypadku 01-basic-app i step02 w przypadku 02-sign-in).
npm run step01lub
npm run step02Spowoduje to uruchomienie serwera WWW pod adresem https://localhost:5000.
Serwer możesz zatrzymać, naciskając Control + C w terminalu.
Java
Konfigurowanie serwera
Aby uruchomić serwer przez HTTPS, musisz utworzyć certyfikat samodzielny, który będzie używany do uruchamiania aplikacji przez HTTPS.
Do lokalnego programowania rozważ użycie narzędzia mkcert. Po zainstalowaniu narzędzia mkcert te polecenia wygenerują lokalnie przechowywany certyfikat do uruchamiania przez HTTPS.
mkcert -installmkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
Ten przykład zawiera plik magazynu kluczy w katalogu resources. Możesz go przechowywać w dowolnym miejscu, ale pamiętaj, aby zaktualizować plik application.properties o odpowiednią ścieżkę. Nazwa domeny to domena, w której uruchamiasz projekt (np. localhost).
Upewnij się, że w pliku .gitignore znajduje się *.p12, ponieważ nie chcesz zatwierdzać tego pliku w Gicie.
Uruchamianie serwera
Uruchom serwer, uruchamiając metodę main w pliku Application.java. Na przykład w IntelliJ możesz kliknąć prawym przyciskiem myszy
Application.java > Run 'Application' w katalogu
src/main/java/com/addons/spring lub otworzyć plik Application.java
i kliknąć zieloną strzałkę po lewej stronie sygnatury metody main(String[] args). Możesz też uruchomić projekt w oknie terminala:
./mvnw spring-boot:runlub w systemie Windows:
mvnw.cmd spring-boot:runSpowoduje to uruchomienie serwera pod adresem https://localhost:5000 lub na porcie określonym w pliku application.properties.