Документация Справочник API

Справочник API

Полный справочник REST API для Mockarty. Базовый URL: http://localhost:5770 (по умолчанию).

Все тела запросов/ответов используют Content-Type: application/json, если не указано иное.

URL-адреса в примерах: Все примеры используют localhost:5770 как адрес по умолчанию. Если ваш Mockarty развёрнут на удалённом сервере (например, https://mockarty.company.com или http://192.168.1.50:5770), замените localhost:5770 на реальный адрес. SDK принимают базовый URL в конструкторе клиента, так что его достаточно указать один раз. Подробнее — в Быстром старте.

Совет: Все примеры ниже доступны на нескольких языках. Используйте вкладки для переключения между cURL, CLI и SDK-клиентами. Подробнее об установке и использовании SDK — в Руководстве по SDK. Документация CLI — в Руководстве по CLI.

Hello World: Первый мок за 30 секунд

Создайте мок и вызовите его – две команды, никакой конфигурации:

cURL

# 1. Создаём мок
curl -X POST http://localhost:5770/api/v1/mocks \
  -H "Content-Type: application/json" \
  -d '{
    "id": "hello-world",
    "namespace": "sandbox",
    "http": {
      "route": "/api/greeting",
      "httpMethod": "GET"
    },
    "response": {
      "statusCode": 200,
      "payload": {
        "message": "Hello, World!",
        "timestamp": "$.fake.DateTimeISO"
      }
    }
  }'

# 2. Вызываем мок (namespace — часть URL)
curl http://localhost:5770/stubs/sandbox/api/greeting
# Возвращает: {"message": "Hello, World!", "timestamp": "2026-03-22T10:30:00Z"}

CLI

# Установка: https://github.com/mockarty/releases

# 1. Создаём мок (пространство имён по умолчанию "sandbox")
mockarty-cli mock create \
  --id hello-world \
  --route /api/greeting \
  --method GET \
  --status 200 \
  --body '{"message": "Hello, World!", "timestamp": "$.fake.DateTimeISO"}'

# 2. Вызываем мок — namespace всегда часть URL
curl http://localhost:5770/stubs/sandbox/api/greeting

Go

// go get github.com/mockarty/mockarty-go

package main

import (
	"context"
	"fmt"
	"github.com/mockarty/mockarty-go"
)

func main() {
	// Пространство имён по умолчанию "sandbox"
	client := mockarty.NewClient("http://localhost:5770",
		mockarty.WithAPIKey("mk_YOUR_TOKEN"),
	)

	mock := mockarty.NewMockBuilder().
		ID("hello-world").
		HTTP(func(h *mockarty.HTTPBuilder) {
			h.Route("/api/greeting").Method("GET")
		}).
		Response(func(r *mockarty.ResponseBuilder) {
			r.Status(200).JSONBody(map[string]any{
				"message":   "Hello, World!",
				"timestamp": "$.fake.DateTimeISO",
			})
		}).
		Build()

	resp, err := client.Mocks().Create(context.Background(), mock)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Создан: %s (перезаписан: %v)\n", resp.Mock.ID, resp.Overwritten)
}

Python

# pip install mockarty

from mockarty import MockartyClient
from mockarty.builders import MockBuilder

# Пространство имён по умолчанию "sandbox"
client = MockartyClient(
    base_url="http://localhost:5770",
    api_key="mk_YOUR_TOKEN",
)

mock = (
    MockBuilder.http("/api/greeting", "GET")
    .id("hello-world")
    .respond(200, body={
        "message": "Hello, World!",
        "timestamp": "$.fake.DateTimeISO",
    })
    .build()
)

result = client.mocks.create(mock)
print(f"Создан: {result.mock.id}, перезаписан: {result.overwritten}")

Java

// Gradle: implementation "ru.mockarty:mockarty-java:1.0.0"

import ru.mockarty.MockartyClient;
import ru.mockarty.builder.MockBuilder;
import ru.mockarty.model.Mock;
import ru.mockarty.model.SaveMockResponse;
import java.util.Map;

// Пространство имён по умолчанию "sandbox"
try (MockartyClient client = MockartyClient.builder()
        .baseUrl("http://localhost:5770")
        .apiKey("mk_YOUR_TOKEN")
        .build()) {

    Mock mock = MockBuilder.http("/api/greeting", "GET")
        .id("hello-world")
        .respond(200, Map.of(
            "message", "Hello, World!",
            "timestamp", "$.fake.DateTimeISO"
        ))
        .build();

    SaveMockResponse resp = client.mocks().create(mock);
    System.out.println("Создан: " + resp.getMock().getId());
}

Kotlin

// Gradle: implementation("ru.mockarty:mockarty-kotlin:1.0.0")

import ru.mockarty.MockartyClient
import ru.mockarty.dsl.createMock

// Пространство имён по умолчанию "sandbox"
val client = MockartyClient.builder()
    .baseUrl("http://localhost:5770")
    .apiKey("mk_YOUR_TOKEN")
    .build()

client.createMock {
    id = "hello-world"
    http {
        route = "/api/greeting"
        method = "GET"
    }
    respond {
        statusCode = 200
        body = mapOf(
            "message" to "Hello, World!",
            "timestamp" to "$.fake.DateTimeISO"
        )
    }
}

Как это работает: Вы определяете мок через POST /api/v1/mocks, затем Mockarty обслуживает его по адресу /stubs/<ваш-маршрут>. Префикс /stubs указывает Mockarty разрешить мок, а не обращаться к API управления. Динамические значения вроде $.fake.DateTimeISO подставляются в момент формирования ответа.

Конструктор — заполненная форма


Содержание

  1. Аутентификация
  2. API управления моками (публичный)
  3. API пространств имён
  4. API хранилищ
  5. API шаблонов
  6. Руководство по CI/CD интеграции
  7. API тестирования API
  8. API нагрузочного тестирования
  9. API фаззинга
  10. API рекордера
  11. API контрактного тестирования
  12. API Chaos Engineering
  13. API администрирования
  14. Утилиты
  15. Прокси-эндпоинты протоколов

1. Аутентификация

Mockarty использует два механизма аутентификации: API-токены для программного доступа и сессионные куки для Web UI.

API-токены

Создавайте токены в Web UI (Настройки > API-токены) или через POST /api/v1/auth/tokens.

Передавайте токен в запросах через заголовок:

cURL

# Заголовок X-API-Key (пространство "sandbox" по умолчанию)
curl -H "X-API-Key: mk_YOUR_TOKEN" http://localhost:5770/api/v1/mocks

# Заголовок Authorization: Bearer
curl -H "Authorization: Bearer mk_YOUR_TOKEN" http://localhost:5770/api/v1/mocks

CLI

# Настройка токена глобально (сохраняется в ~/.mockarty-cli/config.yaml)
mockarty-cli config set token mk_YOUR_TOKEN
mockarty-cli config set namespace sandbox

# Или передать для конкретной команды
mockarty-cli mock list --token mk_YOUR_TOKEN

Go

// Токен задаётся через опцию WithAPIKey; пространство по умолчанию "sandbox"
client := mockarty.NewClient("http://localhost:5770",
    mockarty.WithAPIKey("mk_YOUR_TOKEN"),
    mockarty.WithNamespace("sandbox"), // необязательно, "sandbox" по умолчанию
)

Python

# Токен задаётся через параметр api_key; пространство по умолчанию "sandbox"
client = MockartyClient(
    base_url="http://localhost:5770",
    api_key="mk_YOUR_TOKEN",
    namespace="sandbox",  # необязательно, "sandbox" по умолчанию
)

Java

// Токен задаётся через apiKey; пространство по умолчанию "sandbox"
MockartyClient client = MockartyClient.builder()
    .baseUrl("http://localhost:5770")
    .apiKey("mk_YOUR_TOKEN")
    .namespace("sandbox")  // необязательно, "sandbox" по умолчанию
    .build();

Kotlin

// Токен задаётся через apiKey; пространство по умолчанию "sandbox"
val client = MockartyClient.builder()
    .baseUrl("http://localhost:5770")
    .apiKey("mk_YOUR_TOKEN")
    .namespace("sandbox")  // необязательно, "sandbox" по умолчанию
    .build()

Сессионная аутентификация

Для Web UI и доступа через браузер:

# Вход (возвращает сессионную куку)
curl -c cookies.txt -X POST http://localhost:5770/api/v1/auth/login \
  -d '{"username": "admin", "password": "secret"}'

# Использование сессионной куки
curl -b cookies.txt http://localhost:5770/api/v1/mocks

Эндпоинты аутентификации

Метод Путь Авторизация Описание
POST /api/v1/auth/login нет Вход по логину/паролю
POST /api/v1/auth/logout пользователь Завершение сессии
GET /api/v1/auth/me пользователь Информация о текущем пользователе
POST /api/v1/auth/change-password пользователь Смена пароля
POST /api/v1/auth/tokens пользователь Создание API-токена
GET /api/v1/auth/tokens пользователь Список своих API-токенов
GET /api/v1/auth/tokens/:id пользователь Детали токена
PATCH /api/v1/auth/tokens/:id пользователь Обновление токена (имя, срок действия)
DELETE /api/v1/auth/tokens/:id пользователь Отзыв токена
POST /api/v1/auth/ldap/login нет Вход через LDAP
GET /api/v1/auth/oauth/login/:provider нет Начало OAuth-потока
POST /api/v1/auth/forgot-password нет Запрос сброса пароля по email
GET /api/v1/auth/verify-email нет Подтверждение email

Ограничение частоты запросов

Запросы к API ограничены в зависимости от лицензии. Лимиты применяются отдельно для каждого API-ключа.


2. API управления моками (публичный)

Детали мока

Эндпоинты для управления определениями моков. Доступны на корневом сервере (порт 5770). Требуют аутентификации с правом read или write.

Создание/обновление мока

POST /api/v1/mocks | Авторизация: пользователь (write)

Создаёт новый мок или перезаписывает существующий (по id).

cURL

curl -X POST http://localhost:5770/api/v1/mocks \
  -H "X-API-Key: mk_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "get-user",
    "namespace": "sandbox",
    "http": {
      "route": "/api/users/list",
      "httpMethod": "GET"
    },
    "response": {
      "statusCode": 200,
      "payload": {
        "id": "$.fake.UUID",
        "name": "$.fake.FirstName",
        "email": "$.fake.Email"
      }
    }
  }'

CLI

# Пространство имён по умолчанию "sandbox"
mockarty-cli mock create \
  --id get-user \
  --route /api/users/list \
  --method GET \
  --status 200 \
  --body '{"id": "$.fake.UUID", "name": "$.fake.FirstName", "email": "$.fake.Email"}'

Go

mock := mockarty.NewMockBuilder().
    ID("get-user").
    Namespace("sandbox"). // необязательно, "sandbox" по умолчанию
    HTTP(func(h *mockarty.HTTPBuilder) {
        h.Route("/api/users/list").Method("GET")
    }).
    Response(func(r *mockarty.ResponseBuilder) {
        r.Status(200).JSONBody(map[string]any{
            "id":    "$.fake.UUID",
            "name":  "$.fake.FirstName",
            "email": "$.fake.Email",
        })
    }).
    Build()

resp, err := client.Mocks().Create(context.Background(), mock)

Python

mock = (
    MockBuilder.http("/api/users/list", "GET")
    .id("get-user")
    .namespace("sandbox")  # необязательно, "sandbox" по умолчанию
    .respond(200, body={
        "id": "$.fake.UUID",
        "name": "$.fake.FirstName",
        "email": "$.fake.Email",
    })
    .build()
)

result = client.mocks.create(mock)

Java

Mock mock = MockBuilder.http("/api/users/list", "GET")
    .id("get-user")
    .namespace("sandbox")  // необязательно, "sandbox" по умолчанию
    .respond(200, Map.of(
        "id", "$.fake.UUID",
        "name", "$.fake.FirstName",
        "email", "$.fake.Email"
    ))
    .build();

SaveMockResponse resp = client.mocks().create(mock);

Kotlin

client.createMock {
    id = "get-user"
    namespace = "sandbox"  // необязательно, "sandbox" по умолчанию
    http {
        route = "/api/users/list"
        method = "GET"
    }
    respond {
        statusCode = 200
        body = mapOf(
            "id" to "$.fake.UUID",
            "name" to "$.fake.FirstName",
            "email" to "$.fake.Email"
        )
    }
}

Ответ:

{
  "overwritten": false,
  "mock": {
    "id": "get-user",
    "namespace": "default",
    "createdAt": 1704096000000,
    "useCounter": 0
  }
}

Полная структура мока (все поля необязательны, кроме id):

Поле Тип Описание
id string Уникальный идентификатор мока
namespace string Пространство имён (по умолчанию: “default”)
chainId string ID цепочки для связанных моков
priority int64 Моки с высшим приоритетом сопоставляются первыми (по умолчанию: 0)
ttl int64 Время жизни в миллисекундах (0 = без ограничений)
useLimiter int32 Максимальное число использований (0 = без ограничений)
http object HTTP-конфигурация (route, httpMethod, conditions, queryParams, header)
grpc object gRPC-конфигурация (service, method, conditions, meta)
mcp object MCP-конфигурация (serverName, tool, conditions)
soap object SOAP-конфигурация (soapAction, route)
graphql object GraphQL-конфигурация (field, operation)
smtp object SMTP-конфигурация (serverName, senderConditions, recipientConditions, subjectConditions, bodyConditions, headerConditions)
socket object WebSocket/TCP/UDP-конфигурация (socketType, serverName, event)
kafka object Kafka-конфигурация (topic, serverName)
rabbitmq object RabbitMQ-конфигурация (queue, serverName)
sse object SSE-конфигурация (route, serverName)
response object Ответ: statusCode, payload, headers, delay, payloadTemplatePath
oneOf object Множественные ответы: order (“order”/“random”), массив responses
proxy object Режим прокси: URL target
webhooks array Вебхук-колбэки, вызываемые при совпадении мока (см. Вебхуки и колбэки)
tags array Строковые теги для категоризации и фильтрации моков
folderId string ID папки для иерархической организации моков
pathPrefix string Единый префикс пути для нативных протоколов (HTTP, SOAP, MCP, SSE, GraphQL)
serverName string Имя сервера для группировки моков по окружениям (например, test, stage, prod) – используется для Socket и gRPC
mStore object Хранилище мока – эфемерные данные ключ-значение, доступные только при обработке данного мока
extract object Извлечение данных: mStore, cStore, gStore

Структура условия (Condition)

Что такое условия? Условия позволяют возвращать разные ответы мока в зависимости от входящего запроса. Без условий мок соответствует любому запросу к его маршруту. С условиями Mockarty анализирует тело запроса, заголовки или параметры и выбирает мок только если все условия выполнены. Это полезно, когда несколько моков имеют один маршрут, но должны отвечать по-разному в зависимости от содержимого запроса (например, вернуть ошибку, когда $.body.status равен "invalid").

Массив conditions внутри конфигурационных объектов http, grpc и mcp управляет выбором мока. Каждое условие — объект со следующими полями:

Поле Тип Обязательно Описание
path string Да Выражение пути для проверки (например, $.body.user.role, имя заголовка, имя параметра запроса)
assertAction string Да Операция сравнения (см. таблицу ниже)
value any Зависит Ожидаемое значение для сравнения. Обязательно для equals, contains, not_equals, not_contains, matches. Игнорируется для any, notEmpty, empty.
decode string Нет Установите "base64" для base64-декодирования извлечённого значения перед сравнением. Полезно, когда запрос содержит base64-кодированные поля.
sortArray bool Нет Сортировать массивы перед сравнением. Переопределяет глобальный флаг sortArray конфигурации протокола для данного условия.
valueFromFile string Нет Путь к файлу, содержимое которого используется как значение условия вместо value. Путь поддерживает шаблонную обработку ($.fake.*, ссылки на хранилища). Имеет приоритет над value.

Действия проверки (Assert actions):

Действие Описание Значение обязательно
equals Точное совпадение (глубокое сравнение для объектов/массивов) Да
contains Поиск подстроки для строк, проверка подмножества для объектов, наличие элемента для массивов Да
not_equals Не равно значению Да
not_contains Не содержит подстроку или подмножество Да
matches Сопоставление с регулярным выражением Да (шаблон регулярного выражения)
any Всегда совпадает (значение игнорируется) Нет
notEmpty Значение существует и непустое (не null, непустая строка/массив/объект) Нет
empty Значение пустое или null ("", [], {} или null) Нет

Примечание: Устаревший псевдоним match также принимается и работает идентично matches.

Пример с расширенными полями условий:

{
  "id": "base64-body-mock",
  "http": {
    "route": "/api/validate",
    "httpMethod": "POST",
    "conditions": [
      {
        "path": "$.body.encodedData",
        "assertAction": "contains",
        "value": "expected-content",
        "decode": "base64"
      },
      {
        "path": "$.body.items",
        "assertAction": "equals",
        "value": ["b", "a", "c"],
        "sortArray": true
      },
      {
        "path": "$.body.payload",
        "assertAction": "equals",
        "valueFromFile": "/templates/expected-payload.json"
      }
    ]
  },
  "response": {
    "statusCode": 200,
    "payload": {"status": "validated"}
  }
}

Примечание: decode, sortArray и valueFromFile — поля только для API, они не доступны в визуальном конструкторе Web UI.

Получение мока

GET /api/v1/mocks/:id | Авторизация: пользователь (read)

cURL

curl -H "X-API-Key: mk_YOUR_TOKEN" http://localhost:5770/api/v1/mocks/get-user

CLI

mockarty-cli mock get get-user

Go

mock, err := client.Mocks().Get(context.Background(), "get-user")

Python

mock = client.mocks.get("get-user")

Java

Mock mock = client.mocks().get("get-user");

Kotlin

val mock = client.mocks().get("get-user")

Список моков

GET /api/v1/mocks | Авторизация: пользователь (read)

Параметр Тип Описание
offset int Смещение пагинации (по умолчанию: 0)
limit int Размер страницы (по умолчанию: 50)
namespace string Фильтр по пространству имён

cURL

# Пространство "sandbox" по умолчанию
curl -H "X-API-Key: mk_YOUR_TOKEN" \
  "http://localhost:5770/api/v1/mocks?namespace=sandbox&limit=10"

CLI

mockarty-cli mock list --namespace sandbox --limit 10

Go

page, err := client.Mocks().List(context.Background(), &mockarty.ListMocksOptions{
    Namespace: "sandbox", // необязательно, "sandbox" по умолчанию
    Limit:     10,
})
for _, m := range page.Items {
    fmt.Println(m.ID)
}

Python

page = client.mocks.list(namespace="sandbox", limit=10)
for mock in page.items:
    print(mock.id)

Java

Page<Mock> page = client.mocks().list("sandbox", null, null, 0, 10);
for (Mock m : page.getItems()) {
    System.out.println(m.getId());
}

Kotlin

val page = client.mocks().list("sandbox", null, null, 0, 10)
page.items.forEach { println(it.id) }

Удаление мока (мягкое)

DELETE /api/v1/mocks/:id | Авторизация: пользователь (delete)

cURL

curl -X DELETE -H "X-API-Key: mk_YOUR_TOKEN" \
  http://localhost:5770/api/v1/mocks/get-user

CLI

mockarty-cli mock delete get-user

Go

err := client.Mocks().Delete(context.Background(), "get-user")

Python

client.mocks.delete("get-user")

Java

client.mocks().delete("get-user");

Kotlin

client.mocks().delete("get-user")

Восстановление мока

GET /api/v1/mocks/:id | Авторизация: пользователь (write)

Полное удаление мока

DELETE /api/v1/mocks/:id/purge | Авторизация: пользователь (delete)

Журналы запросов мока

GET /api/v1/mocks/:id/logs | Авторизация: пользователь (read)

Возвращает историю запросов к моку.

{
  "id": "get-user",
  "requests": [
    {
      "calledAt": "2024-01-01T10:05:00Z",
      "req": {
        "header": {},
        "body": {},
        "queryParam": {},
        "url": "/stubs/api/users/123"
      }
    }
  ]
}

Цепочки моков

Метод Путь Описание
GET /api/v1/mocks/chains/:id Получить все моки в цепочке
DELETE /api/v1/mocks/chains/:id Удалить всю цепочку

Пакетное создание

POST /api/v1/mocks/batch | Авторизация: пользователь (write)

Создание нескольких моков за один запрос.

cURL

curl -X POST http://localhost:5770/api/v1/mocks/batch \
  -H "X-API-Key: mk_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    {"id": "mock-1", "namespace": "sandbox", "http": {"route": "/api/a", "httpMethod": "GET"}, "response": {"statusCode": 200}},
    {"id": "mock-2", "namespace": "sandbox", "http": {"route": "/api/b", "httpMethod": "GET"}, "response": {"statusCode": 200}}
  ]'

CLI

# Пакетное создание из JSON-файла (пространство по умолчанию "sandbox")
mockarty-cli mock create --file mocks.json --batch

Go

mocks := []*mockarty.Mock{
    mockarty.NewMockBuilder().ID("mock-1").
        HTTP(func(h *mockarty.HTTPBuilder) { h.Route("/api/a").Method("GET") }).
        Response(func(r *mockarty.ResponseBuilder) { r.Status(200) }).
        Build(),
    mockarty.NewMockBuilder().ID("mock-2").
        HTTP(func(h *mockarty.HTTPBuilder) { h.Route("/api/b").Method("GET") }).
        Response(func(r *mockarty.ResponseBuilder) { r.Status(200) }).
        Build(),
}

err := client.Mocks().BatchCreate(context.Background(), mocks)

Python

mocks = [
    MockBuilder.http("/api/a", "GET").id("mock-1").respond(200).build(),
    MockBuilder.http("/api/b", "GET").id("mock-2").respond(200).build(),
]

results = client.mocks.batch_create(mocks)

Java

// В Java SDK нет отдельного метода batchCreate;
// используйте цикл для создания каждого мока по отдельности
Mock mock1 = MockBuilder.http("/api/a", "GET").id("mock-1").respond(200).build();
Mock mock2 = MockBuilder.http("/api/b", "GET").id("mock-2").respond(200).build();

client.mocks().create(mock1);
client.mocks().create(mock2);

Частичное обновление (Patch)

PATCH /api/v1/mocks/:id | Авторизация: пользователь (write)

Частичное обновление мока (переданные поля объединяются с существующим моком).

cURL

curl -X PATCH http://localhost:5770/api/v1/mocks/get-user \
  -H "X-API-Key: mk_YOUR_TOKEN" \
  -d '{"response": {"statusCode": 201}}'

CLI

# CLI не предоставляет отдельной команды patch.
# Экспортируйте мок, отредактируйте его локально и примените полное определение —
# сервер обновит существующий мок по id.
mockarty-cli mock get get-user -o json > mock.json
# отредактируйте mock.json (например, измените response.statusCode на 201)
mockarty-cli mock create -f mock.json

Go

updated, err := client.Mocks().Patch(context.Background(), "get-user", map[string]any{
    "response": map[string]any{"statusCode": 201},
})

Python

updated = client.mocks.patch("get-user", {"response": {"statusCode": 201}})

Java

Mock updated = client.mocks().patchMock("get-user", Map.of(
    "response", Map.of("statusCode", 201)
));

История версий мока

Метод Путь Описание
GET /api/v1/mocks/:id/versions Список истории версий мока
GET /api/v1/mocks/:id/versions/:version Получение конкретной версии
POST /api/v1/mocks/:id/versions/:version/restore Восстановление мока до предыдущей версии

Предпросмотр разрешения мока

GET /api/v1/mocks/preview | Авторизация: пользователь (read)

Предпросмотр того, какой мок будет разрешён для указанного маршрута/метода без фактического вызова stub-эндпоинта.

Пакетные операции (UI API)

Метод Путь Описание
DELETE /api/v1/mocks/batch Пакетное мягкое удаление: {"ids": [...]}
POST /api/v1/mocks/batch/restore Пакетное восстановление: {"ids": [...]}
PATCH /api/v1/mocks/batch/tags Пакетное обновление тегов: {"ids": [...], "addTags": [...], "removeTags": [...]}

Теги

Метод Путь Описание
GET /api/v1/tags Список всех тегов
POST /api/v1/tags Создание нового тега

Папки моков

Организация моков в папки для удобного управления.

Метод Путь Описание
GET /api/v1/mock-folders Список всех папок
POST /api/v1/mock-folders Создание папки
PUT /api/v1/mock-folders/:id Обновление папки
DELETE /api/v1/mock-folders/:id Удаление папки
PATCH /api/v1/mock-folders/:id/move Перемещение папки (изменение порядка/родителя)
PATCH /api/v1/mocks/batch/move Перемещение моков в папку

Неопределённые запросы

Перехваченные запросы, не совпавшие ни с одним моком.

Метод Путь Описание
GET /api/v1/undefined-requests Список неопределённых запросов
PATCH /api/v1/undefined-requests/:id/ignore Игнорировать неопределённый запрос
DELETE /api/v1/undefined-requests Удалить выбранные неопределённые запросы
DELETE /api/v1/undefined-requests/all Очистить все неопределённые запросы
POST /api/v1/undefined-requests/:requestId/create-mock Создать мок из неопределённого запроса

3. API пространств имён

Метод Путь Авторизация Описание
POST /api/v1/namespaces пользователь (write) Создание пространства имён: {"name": "staging"}
GET /api/v1/namespaces пользователь (read) Список пространств имён
POST /api/v1/mocks/copy-to-namespace пользователь (write) Копирование моков между пространствами
GET /api/v1/namespaces пользователь Список доступных пространств
POST /api/v1/namespaces админ Создание пространства (админ-маршрут)

Пример копирования моков:

cURL

curl -X POST -H "X-API-Key: mk_YOUR_TOKEN" \
  http://localhost:5770/api/v1/mocks/copy-to-namespace \
  -d '{
    "sourceNamespace": "staging",
    "targetNamespace": "production",
    "mockIds": ["mock-1", "mock-2"]
  }'

CLI

mockarty-cli namespace copy \
  --from staging --to production \
  --ids mock-1,mock-2

Go

err := client.Mocks().CopyToNamespace(context.Background(),
    []string{"mock-1", "mock-2"}, "production",
)

Python

client.mocks.copy_to_namespace(
    ids=["mock-1", "mock-2"],
    target_namespace="production",
)

Java

client.mocks().copyToNamespace(
    List.of("mock-1", "mock-2"),
    "production"
);

4. API хранилищ

Хранилище — глобальное

Три типа хранилищ для моков с состоянием. Подробнее в Системе хранилищ.

Глобальное хранилище

Метод Путь Авторизация Описание
GET /api/v1/stores/global?namespace=default пользователь (read) Получить все данные
POST /api/v1/stores/global пользователь (write) Установить пару ключ-значение: {"key": "...", "value": "...", "namespace": "..."}
DELETE /api/v1/stores/global/:key?namespace=default пользователь (write) Удалить ключ (ключ в URL-пути)

Каждый POST-запрос добавляет одну пару ключ-значение. Для добавления нескольких ключей выполните отдельные запросы.

cURL

# Установить пару ключ-значение (один за запрос)
curl -X POST -H "X-API-Key: mk_YOUR_TOKEN" \
  "http://localhost:5770/api/v1/stores/global" \
  -d '{"key": "totalUsers", "value": "100", "namespace": "sandbox"}'

curl -X POST -H "X-API-Key: mk_YOUR_TOKEN" \
  "http://localhost:5770/api/v1/stores/global" \
  -d '{"key": "serviceName", "value": "auth", "namespace": "sandbox"}'

# Прочитать хранилище
curl -H "X-API-Key: mk_YOUR_TOKEN" \
  "http://localhost:5770/api/v1/stores/global?namespace=sandbox"

# Удалить ключ (ключ в URL-пути)
curl -X DELETE -H "X-API-Key: mk_YOUR_TOKEN" \
  "http://localhost:5770/api/v1/stores/global/totalUsers?namespace=sandbox"

CLI

# Установить значение (пространство по умолчанию "sandbox")
mockarty-cli store global set totalUsers 100
mockarty-cli store global set serviceName auth

# Прочитать хранилище
mockarty-cli store global get

# Удалить ключ
mockarty-cli store global delete totalUsers

Go

// Установить значения (используется пространство клиента по умолчанию "sandbox")
err := client.Stores().GlobalSet(context.Background(), "totalUsers", 100)
err = client.Stores().GlobalSet(context.Background(), "serviceName", "auth")

// Прочитать хранилище
store, err := client.Stores().GlobalGet(context.Background())
fmt.Println(store) // map[totalUsers:100 serviceName:auth ...]

// Удалить ключ
err = client.Stores().GlobalDelete(context.Background(), "totalUsers")

Python

# Установить значения (используется пространство клиента по умолчанию "sandbox")
client.stores.global_set("totalUsers", 100)
client.stores.global_set("serviceName", "auth")

# Или установить несколько значений за раз
client.stores.global_set_many({"totalUsers": 100, "serviceName": "auth"})

# Прочитать хранилище
store = client.stores.global_get()
print(store)  # {"totalUsers": 100, "serviceName": "auth"}

# Удалить ключи
client.stores.global_delete("totalUsers")

Java

// Установить значения (используется пространство клиента по умолчанию "sandbox")
client.stores().globalSet("totalUsers", 100);
client.stores().globalSet("serviceName", "auth");

// Прочитать хранилище
Map<String, Object> store = client.stores().globalGet();
System.out.println(store);

// Удалить ключ
client.stores().globalDelete("totalUsers");

Хранилище цепочки

Метод Путь Авторизация Описание
GET /api/v1/stores/chain/:id?namespace=default пользователь (read) Получить хранилище цепочки
POST /api/v1/stores/chain/:id пользователь (write) Установить пару ключ-значение: {"key": "...", "value": "...", "namespace": "..."}
DELETE /api/v1/stores/chain/:id/:key?namespace=default пользователь (write) Удалить ключ (ключ в URL-пути)

5. API шаблонов

Загрузка шаблонов ответов для использования в моках через payloadTemplatePath.

Метод Путь Авторизация Описание
GET /api/v1/templates пользователь (read) Список всех шаблонов
GET /api/v1/templates/:fileName пользователь (read) Скачать шаблон
POST /api/v1/templates/:fileName пользователь (write) Загрузить файл шаблона
DELETE /api/v1/templates/:fileName пользователь (write) Удалить шаблон

Временное хранилище файлов

Временная загрузка файлов для использования в интерфейсе чата с агентом. Файлы автоматически удаляются через 30 минут.

Метод Путь Авторизация Описание
POST /api/v1/temp-files/upload пользователь (write) Загрузить временный файл
GET /api/v1/temp-files/get/:fileId пользователь (read) Скачать временный файл
DELETE /api/v1/temp-files/delete/:fileId пользователь (write) Удалить временный файл

Генерация из OpenAPI (сокращённая форма)

Метод Путь Авторизация Описание
POST /api/v1/generators/openapi пользователь (write) Генерация моков из OpenAPI-спецификации

6. Руководство по CI/CD интеграции

Mockarty предоставляет полное API-покрытие для автоматизации CI/CD. Все примеры используют аутентификацию по API-токену.

6.1 Запуск API-тестов из CI

cURL

TOKEN="mk_YOUR_TOKEN"
BASE="http://localhost:5770/ui/api"

# 1. Создание коллекции
COLLECTION_ID=$(curl -s -X POST "$BASE/api-tester/collections" \
  -H "X-API-Key: $TOKEN" \
  -d '{"name": "CI Tests", "description": "Automated test suite"}' | jq -r '.id')

# 2. Добавление запроса с тестовым скриптом
curl -X POST "$BASE/api-tester/collections/$COLLECTION_ID/requests" \
  -H "X-API-Key: $TOKEN" \
  -d '{
    "name": "Get Users",
    "method": "GET",
    "url": "http://localhost:5770/stubs/sandbox/api/users",
    "testScript": "mk.test(\"Status is 200\", function() { mk.response.to.have.status(200); });"
  }'

# 3. Выполнение коллекции (запускает все запросы + тестовые скрипты)
RUN_ID=$(curl -s -X POST "$BASE/api-tester/collections/$COLLECTION_ID/execute" \
  -H "X-API-Key: $TOKEN" \
  -d '{}' | jq -r '.runId')

# 4. Проверка результатов
curl -s "$BASE/api-tester/test-runs/$RUN_ID" \
  -H "X-API-Key: $TOKEN" | jq '.status, .summary'

CLI

# Запуск существующей коллекции по имени или ID
mockarty-cli run collection "CI Tests" --wait --format json

# Запуск с экспортом JUnit-отчёта для CI
mockarty-cli run collection "CI Tests" --wait --junit-report results.xml

Go

// Создание коллекции и выполнение
col, err := client.Collections().Create(context.Background(), &mockarty.Collection{
    Name:        "CI Tests",
    Description: "Automated test suite",
})

// Выполнение коллекции
run, err := client.Collections().Execute(context.Background(), col.ID)
fmt.Printf("Run ID: %s, Status: %s\n", run.ID, run.Status)

Python

# Создание коллекции и выполнение
col = client.collections.create({
    "name": "CI Tests",
    "description": "Automated test suite",
})

# Выполнение коллекции
run = client.collections.execute(col.id)
print(f"Run ID: {run.id}, Status: {run.status}")

Java

// Создание коллекции и выполнение
Map<String, Object> col = client.collections().create(Map.of(
    "name", "CI Tests",
    "description", "Automated test suite"
));

String collectionId = (String) col.get("id");
Map<String, Object> run = client.collections().execute(collectionId, Map.of());
System.out.println("Run ID: " + run.get("runId"));

6.2 Запуск нагрузочных тестов из CI

cURL

# 1. Создание конфигурации нагрузочного теста (привязана к коллекции)
CONFIG_ID=$(curl -s -X POST "$BASE/perf-configs" \
  -H "X-API-Key: $TOKEN" \
  -d '{
    "name": "Load Test",
    "collectionId": "'$COLLECTION_ID'",
    "vus": 10,
    "duration": "30s"
  }' | jq -r '.id')

# 2. Запуск нагрузочного теста с инлайн-скриптом
curl -X POST "$BASE/perf/run" \
  -H "X-API-Key: $TOKEN" \
  -d '{
    "script": "import http from \"k6/http\"; export default function() { http.get(\"http://localhost:5770/stubs/sandbox/api/users\"); }",
    "options": {"vus": 10, "duration": "30s"}
  }'

# 3. Проверка результатов
curl -s "$BASE/perf-results" -H "X-API-Key: $TOKEN" | jq '.[0]'

CLI

# Запуск нагрузочного теста из существующей конфигурации
mockarty-cli perf run --config "Load Test" --wait

# Запуск с инлайн-параметрами
mockarty-cli perf run --vus 10 --duration 30s \
  --url http://localhost:5770/stubs/sandbox/api/users

Go

// Запуск нагрузочного теста
result, err := client.Perf().Run(context.Background(), &mockarty.PerfRunRequest{
    Script:  `import http from "k6/http"; export default function() { http.get("http://localhost:5770/stubs/sandbox/api/users"); }`,
    Options: map[string]any{"vus": 10, "duration": "30s"},
})

// Список результатов
results, err := client.Perf().ListResults(context.Background())

Python

# Запуск нагрузочного теста
result = client.perf.run({
    "script": 'import http from "k6/http"; export default function() { http.get("http://localhost:5770/stubs/sandbox/api/users"); }',
    "options": {"vus": 10, "duration": "30s"},
})

# Список результатов
results = client.perf.list_results()

Java

// Запуск нагрузочного теста
Map<String, Object> result = client.perf().run(Map.of(
    "script", "import http from \"k6/http\"; export default function() { http.get(\"http://localhost:5770/stubs/sandbox/api/users\"); }",
    "options", Map.of("vus", 10, "duration", "30s")
));

6.3 Запуск фаззинга из CI

cURL

# 1. Создание конфигурации фаззинга
CONFIG_ID=$(curl -s -X POST "$BASE/fuzzing/configs" \
  -H "X-API-Key: $TOKEN" \
  -d '{
    "name": "API Fuzz",
    "method": "POST",
    "url": "http://target:8080/api/users",
    "headers": {"Content-Type": "application/json"},
    "body": "{\"name\": \"test\"}",
    "payloadCategories": ["sql_injection", "xss"]
  }' | jq -r '.id')

# 2. Запуск фаззинга
RUN_ID=$(curl -s -X POST "$BASE/fuzzing/run" \
  -H "X-API-Key: $TOKEN" \
  -d '{"configId": "'$CONFIG_ID'"}' | jq -r '.id')

# 3. Проверка найденных уязвимостей
curl -s "$BASE/fuzzing/findings?runId=$RUN_ID" \
  -H "X-API-Key: $TOKEN" | jq '.findings'

CLI

# Запуск фаззинга из CLI
mockarty-cli fuzz run --config "API Fuzz" --wait

# Быстрый фаззинг URL
mockarty-cli fuzz quick \
  --url http://target:8080/api/users \
  --method POST \
  --categories sql_injection,xss

Go

// Создание конфигурации и запуск фаззинга
config, err := client.Fuzzing().CreateConfig(context.Background(), &mockarty.FuzzingConfig{
    Name:              "API Fuzz",
    Method:            "POST",
    URL:               "http://target:8080/api/users",
    PayloadCategories: []string{"sql_injection", "xss"},
})

run, err := client.Fuzzing().Run(context.Background(), config.ID)

// Проверка найденных уязвимостей
findings, err := client.Fuzzing().ListFindings(context.Background(), run.ID)

Python

# Создание конфигурации и запуск фаззинга
config = client.fuzzing.create_config({
    "name": "API Fuzz",
    "method": "POST",
    "url": "http://target:8080/api/users",
    "payloadCategories": ["sql_injection", "xss"],
})

run = client.fuzzing.run(config.id)

# Проверка найденных уязвимостей
findings = client.fuzzing.list_findings(run_id=run.id)

Java

// Создание конфигурации и запуск фаззинга
FuzzingConfig config = client.fuzzing().createConfig(Map.of(
    "name", "API Fuzz",
    "method", "POST",
    "url", "http://target:8080/api/users",
    "payloadCategories", List.of("sql_injection", "xss")
));

FuzzingRun run = client.fuzzing().run(config.getId());

6.4 Импорт OpenAPI/Postman/HAR

cURL

# Импорт OpenAPI-спецификации для генерации моков (пространство "sandbox" по умолчанию)
curl -X POST "$BASE/generators/openapi" \
  -H "X-API-Key: $TOKEN" \
  -F "file=@openapi.yaml" \
  -F "namespace=sandbox"

# Импорт коллекции Postman в API Tester
curl -X POST "$BASE/api-tester/import/postman" \
  -H "X-API-Key: $TOKEN" \
  -F "file=@collection.json"

# Импорт HAR-записи
curl -X POST "$BASE/api-tester/import/har" \
  -H "X-API-Key: $TOKEN" \
  -F "file=@recording.har"

# Импорт WSDL для SOAP-моков
curl -X POST "$BASE/api-tester/import/wsdl" \
  -H "X-API-Key: $TOKEN" \
  -F "file=@service.wsdl"

CLI

# Импорт OpenAPI-спецификации (пространство по умолчанию "sandbox")
mockarty-cli generate openapi --file openapi.yaml --namespace sandbox

# Импорт коллекции Postman
mockarty-cli import postman --file collection.json

# Импорт HAR-записи
mockarty-cli import har --file recording.har

Go

// Импорт OpenAPI-спецификации для генерации моков
result, err := client.Generator().OpenAPIGenerate(context.Background(),
    "openapi.yaml", // путь к файлу
    "sandbox",       // пространство имён
)

// Импорт коллекции Postman
importResult, err := client.Imports().Postman(context.Background(), "collection.json")

Python

# Импорт OpenAPI-спецификации для генерации моков
result = client.generator.openapi_generate(
    file_path="openapi.yaml",
    namespace="sandbox",  # необязательно, "sandbox" по умолчанию
)

# Импорт коллекции Postman
import_result = client.imports.postman(file_path="collection.json")

Java

// Импорт OpenAPI-спецификации для генерации моков
GeneratorResponse result = client.generator().openapiGenerate(
    "openapi.yaml", "sandbox"
);

// Импорт коллекции Postman
ImportResult importResult = client.imports().postman("collection.json");

6.5 Настройка моков перед тестами

cURL

# Создание моков для тестового окружения (пространство "sandbox" по умолчанию)
curl -X POST http://localhost:5770/api/v1/mocks \
  -H "X-API-Key: $TOKEN" \
  -d '{
    "id": "ci-user-service",
    "namespace": "sandbox",
    "http": {"route": "/api/users/list", "httpMethod": "GET"},
    "response": {
      "statusCode": 200,
      "payload": {"id": "$.fake.UUID", "name": "Test User"}
    }
  }'

# Проверка, что мок активен
curl http://localhost:5770/stubs/sandbox/api/users/list
# Возвращает: {"id": "a1b2c3d4-...", "name": "Test User"}

# Очистка после тестов
curl -X DELETE -H "X-API-Key: $TOKEN" \
  http://localhost:5770/api/v1/mocks/ci-user-service

CLI

# Создание мока из JSON-файла
mockarty-cli mock create --file ci-mocks.json

# Проверка, что мок активен
curl http://localhost:5770/stubs/sandbox/api/users/list

# Очистка после тестов
mockarty-cli mock delete ci-user-service

Go

// Создание мока для CI
mock := mockarty.NewMockBuilder().
    ID("ci-user-service").
    Namespace("sandbox").
    HTTP(func(h *mockarty.HTTPBuilder) {
        h.Route("/api/users/list").Method("GET")
    }).
    Response(func(r *mockarty.ResponseBuilder) {
        r.Status(200).JSONBody(map[string]any{
            "id":   "$.fake.UUID",
            "name": "Test User",
        })
    }).
    Build()

_, err := client.Mocks().Create(context.Background(), mock)

// ... запуск тестов ...

// Очистка
err = client.Mocks().Delete(context.Background(), "ci-user-service")

Python

# Создание мока для CI
mock = (
    MockBuilder.http("/api/users/list", "GET")
    .id("ci-user-service")
    .namespace("sandbox")
    .respond(200, body={"id": "$.fake.UUID", "name": "Test User"})
    .build()
)
client.mocks.create(mock)

# ... запуск тестов ...

# Очистка
client.mocks.delete("ci-user-service")

Java

// Создание мока для CI
Mock mock = MockBuilder.http("/api/users/list", "GET")
    .id("ci-user-service")
    .namespace("sandbox")
    .respond(200, Map.of("id", "$.fake.UUID", "name", "Test User"))
    .build();

client.mocks().create(mock);

// ... запуск тестов ...

// Очистка
client.mocks().delete("ci-user-service");

7. API тестирования API

Полнофункциональная платформа тестирования API (аналог Postman). Все эндпоинты под /api/v1/ и требуют аутентификации.

Коллекции

Метод Путь Описание
POST /api/v1/api-tester/collections Создание коллекции
GET /api/v1/api-tester/collections Список коллекций
GET /api/v1/api-tester/collections/:id Получение коллекции
PUT /api/v1/api-tester/collections/:id Обновление коллекции
DELETE /api/v1/api-tester/collections/:id Удаление коллекции
POST /api/v1/api-tester/collections/:id/restore Восстановление удалённой коллекции
POST /api/v1/api-tester/collections/:id/duplicate Дублирование коллекции
DELETE /api/v1/api-tester/collections/batch Пакетное удаление
GET /api/v1/api-tester/collections/:id/export Экспорт коллекции (JSON)

Совместный доступ к коллекциям

Метод Путь Описание
POST /api/v1/api-tester/collections/:id/share-with-users Поделиться с пользователями
POST /api/v1/api-tester/collections/:id/share-with-spaces Поделиться с пространствами имён
GET /api/v1/api-tester/collections/:id/users Список пользователей коллекции
PUT /api/v1/api-tester/collections/:id/users/:userId/role Установить роль пользователя
DELETE /api/v1/api-tester/collections/:id/users/:userId Удалить пользователя
GET /api/v1/api-tester/collections/:id/spaces Список общих пространств
DELETE /api/v1/api-tester/collections/:id/spaces/:namespace Удалить пространство

Запросы

Метод Путь Описание
POST /api/v1/api-tester/collections/:id/requests Создание запроса
GET /api/v1/api-tester/collections/:id/requests Список запросов в коллекции
GET /api/v1/api-tester/requests/:id Получение запроса
PUT /api/v1/api-tester/requests/:id Обновление запроса
DELETE /api/v1/api-tester/requests/:id Удаление запроса
POST /api/v1/api-tester/requests/execute Выполнение запроса (серверный режим)
POST /api/v1/api-tester/requests/execute-client Выполнение для клиентского режима
GET /api/v1/api-tester/requests/history История выполнения запросов
DELETE /api/v1/api-tester/requests/batch Пакетное удаление запросов
PATCH /api/v1/api-tester/requests/batch/move Пакетное перемещение запросов
POST /api/v1/api-tester/collections/:id/requests/reorder Изменить порядок запросов в коллекции (тело: {"ids":["uuid","uuid",...]})

Окружения

Метод Путь Описание
POST /api/v1/api-tester/environments Создание окружения
GET /api/v1/api-tester/environments Список окружений
GET /api/v1/api-tester/environments/active Получение активного окружения
GET /api/v1/api-tester/environments/:id Получение окружения
PUT /api/v1/api-tester/environments/:id Обновление окружения
DELETE /api/v1/api-tester/environments/:id Удаление окружения
POST /api/v1/api-tester/environments/:id/activate Установить как активное

Запуски тестов

Метод Путь Описание
GET /api/v1/api-tester/test-runs Список запусков (поддерживает ?mode=&referenceId=&limit=&offset=)
GET /api/v1/api-tester/test-runs/:id Детали запуска
DELETE /api/v1/api-tester/test-runs/:id Удаление запуска
POST /api/v1/api-tester/test-runs/:id/cancel Отмена запущенного теста
GET /api/v1/api-tester/test-runs/:id/export Экспорт отчёта
POST /api/v1/api-tester/reports/import Импорт отчёта
GET /api/v1/test-runs/active Активные запуски всех режимов в namespace

Режимы единой витрины запусков

Каждая строка из /api/v1/api-tester/test-runs содержит поле mode,
идентифицирующее источник запуска:

Режим Откуда На что указывает referenceId
functional API Tester (по умолчанию)
load Нагрузочный движок Perf-конфигурация
fuzz Фаззинг-кампания Fuzz-конфигурация
chaos Chaos-эксперимент Chaos-эксперимент
contract Контрактная верификация Запись реестра контрактов

Примеры фильтрации:

# Все fuzz-кампании в namespace
curl -H "Authorization: Bearer $TOKEN" \
  "$MOCKARTY_URL/api/v1/api-tester/test-runs?mode=fuzz"

# Все запуски конкретного chaos-эксперимента
curl -H "Authorization: Bearer $TOKEN" \
  "$MOCKARTY_URL/api/v1/api-tester/test-runs?mode=chaos&referenceId=$EXPERIMENT_ID"

# Пагинация по функциональным запускам
curl -H "Authorization: Bearer $TOKEN" \
  "$MOCKARTY_URL/api/v1/api-tester/test-runs?mode=functional&limit=50&offset=100"

Эквиваленты в SDK:

// Go
runs, err := client.TestRuns.ListWithOptions(ctx, mockarty.ListTestRunsOptions{
    Mode:        "fuzz",
    ReferenceID: fuzzConfigID,
    Limit:       50,
})
# Python
runs = client.test_runs.list(mode="chaos", reference_id=experiment_id, limit=50)
// Java
List<TestRun> runs = client.testRuns().listByMode("fuzz", fuzzConfigId, 50, 0);
# CLI
mockarty-cli test-runs list --mode chaos --reference-id "$EXPERIMENT_ID" --limit 50

Скрипты и выполнение

Метод Путь Описание
POST /api/v1/api-tester/requests/execute-with-scripts Выполнение с пре/пост-скриптами
POST /api/v1/api-tester/requests/run-script Запуск скрипта отдельно
POST /api/v1/api-tester/collections/:id/execute Выполнение всей коллекции
POST /api/v1/api-tester/collections/execute-multiple Выполнение нескольких коллекций
GET /api/v1/api-tester/test-reports/:id Получение отчёта

Автономные тесты

Метод Путь Описание
GET /api/v1/api-tester/tests Список тестов
POST /api/v1/api-tester/tests Создание теста
GET /api/v1/api-tester/tests/:id Получение теста
PUT /api/v1/api-tester/tests/:id Обновление теста
DELETE /api/v1/api-tester/tests/:id Удаление теста
POST /api/v1/api-tester/tests/:id/run Запуск теста
POST /api/v1/api-tester/tests/run Запуск теста инлайн

Расписания (Cron)

Метод Путь Описание
GET /api/v1/api-tester/schedules Список расписаний
POST /api/v1/api-tester/schedules Создание расписания
GET /api/v1/api-tester/schedules/:id Получение расписания
PUT /api/v1/api-tester/schedules/:id Обновление расписания
DELETE /api/v1/api-tester/schedules/:id Удаление расписания
POST /api/v1/api-tester/schedules/:id/run Запуск расписания сейчас

Импорт/экспорт

Метод Путь Описание
POST /api/v1/api-tester/import/postman Импорт коллекции Postman
POST /api/v1/api-tester/import/openapi Импорт из OpenAPI-спецификации
POST /api/v1/api-tester/import/wsdl Импорт из WSDL
POST /api/v1/api-tester/import/grpc Импорт gRPC из .proto
POST /api/v1/api-tester/import/graphql Импорт GraphQL-схемы
POST /api/v1/api-tester/import/mcp Импорт инструментов MCP-сервера
POST /api/v1/api-tester/import/har Импорт HAR-записи
POST /api/v1/api-tester/import/soapui Импорт проекта SoapUI
POST /api/v1/api-tester/import/mockarty Импорт коллекции Mockarty
POST /api/v1/api-tester/generate-mock Генерация мока из ответа
POST /api/v1/api-tester/generate-mocks-from-collection Генерация моков из коллекции

Вспомогательные эндпоинты протоколов

Метод Путь Описание
POST /api/v1/proxy/http Проксирование HTTP-запроса
POST /api/v1/proxy/soap Проксирование SOAP-запроса
POST /api/v1/proxy/grpc Проксирование gRPC-запроса
POST /api/v1/api-tester/mcp/connect Подключение к MCP-серверу
POST /api/v1/api-tester/mcp/tools/list Список инструментов MCP
POST /api/v1/api-tester/mcp/tools/call Вызов инструмента MCP
POST /api/v1/api-tester/graphql/introspect Интроспекция GraphQL
POST /api/v1/api-tester/grpc/discover Обнаружение gRPC-сервисов
POST /api/v1/api-tester/soap/operations Список SOAP-операций из WSDL

Kafka Admin

Метод Путь Описание
POST /api/v1/api-tester/kafka/metadata Метаданные кластера
POST /api/v1/api-tester/kafka/topics Список топиков
POST /api/v1/api-tester/kafka/topics/create Создание топика
POST /api/v1/api-tester/kafka/topics/delete Удаление топика
POST /api/v1/api-tester/kafka/consumer-groups Список групп потребителей

RabbitMQ Admin

Метод Путь Описание
POST /api/v1/api-tester/rabbitmq/publish Публикация сообщения
POST /api/v1/api-tester/rabbitmq/read Чтение сообщений из очереди
POST /api/v1/api-tester/rabbitmq/metadata Метаданные брокера
POST /api/v1/api-tester/rabbitmq/queues Список очередей
POST /api/v1/api-tester/rabbitmq/queues/create Создание очереди
POST /api/v1/api-tester/rabbitmq/queues/delete Удаление очереди
POST /api/v1/api-tester/rabbitmq/queues/purge Очистка очереди
POST /api/v1/api-tester/rabbitmq/exchanges Список обменников
POST /api/v1/api-tester/rabbitmq/exchanges/create Создание обменника
POST /api/v1/api-tester/rabbitmq/exchanges/delete Удаление обменника

8. API нагрузочного тестирования

Встроенное нагрузочное тестирование с k6-совместимыми скриптами. Все эндпоинты под /api/v1/.

Конфигурации нагрузочных тестов

Метод Путь Описание
GET /api/v1/perf-configs Список конфигураций
GET /api/v1/perf-configs/:id Получение конфигурации
POST /api/v1/perf-configs Создание конфигурации
PUT /api/v1/perf-configs/:id Обновление конфигурации
DELETE /api/v1/perf-configs/:id Удаление конфигурации

Запуск/остановка тестов

Метод Путь Описание
POST /api/v1/perf/run Запуск теста со скриптом
POST /api/v1/perf/run-collection Запуск теста из коллекции
POST /api/v1/perf/stop/:taskId Остановка запущенного теста
POST /api/v1/perf/scripts Генерация k6-скрипта из конфигурации
POST /api/v1/perf/scripts/from-request Генерация скрипта из запроса API Tester
POST /api/v1/perf/scripts/from-har Конвертация HAR в скрипт
GET /api/v1/perf/snippets Список сниппетов скриптов

Результаты

Метод Путь Описание
GET /api/v1/perf-results Список всех результатов
GET /api/v1/perf-results/:id Детали результата
DELETE /api/v1/perf-results/:id Удаление результата
GET /api/v1/perf-results/compare Сравнение результатов
GET /api/v1/perf-results/history/:configId История результатов конфигурации
GET /api/v1/perf-results/trend/:configId Данные тренда
GET /api/v1/perf-results/group/:runGroupId Результаты по группе запуска
POST /api/v1/perf-results/:id/ai-analyze AI-анализ результатов

Расписания

Метод Путь Описание
GET /api/v1/perf-schedules Список расписаний
POST /api/v1/perf-schedules Создание расписания
PUT /api/v1/perf-schedules/:id Обновление расписания
DELETE /api/v1/perf-schedules/:id Удаление расписания

Задачи раннеров

Метод Путь Описание
POST /api/v1/runner-tasks Отправка задачи раннеру
GET /api/v1/runner-tasks Список задач
GET /api/v1/runner-tasks/:id Статус задачи
GET /api/v1/runner-tasks/:id/queue-position Позиция в очереди
DELETE /api/v1/runner-tasks/:id Отмена задачи
GET /api/v1/runners Список доступных раннеров

9. API фаззинга

Фаззинг безопасности со встроенными категориями полезных нагрузок (SQL-инъекции, XSS и др.). Все эндпоинты под /api/v1/fuzzing/.

Сводка и полезные нагрузки

Метод Путь Описание
GET /api/v1/fuzzing/summary Сводка по дашборду фаззинга
GET /api/v1/fuzzing/payload-categories Список категорий полезных нагрузок

Конфигурации

Метод Путь Описание
GET /api/v1/fuzzing/configs Список конфигураций
GET /api/v1/fuzzing/configs/:id Получение конфигурации
POST /api/v1/fuzzing/configs Создание конфигурации
PUT /api/v1/fuzzing/configs/:id Обновление конфигурации
DELETE /api/v1/fuzzing/configs/:id Удаление конфигурации
POST /api/v1/fuzzing/configs/reorder Изменение порядка конфигураций

Импорт

Метод Путь Описание
POST /api/v1/fuzzing/import/curl Импорт из команды cURL
POST /api/v1/fuzzing/import/openapi Импорт из OpenAPI-спецификации
POST /api/v1/fuzzing/import/collection Импорт из коллекции API Tester
POST /api/v1/fuzzing/import/recorder Импорт из сессии рекордера
POST /api/v1/fuzzing/import/mock Импорт из определения мока

Обнаружение протоколов

Метод Путь Описание
POST /api/v1/fuzzing/introspect/graphql Интроспекция GraphQL для фаззинга
POST /api/v1/fuzzing/discover/grpc Обнаружение gRPC-сервисов для фаззинга

Запуски и результаты

Метод Путь Описание
POST /api/v1/fuzzing/run Запуск фаззинга
POST /api/v1/fuzzing/run/:id/stop Остановка фаззинга
POST /api/v1/fuzzing/quick-fuzz Быстрый фаззинг (создание + запуск)
GET /api/v1/fuzzing/results Список результатов
GET /api/v1/fuzzing/results/:id Детали результата
DELETE /api/v1/fuzzing/results/:id Удаление результата

аномалии

Метод Путь Описание
GET /api/v1/fuzzing/findings Список находок
GET /api/v1/fuzzing/findings/:id Детали аномалии
PUT /api/v1/fuzzing/findings/:id/triage Триаж аномалии (установка критичности, статуса)
POST /api/v1/fuzzing/findings/:id/replay Повтор запроса аномалии
POST /api/v1/fuzzing/findings/:id/analyze AI-анализ аномалии
POST /api/v1/fuzzing/findings/batch-analyze AI-анализ нескольких находок
POST /api/v1/fuzzing/findings/batch-triage AI пакетный триаж
POST /api/v1/fuzzing/findings/export Экспорт находок

Расписания

Метод Путь Описание
GET /api/v1/fuzzing/schedules Список расписаний
GET /api/v1/fuzzing/schedules/:id Получение расписания
POST /api/v1/fuzzing/schedules Создание расписания
PUT /api/v1/fuzzing/schedules/:id Обновление расписания
DELETE /api/v1/fuzzing/schedules/:id Удаление расписания

10. API рекордера

Запись HTTP-трафика (на основе прокси). Все эндпоинты под /api/v1/recorder/.

Сессии

Метод Путь Описание
POST /api/v1/recorder/start Начало сессии записи
GET /api/v1/recorder/sessions Список сессий
GET /api/v1/recorder/:id Детали сессии
POST /api/v1/recorder/:id/stop Остановка сессии
POST /api/v1/recorder/:id/restart Перезапуск сессии
DELETE /api/v1/recorder/:id Удаление сессии

Пример начала сессии:

cURL

curl -X POST "$BASE/recorder/start" \
  -H "X-API-Key: $TOKEN" \
  -d '{
    "targetUrl": "https://api.example.com",
    "port": 8888,
    "name": "API Recording"
  }'

Go

session, err := client.Recorder().StartRecording(context.Background(), &mockarty.RecorderSession{
    TargetURL: "https://api.example.com",
    Port:      8888,
    Name:      "API Recording",
})
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Сессия запущена: %s\n", session.ID)

Python

session = client.recorder.create({
    "targetUrl": "https://api.example.com",
    "port": 8888,
    "name": "API Recording",
})
print(f"Сессия запущена: {session.id}")

Java

RecorderSession session = client.recorder().start(Map.of(
    "targetUrl", "https://api.example.com",
    "port", 8888,
    "name", "API Recording"
));
System.out.println("Сессия запущена: " + session.getId());

Совет: Те же операции доступны через mockarty-cli recorder ... — справочник команд см. в Руководстве CLI.

Записи

Метод Путь Описание
GET /api/v1/recorder/:id/entries Список записанных запросов
PATCH /api/v1/recorder/:id/entries/:entryId Аннотация записи
POST /api/v1/recorder/:id/entries/:entryId/replay Повтор запроса

Модификации (перезапись запросов/ответов)

Метод Путь Описание
GET /api/v1/recorder/:id/modifications Получение правил модификации
PUT /api/v1/recorder/:id/modifications Обновление правил

Экспорт

Метод Путь Описание
POST /api/v1/recorder/:id/export Экспорт в HAR
POST /api/v1/recorder/:id/export-perf Экспорт как скрипт нагрузки
POST /api/v1/recorder/:id/export-test Экспорт как тестовый скрипт
POST /api/v1/recorder/:id/export-collection Экспорт как коллекция API Tester
POST /api/v1/recorder/:id/mocks Создание моков из записей

AI-анализ

Метод Путь Описание
POST /api/v1/recorder/:id/ai-analyze AI-анализ трафика сессии
POST /api/v1/recorder/:id/ai-scenarios AI-генерация тестовых сценариев

Конфигурация

Метод Путь Описание
GET /api/v1/recorder/ports Список используемых портов
GET /api/v1/recorder/port-check Проверка доступности порта
GET /api/v1/recorder/configs Список конфигураций рекордера
POST /api/v1/recorder/configs Сохранение конфигурации
POST /api/v1/recorder/configs/import Импорт конфигурации
GET /api/v1/recorder/configs/:id/export Экспорт конфигурации
DELETE /api/v1/recorder/configs/:id Удаление конфигурации
GET /api/v1/recorder/ca/status Статус CA-сертификата
POST /api/v1/recorder/ca/generate Генерация CA-сертификата
GET /api/v1/recorder/ca/download Скачивание CA-сертификата

WebSocket

Метод Путь Описание
GET /api/v1/recorder/:id/ws WebSocket для потоковой передачи записей

11. API контрактного тестирования

Контрактное тестирование проверяет, что ваши моки остаются согласованными со спецификациями реальных API. Поддерживаются: валидация по OpenAPI, потребительские контракты (совместимость с Pact), обнаружение дрейфа API (API drift) и реестр API (внутренний маркетплейс). Все эндпоинты находятся под префиксом /api/v1/contract/.

Валидация моков

Метод Путь Описание
POST /api/v1/contract/validate-mocks Проверить моки на соответствие OpenAPI-спецификации
POST /api/v1/contract/verify-provider Проверить провайдера по потребительским контрактам
POST /api/v1/contract/check-compatibility Проверить обратную совместимость между версиями API
POST /api/v1/contract/validate-payload Проверить отдельное тело мока по схеме
POST /api/v1/contract/detect-drift Обнаружить дрейф API между моками и живыми эндпоинтами

Конфигурации и регулярные запуски

Метод Путь Описание
GET /api/v1/contract/configs Список конфигураций контрактного тестирования
POST /api/v1/contract/configs Создать/сохранить конфигурацию
DELETE /api/v1/contract/configs/:id Удалить конфигурацию
POST /api/v1/contract/configs/:id/run Запустить конфигурацию немедленно

Результаты и тренды

Метод Путь Описание
GET /api/v1/contract/results Список результатов контрактного тестирования
GET /api/v1/contract/results/:id Получить конкретный результат
GET /api/v1/contract/trends Получить данные тренда контрактного тестирования во времени

аномалии (AI-анализ)

Метод Путь Описание
POST /api/v1/contract/findings/analyze AI-анализ находок контрактного тестирования
POST /api/v1/contract/findings/auto-triage Автоматическая сортировка находок с помощью AI
POST /api/v1/contract/findings/export Экспорт находок

Потребительские контракты (Pact)

Метод Путь Описание
POST /api/v1/contract/pacts Опубликовать потребительский контракт (Pact)
GET /api/v1/contract/pacts Список опубликованных контрактов
GET /api/v1/contract/pacts/:id Получить конкретный Pact
DELETE /api/v1/contract/pacts/:id Удалить Pact
POST /api/v1/contract/pacts/verify Проверить провайдера по Pact-контрактам
POST /api/v1/contract/pacts/can-i-deploy Проверить, безопасно ли деплоить версию (can-i-deploy)
GET /api/v1/contract/pacts/verifications Список результатов верификации Pact
POST /api/v1/contract/pacts/:id/mocks Сгенерировать моки из Pact-контракта

Реестр API (внутренний маркетплейс)

Метод Путь Описание
POST /api/v1/contract/registry Опубликовать API в реестре
GET /api/v1/contract/registry Список зарегистрированных API
GET /api/v1/contract/registry/namespaces Список пространств имён реестра
GET /api/v1/contract/registry/:id Получить зарегистрированный API
PUT /api/v1/contract/registry/:id Обновить зарегистрированный API
DELETE /api/v1/contract/registry/:id Удалить зарегистрированный API
POST /api/v1/contract/registry/:id/generate-mocks Сгенерировать моки из записи реестра
POST /api/v1/contract/registry/:id/subscribe Подписаться на изменения API
GET /api/v1/contract/registry/:id/subscribers Список подписчиков API
POST /api/v1/contract/registry/:id/check-impact Оценить влияние изменений API на подписчиков

Подписки

Метод Путь Описание
GET /api/v1/contract/subscriptions Список ваших подписок
DELETE /api/v1/contract/subscriptions/:id Отписаться от API

12. API Chaos Engineering

Kubernetes-нативный chaos engineering для инъекции отказов и проверки отказоустойчивости. Создавайте эксперименты для внесения отказов (убийство подов, сетевые задержки, нагрузка на ресурсы) в ваши кластеры и наблюдайте за поведением сервисов. Все эндпоинты находятся под префиксом /api/v1/chaos/.

Пресеты

Метод Путь Описание
GET /api/v1/chaos/presets Список доступных пресетов chaos-экспериментов

Эксперименты

Метод Путь Описание
GET /api/v1/chaos/experiments Список экспериментов (фильтры: ?namespace=, ?status=, ?limit=, ?offset=)
GET /api/v1/chaos/experiments/:id Получить детали эксперимента
POST /api/v1/chaos/experiments Создать новый chaos-эксперимент
PUT /api/v1/chaos/experiments/:id Обновить эксперимент
DELETE /api/v1/chaos/experiments/:id Удалить эксперимент
POST /api/v1/chaos/experiments/:id/run Запустить эксперимент
POST /api/v1/chaos/experiments/:id/abort Прервать выполняющийся эксперимент
GET /api/v1/chaos/experiments/:id/metrics Получить метрики эксперимента
GET /api/v1/chaos/experiments/:id/events Получить таймлайн событий эксперимента
GET /api/v1/chaos/experiments/:id/report Получить отчёт эксперимента
GET /api/v1/chaos/experiments/:id/report/download Скачать отчёт эксперимента (?format=html|json|junit|allure)
GET /api/v1/chaos/experiments/:id/snapshot Снимок состояния кластера на момент эксперимента

Очередь экспериментов

Метод Путь Описание
GET /api/v1/chaos/queue/:clusterId Получить статус очереди для кластера

Инфраструктурные профили

Метод Путь Описание
GET /api/v1/chaos/profiles Список инфраструктурных профилей (фильтр: ?namespace=)
POST /api/v1/chaos/profiles Создать инфраструктурный профиль (с kubeconfig)
PUT /api/v1/chaos/profiles/:id Обновить профиль
DELETE /api/v1/chaos/profiles/:id Удалить профиль
POST /api/v1/chaos/profiles/:id/test Проверить подключение к кластеру
POST /api/v1/chaos/profiles/:id/connect Подключиться к кластеру
POST /api/v1/chaos/profiles-test Проверить kubeconfig без сохранения профиля

Chaos Operator

Метод Путь Описание
GET /api/v1/chaos/operator/status Получить статус Chaos Operator в кластере
POST /api/v1/chaos/operator/manifest Сгенерировать манифест установки оператора
POST /api/v1/chaos/operator/install Установить Chaos Operator в кластер

Ресурсы Kubernetes

Метод Путь Описание
GET /api/v1/chaos/clusters/:id/topology Получить топологию кластера
GET /api/v1/chaos/pods/:namespace/:name Получить детали пода
GET /api/v1/chaos/pods/:namespace/:name/logs Получить логи пода
DELETE /api/v1/chaos/pods/:namespace/:name Убить под
GET /api/v1/chaos/deployments/:namespace/:name Получить детали деплоймента
POST /api/v1/chaos/deployments/:namespace/:name/scale Масштабировать деплоймент
POST /api/v1/chaos/deployments/:namespace/:name/restart Перезапустить деплоймент
GET /api/v1/chaos/configmaps/:namespace Список ConfigMap
GET /api/v1/chaos/configmaps/:namespace/:name Получить ConfigMap
PUT /api/v1/chaos/configmaps/:namespace/:name Обновить ConfigMap
GET /api/v1/chaos/services/:namespace Список сервисов
GET /api/v1/chaos/crds Список Custom Resource Definitions
GET /api/v1/chaos/crds/:group/:version/:resource Список ресурсов CRD
GET /api/v1/chaos/events/:namespace Список событий Kubernetes

13. API администрирования

Эндпоинты только для администраторов (роль admin). Префикс: /api/v1/admin/.

Управление пользователями

Метод Путь Описание
GET /api/v1/admin/users Список пользователей
POST /api/v1/admin/users Создание пользователя
PUT /api/v1/admin/users/:id Обновление пользователя
DELETE /api/v1/admin/users/:id Удаление пользователя
POST /api/v1/admin/users/:id/password Установка пароля
POST /api/v1/admin/users/:id/disable Деактивация пользователя
POST /api/v1/admin/users/:id/enable Активация пользователя

Управление пространствами имён (Админ)

Метод Путь Описание
GET /api/v1/admin/namespaces Список пространств с метаданными
DELETE /api/v1/admin/namespaces/:namespace Удаление пространства
PUT /api/v1/admin/namespaces/:namespace/restore Восстановление пространства
GET /api/v1/admin/namespaces/:namespace/users Список пользователей пространства
POST /api/v1/admin/namespaces/:namespace/users Добавление пользователя
DELETE /api/v1/admin/namespaces/:namespace/users/:user_id Удаление пользователя
PUT /api/v1/admin/namespaces/:namespace/users/:user_id/role Обновление роли

Политики очистки

Метод Путь Описание
GET /api/v1/admin/namespaces/:namespace/cleanup-policy Получение политики очистки
PUT /api/v1/admin/namespaces/:namespace/cleanup-policy Установка политики
GET /api/v1/admin/cleanup-settings/:type Глобальные настройки очистки
PUT /api/v1/admin/cleanup-settings/:type Обновление глобальных настроек

Настройки LLM/AI

Метод Путь Описание
GET /api/v1/admin/llm-settings Получение глобальных настроек LLM
PUT /api/v1/admin/llm-settings Сохранение настроек LLM
GET /api/v1/admin/llm-profiles Список профилей LLM
GET /api/v1/admin/llm-profiles/:id Получение профиля LLM
POST /api/v1/admin/llm-profiles Создание профиля LLM
PUT /api/v1/admin/llm-profiles/:id Обновление профиля
DELETE /api/v1/admin/llm-profiles/:id Удаление профиля
GET /api/v1/admin/agent-settings Получение настроек AI-агента
PUT /api/v1/admin/agent-settings Обновление настроек AI-агента

Настройки электронной почты

Метод Путь Описание
GET /api/v1/admin/email/config Получение конфигурации SMTP
PUT /api/v1/admin/email/config Обновление конфигурации
POST /api/v1/admin/email/test Отправка тестового письма
POST /api/v1/admin/email/ping Проверка SMTP-сервера
POST /api/v1/admin/email/broadcast Рассылка пользователям
GET /api/v1/admin/email/events Список почтовых событий
GET /api/v1/admin/email/templates Список шаблонов писем
PUT /api/v1/admin/email/templates Создание/обновление шаблона
DELETE /api/v1/admin/email/templates/:slug Удаление шаблона
POST /api/v1/admin/email/templates/preview Предварительный просмотр

Управление лицензиями

Метод Путь Описание
POST /api/v1/admin/licenses/activate Активация лицензионного ключа
POST /api/v1/admin/licenses/import Импорт файла лицензии
GET /api/v1/admin/licenses Список лицензий
GET /api/v1/admin/licenses/:id Детали лицензии
POST /api/v1/admin/licenses/:id/revoke Отзыв лицензии
GET /api/v1/admin/licenses/status Сводка по лицензиям
GET /api/v1/admin/licenses/usage Статистика использования
GET /api/v1/admin/licenses/combined-limits Совмещённые лимиты

Провайдеры идентификации

Метод Путь Описание
GET /api/v1/admin/auth/providers Список провайдеров
POST /api/v1/admin/auth/providers Создание провайдера (OAuth, LDAP, SAML)
PUT /api/v1/admin/auth/providers/:id Обновление провайдера
DELETE /api/v1/admin/auth/providers/:id Удаление провайдера
POST /api/v1/admin/auth/ldap/test-connection Проверка подключения LDAP

Управление резервными копиями

Метод Путь Описание
GET /api/v1/admin/backups/configs Список конфигураций бэкапов
POST /api/v1/admin/backups/configs Создание конфигурации
PUT /api/v1/admin/backups/configs/:id Обновление конфигурации
DELETE /api/v1/admin/backups/configs/:id Удаление конфигурации
GET /api/v1/admin/backups/configs/:id/backups Список бэкапов конфигурации
POST /api/v1/admin/backups/create Создать бэкап сейчас
GET /api/v1/admin/backups/download Скачать файл бэкапа
POST /api/v1/admin/backups/restore Восстановление из бэкапа
DELETE /api/v1/admin/backups/delete Удаление бэкапа

Мониторинг базы данных

Метод Путь Описание
GET /api/v1/admin/database/health Проверка здоровья БД
GET /api/v1/admin/database/health-dashboard Полный дашборд здоровья
GET /api/v1/admin/database/indexes Список индексов
GET /api/v1/admin/database/indexes/unused Поиск неиспользуемых индексов
DELETE /api/v1/admin/database/indexes/unused Удаление неиспользуемых индексов
GET /api/v1/admin/database/tables Список таблиц со статистикой
GET /api/v1/admin/database/maintenance Рекомендации по обслуживанию
POST /api/v1/admin/database/maintenance Автоматическое обслуживание

Вебхуки

Метод Путь Описание
GET /api/v1/admin/webhooks Список вебхуков администратора
POST /api/v1/admin/webhooks Создание вебхука
DELETE /api/v1/admin/webhooks/:id Удаление вебхука

Аудит и задачи

Метод Путь Описание
GET /api/v1/admin/audit/export Экспорт журнала аудита (csv, json, syslog, cef)
GET /api/v1/admin/jobs/executions Список выполнений задач
GET /api/v1/admin/jobs/statistics Статистика задач
POST /api/v1/admin/jobs/trigger Ручной запуск задачи
GET /api/v1/admin/ai-audit Журнал использования AI
GET /api/v1/admin/ai-audit/export Экспорт журнала AI (CSV)

Телеметрия

Метод Путь Описание
GET /api/v1/admin/telemetry-settings Получение настроек телеметрии
PUT /api/v1/admin/telemetry-settings Обновление настроек

MCP Marketplace (Админ)

Метод Путь Описание
GET /api/v1/admin/mcp-servers Список MCP-серверов
POST /api/v1/admin/mcp-servers Добавление MCP-сервера
GET /api/v1/admin/mcp-servers/:id Получение MCP-сервера
PUT /api/v1/admin/mcp-servers/:id Обновление MCP-сервера
DELETE /api/v1/admin/mcp-servers/:id Удаление MCP-сервера
GET /api/v1/admin/mcp-servers/:id/tools Список инструментов сервера
PUT /api/v1/admin/mcp-servers/:id/tools/:toolName Переключение инструмента
POST /api/v1/admin/mcp-servers/:id/check Проверка подключения
POST /api/v1/admin/mcp-servers/:id/refresh Обновление инструментов

Интеграционные токены

Метод Путь Описание
GET /api/v1/integrations Список интеграционных токенов
POST /api/v1/integrations Создание интеграционного токена (админ)
DELETE /api/v1/integrations/:id Удаление интеграции
POST /api/v1/integrations/:id/revoke Отзыв токена
POST /api/v1/integrations/:id/rotate Ротация токена
GET /api/v1/integrations/status Статус раннеров
POST /api/v1/integrations/namespace/:ns Создание интеграции пространства
POST /api/v1/runners/register Регистрация раннер-агента

14. Утилиты

Конвертеры (без аутентификации)

Метод Путь Описание
POST /api/v1/utils/convert-xml-to-json Конвертация XML в JSON
POST /api/v1/utils/convert-txt-to-base64 Кодирование текста в Base64
POST /api/v1/utils/extract-jpath Извлечение значений через JsonPath

Генерация моков из спецификаций

Метод Путь Описание
POST /api/v1/generators/openapi/preview Предпросмотр моков из OpenAPI
POST /api/v1/generators/openapi Генерация моков из OpenAPI
POST /api/v1/generators/soap/preview Предпросмотр моков из WSDL
POST /api/v1/generators/soap Генерация моков из WSDL
POST /api/v1/generators/grpc/preview Предпросмотр моков из .proto
POST /api/v1/generators/grpc Генерация моков из .proto
POST /api/v1/generators/graphql/preview Предпросмотр моков из GraphQL
POST /api/v1/generators/graphql Генерация моков из GraphQL
POST /api/v1/generators/har/preview Предпросмотр моков из HAR
POST /api/v1/generators/har Генерация моков из HAR
POST /api/v1/generators/mcp/preview Предпросмотр моков из MCP
POST /api/v1/generators/mcp Генерация моков из MCP
POST /api/v1/generators/socket Генерация Socket-моков

AI-функции

Метод Путь Описание
POST /api/v1/ai/generate-test-script Генерация тестового скрипта (AI)
POST /api/v1/ai/generate-perf-script Генерация скрипта нагрузки (AI)
POST /api/v1/ai/diagnose-error Диагностика ошибки (AI)
POST /api/v1/ai/generate-mock Генерация мока по описанию (AI)
POST /api/v1/ai/improve-mock Улучшение существующего мока (AI)
POST /api/v1/ai/analyze-test-results Анализ результатов тестов (AI)
POST /api/v1/ai/analyze-test-run-report Анализ отчёта запуска (AI)
POST /api/v1/ai/analyze-api-diff Анализ изменений API (AI)
POST /api/v1/ai/analyze-logs Анализ журналов моков (AI)
POST /api/v1/ai/generate-collection Генерация коллекции по описанию (AI)

Уведомления

Метод Путь Описание
GET /api/v1/notifications Список уведомлений
GET /api/v1/notifications/unread-count Количество непрочитанных
POST /api/v1/notifications/:id/read Отметить как прочитанное
POST /api/v1/notifications/read-all Отметить все прочитанными
DELETE /api/v1/notifications/:id Удаление уведомления
GET /api/v1/notifications/preferences Получение настроек
PUT /api/v1/notifications/preferences Обновление настроек

Задачи агента

Метод Путь Описание
GET /api/v1/agent/tasks Список задач агента
POST /api/v1/agent/tasks Отправка задачи
DELETE /api/v1/agent/tasks Очистить все задачи агента
GET /api/v1/agent/tasks/:id Детали задачи
DELETE /api/v1/agent/tasks/:id Удаление конкретной задачи
POST /api/v1/agent/tasks/:id/cancel Отмена выполняемой задачи
POST /api/v1/agent/tasks/:id/rerun Перезапуск завершённой задачи
GET /api/v1/agent/tasks/:id/export Экспорт результата задачи
GET /api/v1/agent/tasks/:id/events SSE-поток событий задачи

Здоровье и мониторинг

Метод Путь Описание
GET /health Полная проверка здоровья (БД, кэш)
GET /health/live Проверка жизнеспособности (возвращает 200)
GET /health/ready Проверка готовности
GET /metrics Метрики Prometheus
GET /swagger/ Swagger UI
GET /swagger/doc.json Спецификация Swagger (JSON)
GET /api/v1/stats Статистика дашборда
GET /api/v1/counts Количества ресурсов
GET /api/v1/status Статус системы
GET /api/v1/system-metrics Системные метрики
GET /api/v1/features Флаги функциональности
GET /api/v1/features/check Проверка конкретных функций

Пример ответа health:

{
  "status": "up",
  "releaseId": "1.2.3",
  "checks": {
    "database": {"status": "up"},
    "cache": {"status": "up"}
  }
}

Дашборды

Метод Путь Описание
GET /api/v1/dashboards/mock-stats Статистика использования моков
GET /api/v1/dashboards/comprehensive-stats Полные данные дашборда
GET /api/v1/dashboards/testing-stats Данные дашборда тестирования

MCP-сервер

Mockarty предоставляет MCP (Model Context Protocol) сервер по адресу GET /mcp/sse. Подключайте AI-инструменты (Claude Desktop, Cursor) для управления моками через естественный язык.

SSE-события

Метод Путь Описание
GET /api/v1/events SSE-поток обновлений в реальном времени

15. Прокси-эндпоинты протоколов

Внутренние эндпоинты, используемые сгенерированными серверами протоколов для разрешения моков. Аутентификация не требуется.

Метод Путь Описание
POST /mock/findGrpc Разрешение gRPC-мока
POST /mock/findSocket Разрешение WebSocket/TCP/UDP-мока
POST /mock/findKafka Разрешение Kafka-мока
POST /mock/findRabbitMQ Разрешение RabbitMQ-мока
POST /mock/findSmtp Разрешение SMTP-мока
ANY /stubs/* Разрешение HTTP-моков (универсальный маршрут)

Как работает маршрутизация /stubs/*

Эндпоинт /stubs/* — основной маршрут разрешения моков. Он соответствует любому HTTP-методу и находит подходящий мок на основе маршрута, метода, условий и приоритета. Аутентификация не требуется для вызова стабов — это сделано намеренно, так как тестируемое приложение вызывает эти эндпоинты напрямую.

Маршрутизация по пространствам имён: Namespace извлекается из URL-пути — укажите его первым сегментом после /stubs/. Также можно передать через query-параметр. Если ни то ни другое не указано, Mockarty использует sandbox как fallback.

# Рекомендуется: namespace явно в пути (однозначно, всегда работает)
curl http://localhost:5770/stubs/sandbox/api/users/123
curl http://localhost:5770/stubs/staging/api/users/123

# Альтернатива: namespace через query-параметр
curl "http://localhost:5770/stubs/sandbox/api/users/123?namespace=staging"

# POST с телом (условия сопоставляются с телом запроса)
curl -X POST http://localhost:5770/stubs/sandbox/api/orders \
  -H "Content-Type: application/json" \
  -d '{"customerId": "cust-1", "items": [{"id": "item-1", "price": 29.99}]}'

Префиксы шаблонов в ответах

При построении ответов моков Mockarty поддерживает специальные префиксы для подстановки динамических данных:

Префикс Описание Пример
$.fake.* Данные, сгенерированные Faker $.fake.UUID, $.fake.Email, $.fake.FirstName
$.req.* или $.body.* Поля тела запроса $.req.userId, $.body.order.items[0].id
$.reqHeader.* Заголовки запроса $.reqHeader.Authorization[0]
$.queryParams.* Параметры запроса $.queryParams.limit
$.pathParam.* Параметры пути URL $.pathParam.id (для маршрута /api/users/:id)
$.namespace Имя текущего пространства $.namespace
$.gS.* Значения из глобального хранилища $.gS.totalUsers
$.cS.* Значения из хранилища цепочки $.cS.orderId
$.mS.* Значения из хранилища мока $.mS.tempKey

Пример с параметрами пути:

cURL

# Создание мока с извлечением параметров пути (пространство "sandbox" по умолчанию)
curl -X POST http://localhost:5770/api/v1/mocks \
  -H "Content-Type: application/json" \
  -d '{
    "id": "get-user-by-id",
    "namespace": "sandbox",
    "http": {
      "route": "/api/users/:id",
      "httpMethod": "GET"
    },
    "response": {
      "statusCode": 200,
      "payload": {
        "userId": "$.pathParam.id",
        "name": "$.fake.FirstName",
        "namespace": "$.namespace"
      }
    }
  }'

# Вызываем
curl http://localhost:5770/stubs/sandbox/api/users/42
# Возвращает: {"userId": "42", "name": "Alice", "namespace": "sandbox"}

CLI

mockarty-cli mock create \
  --id get-user-by-id \
  --route /api/users/:id \
  --method GET \
  --status 200 \
  --body '{"userId": "$.pathParam.id", "name": "$.fake.FirstName", "namespace": "$.namespace"}'

# Вызываем
curl http://localhost:5770/stubs/sandbox/api/users/42

Go

mock := mockarty.NewMockBuilder().
    ID("get-user-by-id").
    HTTP(func(h *mockarty.HTTPBuilder) {
        h.Route("/api/users/:id").Method("GET")
    }).
    Response(func(r *mockarty.ResponseBuilder) {
        r.Status(200).JSONBody(map[string]any{
            "userId":    "$.pathParam.id",
            "name":      "$.fake.FirstName",
            "namespace": "$.namespace",
        })
    }).
    Build()

_, err := client.Mocks().Create(context.Background(), mock)

Python

mock = (
    MockBuilder.http("/api/users/:id", "GET")
    .id("get-user-by-id")
    .respond(200, body={
        "userId": "$.pathParam.id",
        "name": "$.fake.FirstName",
        "namespace": "$.namespace",
    })
    .build()
)

client.mocks.create(mock)

Java

Mock mock = MockBuilder.http("/api/users/:id", "GET")
    .id("get-user-by-id")
    .respond(200, Map.of(
        "userId", "$.pathParam.id",
        "name", "$.fake.FirstName",
        "namespace", "$.namespace"
    ))
    .build();

client.mocks().create(mock);

Конструктор — пример мока с параметром пути


Связанная документация