Локальный сервис для тестирования и отладки 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 | ✅ | ✅ |