Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
.vscode/*
coverage/*
out/*
oscript_modules/*
*.ospx
# OneScript
Components/
out/
oscript_modules/
*.ospx

# VS Code
.vscode/
163 changes: 110 additions & 53 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@
[![Release](https://img.shields.io/github/release/Stivo182/oscript-httpbin.svg)](https://github.com/Stivo182/oscript-httpbin/releases)
[![Тестирование](https://github.com/stivo182/oscript-httpbin/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/stivo182/oscript-httpbin/actions/workflows/test.yml)
[![Статус порога качества](https://sonar.openbsl.ru/api/project_badges/measure?project=httpbin&metric=alert_status&token=sqb_2f7c84743fd1b295085c25a1b96cc8d975cd4dc7)](https://sonar.openbsl.ru/dashboard?id=httpbin)
[![Покрытие](https://sonar.openbsl.ru/api/project_badges/measure?project=httpbin&metric=coverage&token=sqb_2f7c84743fd1b295085c25a1b96cc8d975cd4dc7)](https://sonar.openbsl.ru/dashboard?id=httpbin)

Cервис позволяющий локально тестировать HTTP клиент. Разработан на [OneScript](https://github.com/EvilBeaver/OneScript) + [WINOW](https://github.com/autumn-library/winow). Поддерживает бо́льшую часть эндпоинтов [httpbin.org](https://httpbin.org/).
Локальный сервис для тестирования и отладки HTTP-запросов, реализованный на [OneScript](https://github.com/EvilBeaver/OneScript) с использованием фреймворка [WINOW](https://github.com/autumn-library/winow).
Проект предоставляет функциональность, аналогичную [httpbin.org](https://httpbin.org/), поддерживая большинство оригинальных эндпоинтов.

* 1\. [Установка](#installation)
* 2\. [Использование](#usage)
* 2.1\. [CLI приложение](#cli-app)
* 2.2\. [Тестирование через asserts и 1connector](#testing)
* 2.2\. [Тестирование с asserts и 1connector](#testing)
* 2.3\. [Swagger UI](#swagger-ui)
* 3\. [Совместимость](#compatibility)
* 4\. [Программный интерфейс](#api)
* 5\. [Ограничения](#limitations)
* 6\. [Сравнение с httpbin.org](#comparison)
* 5\. [Пользовательские эндпоинты](#custom-endpoints)
* 6\. [Ограничения](#limitations)
* 7\. [Сравнение с httpbin.org](#comparison)

## Установка <a name="installation"></a>

Expand All @@ -27,16 +28,26 @@ opm install httpbin

### CLI приложение <a name="cli-app"></a>

Запуск сервиса через команду **run**: `httpbin run`
Запустите сервис с помощью команды:

Опции команды:</br>
`-h`, `--host` - имя хоста / IP адрес сервиса</br>
`-p`, `--port` - порт сервиса
``` bash
httpbin run
```

#### Опции команды:

| Опция | Описание | Значение по умолчанию |
| --- | --- | --- |
| `-h`, `--host` | Имя хоста или IP-адрес сервиса | `127.0.0.1` |
| `-p`, `--port` | TCP-порт сервиса | `3333` |
| `--routes-handlers` | Путь к файлу или каталогу кастомных контроллеров | |

### Тестирование с [asserts](https://github.com/oscript-library/asserts) и [1connector](https://github.com/vbondarevsky/1connector) <a name="testing"></a>

### Тестирование через [asserts](https://github.com/oscript-library/asserts) и [1connector](https://github.com/vbondarevsky/1connector) <a name="testing"></a>

_test.os:_
``` bsl
# test.os

#Использовать asserts
#Использовать 1connector
#Использовать httpbin
Expand All @@ -56,74 +67,120 @@ _test.os:_

&Тест
Процедура ТестДолжен_ПроверитьПараметрыЗапроса() Экспорт

ПараметрыЗапроса = Новый Структура();
ПараметрыЗапроса.Вставить("key", "value");

Ответ = КоннекторHTTP.Get(HttpBin.URL() + "/get", ПараметрыЗапроса);
Ответ = КоннекторHTTP.Get(HttpBin.URL("/get"), ПараметрыЗапроса);

Ожидаем.Что(Ответ.КодСостояния).Равно(200);
Ожидаем.Что(Ответ.Заголовки["Content-Type"]).Содержит("application/json");
Ожидаем.Что(Ответ.Json()["args"]["key"]).Равно("value");

КонецПроцедуры
```

### Swagger UI

На стартовой странице сервиса (адрес по умолчанию: `http://127.0.0.1:3334`) доступна визуальная документация API, а также возможность отправки запросов и получения ответов.
На стартовой странице сервиса (по умолчанию: `http://127.0.0.1:3333`) доступна интерактивная документация API через **Swagger UI**, а также возможность отправки запросов и получения ответов.

## Совместимость <a name="compatibility"></a>

<table>
<thead>
<tr>
<th colspan="2">Windows</th>
<th colspan="2">Linux</th>
<th colspan="2">MacOS</th>
</tr>
<tr>
<th>OneScript 1.9</th>
<th>OneScript 2.0</th>
<th>OneScript 1.9</th>
<th>OneScript 2.0</th>
<th>OneScript 1.9</th>
<th>OneScript 2.0</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
</tbody>
</table>
Сервис протестирован и поддерживается на следующих платформах и версиях OneScript:

| ОС | OneScript 1.9 | OneScript 2.0 |
| --- | --- | --- |
| **Windows** | ✅ | ✅ |
| **Linux** | ✅ | ✅ |
| **MacOS** | ✅ | ✅ |

## Программный интерфейс <a name="api"></a>

### Класс `HttpBin`

Сервис по умолчанию запускается по адресу `127.0.0.1:3334` в фоновом режиме и с ожиданием завершения запуска сервиса.</br>
Класс реализован с текучим интерфейсом.
Класс предназначен для управления локальным HTTP-сервисом.
Реализован с использованием текучего интерфейса.

#### Синтаксис

`Новый HttpBin(<Хост>, <Порт>)`

#### Параметры

<ins><Хост> (необязательный)</ins></br>
Тип: _Строка_.</br>
IP-адрес или имя хоста.</br>
По умолчанию: _127.0.0.1_

<ins><Порт> (необязательный)</ins></br>
Тип: _Число_.</br>
Номер TCP-порта.</br>
По умолчанию: _3333_

#### Методы

| Метод | Описание |
| --- | --- |
| `Запустить()` | Запускает сервис |
| `Остановить()` | Останавливает сервис |
| `URL()` | URL сервиса |
| `Хост()` | Хост сервиса |
| `Порт()` | Порт сервиса |
| `УстановитьХост(<Хост>)` | Устанавливает хост сервиса |
| `УстановитьПорт(<Порт>)` | Устанавливает порт сервиса |
| `ЗапускатьВФоне(<Флаг>)` | Запуск сервиса будет выполнен в фоновом режиме |
| `ОжидатьЗапуск(<Флаг>)` | Ожидать завершение запуска сервиса, запущенного в фоновом режиме |
| `УстановитьТаймаутОжидания(<Таймаут>)` | Устанавливает таймаут ожидания запуска сервиса, запущенного в фоновом режиме |
| `Запустить()` | Запускает сервис в синхронном режиме с ожиданием полной готовности. |
| `ЗапуститьАсинх()` | Запускает сервис в асинхронном режиме без ожидания готовности. |
| `Остановить()` | Останавливает сервис. |
| `ОжидатьЗавершения()` | Ожидает завершения работы сервиса, приостанавливая выполнение текущего потока. |
| `Отвечает()` | Проверяет доступность сервиса через HTTP-запрос. |
| `Активен()` | Проверяет, что процесс сервиса запущен и не завершен. |
| `Порт()` | Возвращает номер TCP-порта, на котором работает сервис. |
| `УстановитьПорт(<Порт>)` | Устанавливает TCP-порт для запуска сервиса. |
| `Хост()` | Возвращает имя хоста или IP-адрес сервиса. |
| `УстановитьХост(<Хост>)` | Устанавливает имя хоста или IP-адрес для запуска сервиса. |
| `URL(<АдресРесурса>)` | Формирует полный URL-адрес сервиса с опциональным путем к ресурсу. |
| `ТаймаутЗапуска()` | Возвращает текущее значение таймаута запуска сервиса. |
| `УстановитьТаймаутЗапуска(<Таймаут>)` | Устанавливает максимальное время ожидания запуска сервиса. Применяется при синхронном запуске. |
| `РасположениеКонтроллеров()` | Возвращает текущий путь к файлу или каталогу с кастомными контроллерами. |
| `УстановитьРасположениеКонтроллеров(<Расположение>)` | Устанавливает путь к файлу или каталогу с кастомными контроллерами, определяющими точки маршрута сервиса. |

## Пользовательские эндпоинты <a name="custom-endpoints"></a>

Сервис поддерживает подключение пользовательских контроллеров для добавления собственных эндпоинтов.

### Создание контроллера

Контроллер реализуется в виде класса OneScript с аннотацией `&Контроллер`.
В нём определяются точки маршрута (эндпоинты) с помощью аннотации `&ТочкаМаршрута`.
Подробнее см. в документации [WINOW](https://github.com/autumn-library/winow).

**Пример контроллера**

``` bsl
&Контроллер("/order")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ТочкаМаршрута("add")
Процедура Главная(Ответ) Экспорт
// Бизнес-логика
КонецПроцедуры
```

### Подключение контроллеров

**Через программный интерфейс**

Для подключения кастомных контроллеров используйте метод `УстановитьРасположениеКонтроллеров()`, указав путь к файлу или каталогу с контроллерами:

``` bsl
HttpBin = Новый HttpBin()
.УстановитьРасположениеКонтроллеров("./path/to/routes")
.Запустить();
```

**Через CLI**

``` bash
httpbin run --routes-handlers './path/to/routes-handlers'
```

## Ограничения <a name="limitations"></a>

На данный момент нет поддержки https.
- **Отсутствие поддержки HTTPS**: Сервис работает только по протоколу HTTP.

## Сравнение с httpbin.org <a name="comparison"></a>

Expand Down
5 changes: 0 additions & 5 deletions autumn-properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,5 @@
"КаталогиСФайлами": {
"/static": "./src/app/view/static"
}
},
"cli": {
"ИмяПриложения": "httpbin",
"ПолноеИмяПриложения": "Cервис тестирования HTTP клиента",
"ВерсияПриложения": "1.3.0"
}
}
3 changes: 0 additions & 3 deletions lib.config

This file was deleted.

13 changes: 8 additions & 5 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
Описание.Имя("httpbin")
.Версия("1.3.0")
.Версия("2.0.0")
.Автор("Dmitry Ivanov")
.АдресАвтора("https://github.com/Stivo182")
.Описание("Сервис тестирования HTTP клиента")
.АдресРепозитория("https://github.com/Stivo182/oscript-httpbin")
.Описание("Сервис для тестирования и отладки HTTP-запросов")
.ВерсияСреды("1.9.2")
.ВключитьФайл("src")
.ВключитьФайл("tests")
.ВключитьФайл("packagedef")
.ВключитьФайл("lib.config")
.ВключитьФайл("autumn-properties.json")
.ВключитьФайл("appsettings.json")
.ВключитьФайл("README.md")
.ВключитьФайл("LICENSE")
.ЗависитОт("autumn", "4.3.11")
.ЗависитОт("autumn-cli", "1.2.0")
.ЗависитОт("winow", "0.11.0")
.ЗависитОт("compressor", "1.0.2")
.ЗависитОт("1connector", "2.3.3")
.ЗависитОт("packageinfo", "1.1.1")
.ЗависитОт("fs", "1.2.0")
.ЗависитОт("logos", "1.7.1")
.РазработкаЗависитОт("1testrunner")
.РазработкаЗависитОт("asserts")
.РазработкаЗависитОт("coverage")
.РазработкаЗависитОт("1commands")
.РазработкаЗависитОт("fs")
.РазработкаЗависитОт("jason")
.ОпределяетКласс("HttpBin", "src/core/Классы/HttpBin.os")
.ИсполняемыйФайл("src/cmd/main.os", "httpbin")
Loading