Прохождения

Эта серия пошаговых инструкций иллюстрирует все этапы создания работающего дополнения для 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 добавьте один из следующих вариантов:

  1. Незащищённый 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)
    
  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 в корневой папке репозитория. Возможно, вам потребуется добавить эти ключи в цепочку ключей вашей ОС, чтобы браузер их принимал.

Убедитесь, что *.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 .