Что такое параметры doGet в Google Apps Script и как их использовать?

Что такое 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");
  }
}

Добавить комментарий