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