Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

Веб

 Создание приложения

веб.создать()

Создаёт экземпляр веб-приложения, к которому можно добавлять маршруты.

Возвращает: объект приложения
Пример:
₽app = веб.создать();

 Регистрация маршрутов

Приложение предоставляет методы для регистрации обработчиков на различные HTTP-методы и пути. Пути могут содержать именованные параметры (синтаксис :имя).

app.получить(путь, обработчик)

Регистрирует обработчик для GET-запросов по указанному пути.

ПараметрТипОписание
путьстрокаURL-путь (может содержать параметры :имя)
обработчикфункцияФункция, принимающая объект запроса и возвращающая объект ответа
Пример:
₽app.получить("/user/:id", функция(₽req) {
    ₽id = ₽req.параметры.id;
    возврат { "тело": "Пользователь " + ₽id };
});

app.отправить(путь, обработчик)

Регистрирует обработчик для POST-запросов.

Пример из теста:
₽app.отправить("/api/data", функция(₽req) {
    ₽data = ₽req.тело;
    возврат { "статус": 201, "тело": { "получено": ₽data } };
});

app.заменить(путь, обработчик)

Регистрирует обработчик для PUT-запросов.

Пример:
₽app.заменить("/api/data/:id", функция(₽req) {
    ₽id = ₽req.параметры.id;
    возврат { "тело": { "id": ₽id, "обновлено": ₽req.тело } };
});

app.удалить(путь, обработчик)

Регистрирует обработчик для DELETE-запросов.

Пример:
₽app.удалить("/api/data/:id", функция(₽req) {
    возврат { "тело": { "удалено": истина, "id": ₽req.параметры.id } };
});

 Запуск сервера

app.слушать(порт, колбэк)

Запускает HTTP-сервер на указанном порту. Колбэк получает один аргумент — логическое значение успех (истина, если запуск удался).

ПараметрТипОписание
портчислоНомер порта
колбэкфункцияВызывается после попытки запуска
Пример:
₽app.слушать(8080, функция(₽ok) {
    если (₽ok) { лог("Сервер запущен"); }
    иначе { лог("Ошибка"); }
});

Для остановки сервера можно использовать встроенное поле __сервер приложения:

₽app.__сервер.закрыть();

 Объект запроса

В обработчик передаётся объект ₽req со следующей структурой:

  • параметры — объект с именованными параметрами пути (например, ₽req.параметры.id).
  • тело — тело запроса (для POST/PUT). Если тело — JSON, оно автоматически разбирается в объект.
  • заголовки — объект с заголовками запроса (доступ по ключу).
  • url — строка полного URL.
  • метод — HTTP-метод (GET, POST, и т.д.).
Примечание: Параметры пути извлекаются автоматически и становятся доступны через ₽req.параметры.

 Объект ответа

Обработчик должен вернуть объект со следующими необязательными полями:

  • статус — число, HTTP-статус (по умолчанию 200).
  • заголовки — объект с заголовками ответа (например, { "Content-Type": "application/json" }).
  • тело — строка, объект или массив. Если тело — объект/массив, автоматически преобразуется в JSON и устанавливается заголовок Content-Type: application/json, если не указан иначе.
Пример ответа:
возврат {
    "статус": 201,
    "заголовки": { "Content-Type": "application/json" },
    "тело": { "успех": истина }
};

 Параметры пути

В пути можно использовать параметры, обозначаемые двоеточием перед именем: /user/:id. В обработчике значение будет доступно как ₽req.параметры.id. Параметры могут быть нескольких видов, например /api/:version/resource/:id.

Пример с двумя параметрами:
₽app.получить("/post/:год/:месяц", функция(₽req) {
    ₽год = ₽req.параметры.год;
    ₽месяц = ₽req.параметры.месяц;
    возврат { "тело": "Архив за " + ₽год + "-" + ₽месяц };
});

 Полный пример

Ниже приведён полный скрипт из теста, демонстрирующий все возможности модуля «веб».

// ============================================================
// Тест модуля веб (синтаксис WDSP)
// ============================================================

функция лог(₽сообщение) {
    вывод("[Web Тест] " + строка(₽сообщение) + "\n");
}

₽app = веб.создать();

₽app.получить("/", функция(₽req) {
    возврат {
        "статус": 200,
        "заголовки": { "Content-Type": "text/plain" },
        "тело": "WDSP веб-сервер работает!"
    };
});

₽app.получить("/user/:id", функция(₽req) {
    ₽id = ₽req.параметры.id;
    возврат {
        "статус": 200,
        "заголовки": { "Content-Type": "application/json" },
        "тело": { "id": ₽id, "имя": "Пользователь " + ₽id }
    };
});

₽app.отправить("/api/data", функция(₽req) {
    ₽data = ₽req.тело;
    возврат {
        "статус": 201,
        "заголовки": { "Content-Type": "application/json" },
        "тело": { "получено": ₽data, "успех": истина }
    };
});

₽app.заменить("/api/data/:id", функция(₽req) {
    ₽id = ₽req.параметры.id;
    ₽data = ₽req.тело;
    возврат {
        "статус": 200,
        "тело": { "id": ₽id, "обновлено": ₽data }
    };
});

₽app.удалить("/api/data/:id", функция(₽req) {
    ₽id = ₽req.параметры.id;
    возврат {
        "статус": 200,
        "тело": { "удалено": истина, "id": ₽id }
    };
});

₽порт = 3456;
₽app.слушать(₽порт, функция(₽ok) {
    если (₽ok) {
        лог("Сервер запущен на порту " + строка(₽порт));
    } иначе {
        лог("Ошибка запуска сервера");
    }
});

пауза(1000);

лог("=== Начало тестирования ===");

// Примеры HTTP-запросов смотрите в полном тесте выше

// Остановка сервера
₽server = ₽app.__сервер;
если (₽server != ничто) {
    ₽server.закрыть();
    лог("Сервер остановлен");
}