Локальный сервис для тестирования и отладки HTTP-запросов, реализованный на OneScript с использованием фреймворка WINOW. Проект предоставляет функциональность, аналогичную httpbin.org, поддерживая большинство оригинальных эндпоинтов.
- 1. Установка
- 2. Использование
- 2.1. CLI приложение
- 2.2. Тестирование с asserts и 1connector
- 2.3. Swagger UI
- 3. Совместимость
- 4. Программный интерфейс
- 5. Пользовательские эндпоинты
- 6. Ограничения
- 7. Сравнение с httpbin.org
opm install httpbin
Запустите сервис с помощью команды:
httpbin run
Опция | Описание | Значение по умолчанию |
---|---|---|
-h , --host |
Имя хоста или IP-адрес сервиса | 127.0.0.1 |
-p , --port |
TCP-порт сервиса | 3333 |
--routes-handlers |
Путь к файлу или каталогу кастомных контроллеров |
Тестирование с asserts и 1connector
# test.os
#Использовать asserts
#Использовать 1connector
#Использовать httpbin
Перем HttpBin;
&Инициализация
Процедура ПередЗапускомТестов() Экспорт
HttpBin = Новый HttpBin();
HttpBin.Запустить();
КонецПроцедуры
&Завершение
Процедура ПослеЗапускаТестов() Экспорт
HttpBin.Остановить();
КонецПроцедуры
&Тест
Процедура ТестДолжен_ПроверитьПараметрыЗапроса() Экспорт
ПараметрыЗапроса = Новый Структура();
ПараметрыЗапроса.Вставить("key", "value");
Ответ = КоннекторHTTP.Get(HttpBin.URL("/get"), ПараметрыЗапроса);
Ожидаем.Что(Ответ.КодСостояния).Равно(200);
Ожидаем.Что(Ответ.Заголовки["Content-Type"]).Содержит("application/json");
Ожидаем.Что(Ответ.Json()["args"]["key"]).Равно("value");
КонецПроцедуры
На стартовой странице сервиса (по умолчанию: http://127.0.0.1:3333
) доступна интерактивная документация API через Swagger UI, а также возможность отправки запросов и получения ответов.
Сервис протестирован и поддерживается на следующих платформах и версиях OneScript:
ОС | OneScript 1.9 | OneScript 2.0 |
---|---|---|
Windows | ✅ | ✅ |
Linux | ✅ | ✅ |
MacOS | ✅ | ✅ |
Класс предназначен для управления локальным HTTP-сервисом. Реализован с использованием текучего интерфейса.
Новый HttpBin(<Хост>, <Порт>)
<Хост> (необязательный)
Тип: Строка.
IP-адрес или имя хоста.
По умолчанию: 127.0.0.1
<Порт> (необязательный)
Тип: Число.
Номер TCP-порта.
По умолчанию: 3333
Метод | Описание |
---|---|
Запустить() |
Запускает сервис в синхронном режиме с ожиданием полной готовности. |
ЗапуститьАсинх() |
Запускает сервис в асинхронном режиме без ожидания готовности. |
Остановить() |
Останавливает сервис. |
ОжидатьЗавершения() |
Ожидает завершения работы сервиса, приостанавливая выполнение текущего потока. |
Отвечает() |
Проверяет доступность сервиса через HTTP-запрос. |
Активен() |
Проверяет, что процесс сервиса запущен и не завершен. |
Порт() |
Возвращает номер TCP-порта, на котором работает сервис. |
УстановитьПорт(<Порт>) |
Устанавливает TCP-порт для запуска сервиса. |
Хост() |
Возвращает имя хоста или IP-адрес сервиса. |
УстановитьХост(<Хост>) |
Устанавливает имя хоста или IP-адрес для запуска сервиса. |
URL(<АдресРесурса>) |
Формирует полный URL-адрес сервиса с опциональным путем к ресурсу. |
ТаймаутЗапуска() |
Возвращает текущее значение таймаута запуска сервиса. |
УстановитьТаймаутЗапуска(<Таймаут>) |
Устанавливает максимальное время ожидания запуска сервиса. Применяется при синхронном запуске. |
РасположениеКонтроллеров() |
Возвращает текущий путь к файлу или каталогу с кастомными контроллерами. |
УстановитьРасположениеКонтроллеров(<Расположение>) |
Устанавливает путь к файлу или каталогу с кастомными контроллерами, определяющими точки маршрута сервиса. |
Сервис поддерживает подключение пользовательских контроллеров для добавления собственных эндпоинтов.
Контроллер реализуется в виде класса OneScript с аннотацией &Контроллер
.
В нём определяются точки маршрута (эндпоинты) с помощью аннотации &ТочкаМаршрута
.
Подробнее см. в документации WINOW.
Пример контроллера
&Контроллер("/order")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
&ТочкаМаршрута("add")
Процедура Главная(Ответ) Экспорт
// Бизнес-логика
КонецПроцедуры
Через программный интерфейс
Для подключения кастомных контроллеров используйте метод УстановитьРасположениеКонтроллеров()
, указав путь к файлу или каталогу с контроллерами:
HttpBin = Новый HttpBin()
.УстановитьРасположениеКонтроллеров("./path/to/routes")
.Запустить();
Через CLI
httpbin run --routes-handlers './path/to/routes-handlers'
- Отсутствие поддержки HTTPS: Сервис работает только по протоколу HTTP.
Эндпоинт | oscript-httpbin | httpbin.org |
---|---|---|
/ip |
✅ | ✅ |
/uuid |
✅ | ✅ |
/uuid/:n |
✅ | ❌ |
/user-agent |
✅ | ✅ |
/headers |
✅ | ✅ |
/get |
✅ | ✅ |
/post |
✅ | ✅ |
/put |
✅ | ✅ |
/patch |
✅ | ✅ |
/delete |
✅ | ✅ |
/anything |
✅ | ✅ |
/anything/:anything |
✅ | ✅ |
/base64/:value |
✅ | ✅ |
/encoding/utf8 |
✅ | ✅ |
/gzip |
✅ | ✅ |
/deflate |
✅ | ✅ |
/brotli |
✅ | ✅ |
/zstd |
✅ | ❌ |
/status/:code |
✅ | ✅ |
/response-headers?key=val |
✅ | ✅ |
/redirect/:n |
✅ | ✅ |
/redirect-to?url=foo |
✅ | ✅ |
/redirect-to?url=foo&status_code=307 |
✅ | ✅ |
/relative-redirect/:n |
✅ | ✅ |
/absolute-redirect/:n |
✅ | ✅ |
/cookies |
✅ | ✅ |
/cookies/set?name=value |
✅ | ✅ |
/cookies/set/:name/:value |
✅ | ✅ |
/cookies/delete?name |
✅ | ✅ |
/basic-auth/:user/:passwd |
✅ | ✅ |
/hidden-basic-auth/:user/:passwd |
✅ | ✅ |
/digest-auth/:qop/:user/:passwd/:algorithm |
❌ | ✅ |
/digest-auth/:qop/:user/:passwd |
❌ | ✅ |
/bearer |
✅ | ✅ |
/stream/:n |
❌ | ✅ |
/delay/:n |
✅ | ✅ |
/drip?numbytes=n&duration=s&delay=s&code=code |
❌ | ✅ |
/range/:n?duration=s&chunk_size=code |
❌ | ✅ |
/html |
✅ | ✅ |
/robots.txt |
✅ | ✅ |
/deny |
✅ | ✅ |
/cache |
✅ | ✅ |
/cache/:n |
✅ | ✅ |
/etag/:etag |
✅ | ✅ |
/bytes/:n |
✅ | ✅ |
/stream-bytes/:n |
❌ | ✅ |
/links/:n |
✅ | ✅ |
/links/:n/:offset |
✅ | ✅ |
/image |
✅ | ✅ |
/image/png |
✅ | ✅ |
/image/jpeg |
✅ | ✅ |
/image/webp |
✅ | ✅ |
/image/svg |
✅ | ✅ |
/forms/post |
✅ | ✅ |
/xml |
✅ | ✅ |
/json |
✅ | ✅ |