Эта серия пошаговых инструкций иллюстрирует все этапы создания работающего дополнения для Classroom. Каждый этап пошагового руководства посвящен конкретным концепциям, реализуемым в одном веб-приложении. Цель — помочь вам настроить, настроить и запустить работающее дополнение.
Ваше дополнение должно взаимодействовать с проектом Google Cloud . Если вы не знакомы с Google Cloud, рекомендуем ознакомиться с руководствами по началу работы . Управление учётными данными, доступом к API и SDK Google Workspace Marketplace осуществляется в консоли Google Cloud. Подробнее о SDK Marketplace см. на странице руководства по листингу Google Workspace Marketplace .
В этом руководстве рассматриваются следующие темы:
- Используйте Google Cloud для создания страницы, которая будет отображаться в iframe в Classroom.
- Добавьте систему единого входа Google (SSO) и разрешите пользователям входить в систему.
- Выполните вызовы API, чтобы прикрепить свое дополнение к заданию.
- Определите основные требования к подаче дополнений и необходимые функции.
Это руководство предполагает, что вы знакомы с программированием и основными концепциями веб-разработки. Настоятельно рекомендуем ознакомиться с руководством по настройке проекта перед началом работы с пошаговыми руководствами. Эта страница содержит важные сведения о настройке, которые не полностью раскрыты в пошаговых руководствах.
Примеры реализаций
Полный справочный пример доступен на Python . Частичные реализации также доступны на Java и Node.js. Эти реализации являются источниками кода примера, представленного на последующих страницах.
Где скачать
Примеры Python и Java доступны в репозиториях GitHub:
Пример Node.js можно загрузить в виде zip-файла:
Предпосылки
Ознакомьтесь со следующими разделами, чтобы подготовить новый проект дополнений.
HTTPS-сертификат
Хотя вы можете разместить своё приложение в любой среде разработки, надстройка Classroom доступна только по https://
. Поэтому для развёртывания приложения или его тестирования в iframe надстройки вам потребуется сервер с SSL-шифрованием.
Можно использовать localhost
с SSL-сертификатом; рассмотрите mkcert , если вам нужно создать сертификат для локальной разработки.
Проект Google Cloud
Для использования этих примеров необходимо настроить проект Google Cloud. Обзор необходимых шагов для начала работы см. в руководстве по созданию проекта Google Cloud . В разделе «Настройка проекта Google Cloud» первого пошагового руководства также подробно описываются необходимые действия по настройке.
После завершения скачайте свой идентификатор клиента OAuth 2.0 в формате JSON. Этот файл необходимо добавить в распакованный каталог с примерами. Информация о местоположении файлов приведена в разделе «Общие сведения о файлах».
Учетные данные OAuth
Чтобы создать новые учетные данные OAuth, выполните следующие действия:
- Перейдите на страницу учётных данных Google Cloud . Убедитесь, что в верхней части экрана выбран нужный проект.
- Нажмите СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ и выберите Идентификатор клиента OAuth из раскрывающегося списка.
- На следующей странице:
- Установите Тип приложения на Веб-приложение .
- В разделе «Авторизованные URI перенаправления» нажмите «ДОБАВИТЬ URI» . Добавьте полный путь к маршруту обратного вызова для вашего приложения. Например,
https://my.domain.com/auth-callback
илиhttps://localhost:5000/callback
. Этот маршрут будет создан и обработан позже в этом пошаговом руководстве. Вы можете изменить или добавить другие маршруты в любое время. - Нажмите СОЗДАТЬ .
- Затем откроется диалоговое окно с вашими новыми учётными данными. Выберите опцию «СКАЧАТЬ JSON» . Скопируйте загруженный JSON-файл в каталог вашего сервера.
Требования к знанию конкретного языка
Просмотрите файл README в каждом репозитории для получения наиболее актуального списка предварительных требований.
Питон
В нашем примере на 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 версии 16.13 или более поздней.
Установите необходимые модули узла с помощью npm
.
npm install
Ява
В нашем примере Java используется фреймворк Spring Boot . Вы можете скачать полный исходный код по предоставленным ссылкам .
Установите Java 11+ , если она еще не установлена на вашем компьютере.
Приложения Spring Boot могут использовать Gradle или Maven для сборки и управления зависимостями. Этот пример включает в себя оболочку Maven, которая обеспечивает успешную сборку без необходимости установки самого Maven.
В каталоге, куда вы загрузили или клонировали проект, выполните следующие команды, чтобы убедиться в наличии необходимых условий для запуска проекта.
java --version
./mvnw --version
Или в Windows:
java -version
mvnw.cmd --version
Понять файлы
В следующих разделах описывается структура примеров каталогов.
Имена каталогов
Каждый репозиторий содержит несколько каталогов, имена которых начинаются с цифры, например /01-basic-app/
. Номера соответствуют определённым этапам пошагового руководства. Каждый каталог содержит полнофункциональное веб-приложение, реализующее функции, описанные в данном пошаговом руководстве. Например, каталог /01-basic-app/
содержит финальную реализацию пошагового руководства по созданию дополнения .
Содержимое каталога
Содержимое каталога различается в зависимости от языка реализации:
Питон
Корневой каталог содержит следующие файлы:
-
main.py
— точка входа приложения Python. Укажите в этом файле конфигурацию сервера, которую хотите использовать, а затем запустите его для запуска сервера. -
requirements.txt
— модули Python, необходимые для работы веб-приложения. Их можно установить автоматически с помощьюpip install -r requirements.txt
. client_secret.json
— файл клиентского секрета, загруженный из Google Cloud. Обратите внимание, что он не входит в архив с примером; вам следует переименовать и скопировать загруженный файл с учётными данными в корневой каталог каждого каталога.
-
config.py
— параметры конфигурации сервера Flask.Каталог
webapp
содержит содержимое веб-приложения. Оно включает в себя следующее:Каталог
/templates/
с шаблонами Jinja для различных страниц.Каталог
/static/
с изображениями, CSS и вспомогательными файлами JavaScript.routes.py
- методы обработчика маршрутов веб-приложения.__init__.py
— инициализатор модуляwebapp
. Этот инициализатор запускает сервер Flask и загружает параметры конфигурации, заданные вconfig.py
.Дополнительные файлы, требуемые для конкретного шага пошагового руководства.
Node.js
Каждый шаг пошагового руководства находится в отдельной подпапке <step>
. Каждый шаг содержит:
- Статические файлы, такие как JavaScript, CSS и изображения, находятся в папке
./<step>/public
. - Маршрутизаторы Express находятся в папках
./<step>/routes
routes. - HTML-шаблоны находятся в папках
./<step>/views
views. - Серверное приложение —
./<step>/app.js
.
Ява
Каталог проекта включает в себя следующее:
- Каталог
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 и фабрике хранилищ данных. Подробнее о настройке этих хранилищ данных можно узнать в третьем пошаговом руководстве, посвящённом обработке повторных посещений . -
mvnw
иmvnw.cmd
— исполняемые файлы-обёртки Maven для Unix и Windows соответственно. Например, выполнение./mvnw --version
в Unix выводит версию Apache Maven, а также другую информацию. - Каталог
.mvn
содержит конфигурацию для оболочки Maven.
-
Запустить образец сервера
Чтобы протестировать сервер, вам необходимо его запустить. Следуйте этим инструкциям, чтобы запустить сервер-пример на выбранном вами языке:
Питон
Учетные данные OAuth
Создайте и загрузите учётные данные OAuth, как описано ранее . Поместите JSON-файл в корневой каталог вместе с файлом запуска сервера вашего приложения.
Настройте сервер
Существует несколько вариантов запуска веб-сервера. В конце файла Python добавьте один из следующих вариантов:
Незащищённый
localhost
. Обратите внимание, что это подходит только для непосредственного тестирования в окне браузера; незащищённые домены нельзя загрузить в iframe надстройки «Класс».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)
Защищённый
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)
Сервер 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
в корневой папке репозитория. Возможно, вам потребуется добавить эти ключи в цепочку ключей вашей ОС, чтобы браузер их принимал.
Убедитесь, что *.pem
находится в вашем файле .gitignore
, поскольку вы не хотите коммитить файл в git.
Запустить сервер
Вы можете запустить приложение с помощью следующей команды, заменив step01
на правильный шаг, который вы хотите запустить как сервер (например, step01
на 01-basic-app и step02
на 02-sign-in).
npm run step01
или
npm run step02
Это запустит веб-сервер по адресу https://localhost:5000
.
Вы можете завершить работу сервера, нажав Control + C
в терминале.
Ява
Настройте сервер
Чтобы запустить сервер по протоколу 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
.