Что такое Google Apps Script и для чего он нужен
Google Apps Script (GAS) — это облачная платформа для разработки, позволяющая автоматизировать задачи и расширять функциональность Google Workspace (таких как Google Sheets, Docs, Forms, Drive и других). GAS использует JavaScript и предоставляет доступ к множеству API Google, что позволяет создавать мощные веб-приложения, скрипты для автоматизации бизнес-процессов и многое другое.
Обзор функции doGet: ее роль и предназначение
Функция doGet(e) в Google Apps Script играет ключевую роль в создании веб-приложений, доступных через HTTP-запросы. Она вызывается, когда пользователь или другая система отправляет GET-запрос к развернутому веб-приложению GAS. Это основной способ для вашего скрипта принимать данные через URL.
Значение параметров в функции doGet
Параметры, передаваемые через URL в GET-запросах, позволяют динамически управлять поведением вашего веб-приложения. Они позволяют передавать данные, необходимые для выполнения определенных действий или отображения конкретного контента. Например, можно передать ID товара для отображения информации о нем или критерии фильтрации для данных в Google Sheets.
Как работает doGet: передача и получение параметров
Механизм передачи параметров через URL
Параметры в URL передаются в формате ?key1=value1&key2=value2&.... Каждый параметр состоит из ключа (key) и значения (value), разделенных знаком равенства (=). Параметры разделяются между собой амперсандом (&). Пример: https://script.google.com/macros/s/.../exec?name=John&age=30.
Объект `e` (Event Object) и его свойства
Функция doGet(e) принимает один аргумент — объект события (e), содержащий информацию о запросе. Этот объект предоставляет доступ к различным данным, включая параметры, переданные через URL.
Доступ к параметрам через `e.parameter` и `e.parameters`
e.parameter: Объект, содержащий параметры запроса. Для доступа к конкретному параметру используется запись e.parameter.ключ. Если указанный ключ отсутствует, возвращается undefined.
e.parameters: Объект, содержащий все параметры запроса в виде массива значений для каждого ключа. Это полезно, если один и тот же ключ передается несколько раз. Например, если URL выглядит так: ?fruit=apple&fruit=banana, то e.parameters.fruit будет массивом ['apple', 'banana'].
Пример кода:
/**
* @param {GoogleAppsScript.Events.DoGet} e Событие GET запроса.
* @return {HtmlOutput} HTML вывод.
*/
function doGet(e: GoogleAppsScript.Events.DoGet): HtmlOutput {
// Получаем параметры
const name: string | undefined = e.parameter.name;
const age: string | undefined = e.parameter.age;
// Создаем HTML ответ
let htmlOutput: string = "";
if (name && age) {
htmlOutput = `Привет, ${name}! Тебе ${age} лет.`
} else {
htmlOutput = "Пожалуйста, передайте параметры name и age.";
}
return HtmlService.createHtmlOutput(htmlOutput);
}Практическое использование параметров doGet
Пример: передача данных из формы в Google Apps Script
Предположим, у вас есть HTML-форма на вашем веб-сайте, которая отправляет данные в Google Apps Script. В форме есть поля product_id и quantity. После отправки формы данные передаются в GAS через GET-запрос.
HTML-форма:
Google Apps Script:
/**
* @param {GoogleAppsScript.Events.DoGet} e Событие GET запроса.
* @return {HtmlOutput} HTML вывод.
*/
function doGet(e: GoogleAppsScript.Events.DoGet): HtmlOutput {
const productId: string | undefined = e.parameter.product_id;
const quantity: string | undefined = e.parameter.quantity;
if (productId && quantity) {
// Обработка данных, например, запись в Google Sheets
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
sheet.appendRow([productId, quantity, new Date()]);
return HtmlService.createHtmlOutput("Данные успешно записаны в таблицу!");
} else {
return HtmlService.createHtmlOutput("Необходимо передать product_id и quantity.");
}
}Пример: создание веб-приложения, принимающего параметры для динамического контента
Предположим, вы хотите создать веб-приложение, которое отображает разные приветствия в зависимости от имени пользователя, переданного через параметр URL.
/**
* @param {GoogleAppsScript.Events.DoGet} e Событие GET запроса.
* @return {HtmlOutput} HTML вывод.
*/
function doGet(e: GoogleAppsScript.Events.DoGet): HtmlOutput {
const userName: string | undefined = e.parameter.user;
let greeting: string;
if (userName) {
greeting = `Привет, ${userName}!
`;
} else {
greeting = `Привет, Гость!
`;
}
return HtmlService.createHtmlOutput(greeting);
}Обработка ошибок и валидация параметров
Всегда проверяйте наличие и корректность параметров, переданных через URL. Это помогает предотвратить ошибки и повысить безопасность вашего приложения.
/**
* @param {GoogleAppsScript.Events.DoGet} e Событие GET запроса.
* @return {HtmlOutput} HTML вывод.
*/
function doGet(e: GoogleAppsScript.Events.DoGet): HtmlOutput {
const productId: string | undefined = e.parameter.product_id;
const quantityStr: string | undefined = e.parameter.quantity;
// Проверяем, что параметры присутствуют
if (!productId || !quantityStr) {
return HtmlService.createHtmlOutput("Ошибка: Не переданы product_id и quantity.");
}
// Преобразуем quantity в число и проверяем корректность
const quantity: number = Number(quantityStr);
if (isNaN(quantity) || quantity <= 0) {
return HtmlService.createHtmlOutput("Ошибка: Quantity должно быть положительным числом.");
}
// Здесь можно безопасно использовать productId и quantity
return HtmlService.createHtmlOutput(`Product ID: ${productId}, Quantity: ${quantity}`);
}Безопасность и лучшие практики при работе с doGet параметрами
Валидация и очистка входящих данных
Валидация и очистка входящих данных — обязательный шаг для обеспечения безопасности вашего веб-приложения. Убедитесь, что данные соответствуют ожидаемому формату и не содержат вредоносного кода.
Предотвращение атак путем инъекций (SQL, XSS и др.)
Особенно важно избегать использования параметров непосредственно в SQL-запросах (если вы используете базы данных) или при формировании HTML-кода, чтобы предотвратить SQL-инъекции и XSS-атаки. Используйте параметризованные запросы и функции экранирования HTML.
Использование HTTPS для защиты передаваемых данных
Всегда используйте HTTPS для обеспечения шифрования данных, передаваемых между клиентом и сервером. Google Apps Script автоматически использует HTTPS для всех веб-приложений.
Расширенные сценарии и альтернативы doGet
Использование doPost для передачи больших объемов данных
Если вам нужно передавать большие объемы данных, используйте метод doPost(e) вместо doGet(e). doPost передает данные в теле запроса, а не в URL, что позволяет избежать ограничений на длину URL.
Сравнение doGet и doPost: когда какой метод использовать
doGet: Используйте для небольших объемов данных, когда данные можно безопасно передать через URL, и когда важна возможность кэширования запроса.
doPost: Используйте для больших объемов данных, для конфиденциальной информации (например, паролей) и когда необходимо изменить состояние сервера (например, создать новую запись в базе данных).
Примеры интеграции doGet с другими сервисами Google (Sheets, Docs и др.)
Вы можете использовать doGet для интеграции с другими сервисами Google. Например, можно создать веб-приложение, которое принимает параметры через URL и записывает данные в Google Sheets, генерирует документы в Google Docs на основе переданных параметров или отправляет электронные письма через Gmail API.
Пример записи данных в Google Sheets:
/**
* @param {GoogleAppsScript.Events.DoGet} e Событие GET запроса.
* @return {HtmlOutput} HTML вывод.
*/
function doGet(e: GoogleAppsScript.Events.DoGet): HtmlOutput {
const value1: string | undefined = e.parameter.value1;
const value2: string | undefined = e.parameter.value2;
if (value1 && value2) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
sheet.appendRow([value1, value2, new Date()]);
return HtmlService.createHtmlOutput("Данные записаны в Google Sheets");
} else {
return HtmlService.createHtmlOutput("Необходимо передать value1 и value2");
}
}