Поиск публикаций
Веб
Содержание
Создание приложения
веб.создать()
Создаёт экземпляр веб-приложения, к которому можно добавлять маршруты.
₽app = веб.создать();
Регистрация маршрутов
Приложение предоставляет методы для регистрации обработчиков на различные HTTP-методы и пути. Пути могут содержать именованные параметры (синтаксис :имя).
app.получить(путь, обработчик)
Регистрирует обработчик для GET-запросов по указанному пути.
₽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.закрыть(); лог("Сервер остановлен"); }