Proxy Mock — это мощный и гибкий инструмент, сочетающий функции прокси-сервера и мок-сервера. Он позволяет эмулировать заранее настроенные API-эндпоинты, что делает его идеальным для тестирования и разработки интеграций.
-
Проксирование запросов:
Перенаправляйте запросы на указанный хост. Это позволяет интегрировать ваш сервис с реальными или тестовыми API, что удобно для отладки и проверки взаимодействий между системами. -
Мокирование эндпоинтов:
Настраивайте и эмулируйте ответы для различных API с легкостью. Создавайте фиктивные ответы для специфичных эндпоинтов, что позволяет тестировать взаимодействие вашего приложения без необходимости обращаться к реальным сервисам. -
Хранение данных о входящих запросах:
Сохраняйте информацию о всех входящих запросах для последующего анализа. Это позволяет отслеживать и управлять запросами, а также диагностировать проблемы в случае необходимости. -
Легкость интеграции:
Удобное взаимодействие с другими сервисами через API. Ваш прокси-сервис может быть легко интегрирован в существующие системы, обеспечивая гибкость и расширяемость.
Убедитесь, что на вашем компьютере установлены следующие компоненты:
- Python >= 3.9
- Poetry ~ 1.8.x
Следуйте этим шагам, чтобы быстро развернуть проект в локальной среде разработки:
-
Установка зависимостей:
Установите виртуальное окружение и все необходимые зависимости:
poetry install --no-root
-
Активация виртуального окружения:
Активируйте ранее созданное виртуальное окружение:
poetry shell
-
Запуск сервиса:
Используйте Makefile для запуска сервиса:
sudo apt install make make run
Для быстрого развертывания сервиса в изолированном окружении используйте Docker.
-
Сборка Docker-образа:
Чтобы собрать Docker-образ и запустить сервис, выполните следующую команду:
make docker_run
-
Доступ к сервису:
После успешного запуска сервис будет доступен по адресу:
http://localhost:5000
Proxy Mock предоставляет простой и интуитивно понятный API для взаимодействия с сервером и управления конфигурациями мок-запросов.
Этот эндпоинт используется для проверки текущего состояния сервера и его доступности. Также он возвращает информацию о версии сервера.
- URL:
/status
- Метод:
GET
- Успешный ответ:
-
Код ответа:
200 OK
-
Тип контента:
application/json
-
Тело ответа:
{ "success": true, "version": "1.0.0" // Версия сервера }
-
Описание полей:
success
:boolean
Параметр, указывающий на успешное выполнение запроса. Значение всегдаtrue
, если сервер доступен.version
:string
Версия текущего сервера. Может быть полезна для определения актуальности сервера и его компонентов.
-
Этот эндпоинт используется для настройки мок-запросов в прокси-моке. Можно указать путь, данные мока, дополнительную информацию, проксирующий хост и таймаут.
- URL:
/configure_mock
- Метод:
POST
- Тип контента:
application/json
- JSON:
path
(обязательный) —string
:
Путь, по которому будет применен мок-запрос.mock_data
—dict
:
Данные мок-ответа:body
—string | dict | list
:
Тело ответа, которое будет возвращено при совпадении пути.status_code
—integer
:
Код состояния ответа.headers
—dict
:
Заголовки ответа.
extra_info
—dict
(опционально):
Дополнительная информация о мок-запросе.proxy_host
—string
(опционально):
URL проксирующего хоста, на который будет перенаправлен запрос.timeout
—float
(опционально):
Время задержки перед отправкой ответа, в секундах.
{
"path": "/test/endpoint",
"mock_data": {
"body": {
"message": "Hello, World!"
},
"status_code": 200,
"headers": {
"Content-Type": "application/json"
}
},
"extra_info": {
"service": "example_service"
},
"proxy_host": "http://example.com",
"timeout": 1.5
}
-
Успешный ответ:
- Код ответа:
200 OK
- Тип контента:
application/json
- Тело ответа:
{ "data": {}, // Записанные данные "path": "test/endpoint", "success": true }
- Код ответа:
-
Неуспешный ответ:
- Код ответа:
400 BAD REQUEST
- Тип контента:
application/json
- Тело ответа:
{ "success": false, "error": "Parameter 'path' is always required" }
- Код ответа:
-
Примечание: В случае ошибки, возвращается сообщение, описывающее проблему с запросом, например, отсутствие обязательного параметра
path
.
Этот эндпоинт используется для настройки мок-запросов, когда данные передаются в виде бинарного содержимого. Внутри бинарного содержимого должен находиться словарь с конфигурацией мока.
- URL:
/configure_mock/binary
- Метод:
POST
- Тип контента:
binary/app
-
BYTES:
Бинарные данные должны содержать JSON-словарь с конфигурацией мока:-
path
(обязательный) —string
:
Путь, по которому будет применен мок-запрос. -
mock_data
—dict
:
Данные мок-ответа:body
—bytes
:
Тело ответа, которое будет возвращено при совпадении пути.status_code
—integer
:
Код состояния ответа.headers
—dict
:
Заголовки ответа.
-
extra_info
—dict
(опционально):
Дополнительная информация о мок-запросе. -
proxy_host
—string
(опционально):
URL проксирующего хоста, на который будет перенаправлен запрос. -
timeout
—float
(опционально):
Время задержки перед отправкой ответа, в секундах.
-
Бинарные данные запроса должны содержать следующий словарь:
{
"path": "/test/endpoint",
"mock_data": {
"body": {
"message": "byte data"
},
"status_code": 200,
"headers": {
"Content-Type": "application/json"
}
},
"extra_info": {
"service": "example_service"
},
"proxy_host": "http://example.com",
"timeout": 1.5
}
-
Успешный ответ:
- Код ответа:
200 OK
- Тип контента:
application/json
- Тело ответа:
{ "data": {}, // Записанные данные "path": "/test/endpoint", "success": true }
- Код ответа:
-
Неуспешный ответ:
- Код ответа:
400 BAD REQUEST
- Тип контента:
application/json
- Тело ответа:
{ "success": false, "error": "Parameter 'path' is always required" }
- Код ответа:
-
Примечание: В случае ошибки, возвращается сообщение, описывающее проблему с запросом, например, отсутствие обязательного параметра
path
.
Этот эндпоинт очищает хранилище параметров запросов. Можно указать параметр service
для фильтрации очистки по конкретному сервису.
- URL:
/traffic/clean
- Метод:
POST
- Успешный ответ:
- Код ответа:
200 OK
- Тип контента:
application/json
- Тело ответа:
{ "data": [], "success": true }
- Код ответа:
Этот эндпоинт очищает хранилище моков. Можно указать параметр path
для фильтрации очистки по конкретному пути.
- URL:
/storage/clean
- Метод:
POST
- Query-параметры:
path
(опциональный) —str
:
Если указан, будет очищено только хранилище моков для указанного пути.
-
Успешный ответ:
- Код ответа:
200 OK
- Тип контента:
application/json
- Тело ответа:
{ "data": {}, "success": true }
- Код ответа:
-
Примечание: В случае ошибки (например, если указанный путь не найден), возвращается ошибка
"success": false
.
Этот эндпоинт возвращает текущие сконфигурированные моки, хранящиеся в системе. Можно использовать параметр path
, чтобы отфильтровать моки по определенному пути.
- URL:
/storage
- Метод:
GET
- Query-параметры:
path
(опциональный) —str
:
Фильтрует результаты по указанному пути. Если параметр не указан, будут возвращены все моки.
-
Успешный ответ:
- Код ответа:
200 OK
- Тип контента:
application/json
- Тело ответа:
{ "data": {}, // Объект с данными моков для указанного пути или всех моков "success": true }
- Код ответа:
-
Примечание: В поле
data
будет представлен JSON-объект со всеми мока, соответствующими указанному пути или все моки, если путь не задан.
Этот эндпоинт возвращает информацию о всех запросах, поступивших в систему. Это может включать данные о запросах для анализа или отладки.
- URL:
/traffic
- Метод:
GET
-
Успешный ответ:
- Код ответа:
200 OK
- Тип контента:
application/json
- Тело ответа:
{ "data": [], // Массив объектов с данными о запросах "success": true }
- Код ответа:
-
Примечание: В поле
data
будет представлен массив объектов, содержащих информацию о каждом запросе, который был перехвачен и сохранен системой.
Этот эндпоинт обрабатывает все запросы, поступающие на прокси-мок, вне зависимости от их пути. После перехвата запросов, сервер проверяет, существует ли заранее сконфигурированный ответ для данного пути.
- GET
- POST
- PUT
- DELETE
- PATCH
- HEAD
- OPTIONS
-
Если заранее сконфигурированный ответ найден:
-
Задержка ответа (таймаут):
Если для данного запроса был настроен таймаут, сервер выполнит задержку перед отправкой ответа. Задержка будет соответствовать указанному времени ожидания (в секундах). -
Заголовки ответа:
Если для данного запроса были заранее сохранены заголовки, они будут отправлены вместе с ответом. -
Ответ без проксирования:
Если проксирующий хост не указан, сервер вернет заранее подготовленный ответ:- Код ответа: Заранее подготовленный код ответа (например,
200
). - Тело ответа: Заранее подготовленные данные ответа, такие как JSON-объект или HTML-страница.
- Код ответа: Заранее подготовленный код ответа (например,
-
Ответ с проксированием на внешний хост:
Если для данного запроса указан проксирующий хост, запрос будет перенаправлен на внешний сервис. Клиент получит ответ от этого внешнего хоста:- Код ответа: Код состояния ответа от внешнего хоста (например,
200
,404
,500
). - Тело ответа: Содержимое тела ответа, полученное от внешнего хоста.
- Код ответа: Код состояния ответа от внешнего хоста (например,
-
-
Если заранее сконфигурированный ответ не найден:
Если для запроса не был настроен мок-ответ, возвращается ошибка:
- Код ответа:
404 NOT FOUND
- Тип контента:
application/json
- Тело ответа:
{ "error": "Не найден мок /mock_path" }
- Код ответа: