Echolot
Моки

Моки

Локальные мок-серверы из маршрутов, написанных вручную, с тестовыми данными или из спецификации OpenAPI; вы выбираете, что они отвечают, проверяете запросы и открываете доступ в сети.

Мок — это сервер на порту вашего Mac, который отвечает как API. Фронтенд, приложения и тесты могут пользоваться им, пока API ещё нет или пока настоящий не работает. Мок отвечает из двух источников, по отдельности или вместе:

  • Маршруты, созданные вручную: метод, путь и то, что мок отвечает, — JSON, XML или текст. В телах могут быть тестовые данные ({{$randomFullName}}, {{$randomEmail}}), которые меняются при каждом запросе, и части запроса ({{request.params.id}}). Спецификация не нужна. См. маршруты и тестовые данные.
  • Спецификация OpenAPI: каждая операция отвечает ответами, описанными в спецификации, её примерами или телом, собранным из её схем. Запросы, нарушающие спецификацию, получают 400 с объяснением причины, так что мок ещё и сообщает, когда клиент отправляет что-то не то.

Для ответов, которым нужны код или состояние, в моке могут быть и маршруты на JavaScript.

Откройте страницу через Моки в переключателе разделов боковой панели или нажмите ⌘4.

Запущенный мок демо-магазина Alpenglow: сверху его адрес с кнопками «Использовать в окружении» и «Остановить», карточка «Настройки» со спецификацией, карточка «Маршруты» с двумя маршрутами, созданными вручную, и внизу журнал обработанных запросов — от маршрутов и от спецификации

Создание мока

Нажмите + в заголовке Моки боковой панели или воспользуйтесь кнопками на пустой странице:

  • Новый мок создаёт мок из маршрутов. В нём сразу есть один маршрут, GET /users, который отвечает пятью тестовыми пользователями, так что можно запустить мок и посмотреть, на что способно тело. Измените его или добавьте свои; см. маршруты и тестовые данные.
  • Мок спецификации (в меню + или на пустой странице) создаёт мок спецификации из рабочего пространства, например Мок спецификации «Alpenglow demo shop».

Новый мок занимает первый свободный порт, начиная с 4010. Его настройки и маршруты — файл в папке mocks рабочего пространства, поэтому команда делится моками через Git.

Мок из маршрутов тоже может обслуживать спецификацию, а у мока спецификации могут быть свои маршруты: Обслуживать спецификацию в карточке Настройки добавляет её, Изменить › Перестать обслуживать спецификацию убирает.

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

Нажмите Старт (⌘R). В панели сверху виден адрес мока, например http://127.0.0.1:4010. Если мок обслуживает спецификацию, в URL сервера которой есть путь (https://demo.echolot.dev/v1), адрес заканчивается им (http://127.0.0.1:4010/v1), и мок отвечает по этому пути; запросы могут и не указывать его. Кнопка копирования рядом с адресом копирует его.

Проверьте из Терминала:

curl http://127.0.0.1:4010/users

Остановить останавливает мок. Боковая панель показывает, какие моки запущены: зелёная точка и порт рядом с названием спецификации или число маршрутов (Alpenglow demo shop · :4010, 3 routes · stopped). Щёлкните мок правой кнопкой, чтобы выбрать Старт или Остановить и Удалить…. Удаление сначала спрашивает; файл настроек попадает в Корзину, а спецификация остаётся.

Моки работают, пока открыто окно их рабочего пространства. Работающий мок подхватывает изменения маршрутов, спецификации и настроек, не останавливаясь. Порт, который занят другой программой, взять нельзя: Echolot сообщит об этом; выберите другой порт.

Отправка запросов в мок

  • Создать запросы в карточке Маршруты создаёт папку запросов, которые обращаются к маршрутам мока, с {{baseUrl}}, равным адресу мока. См. запросы из маршрутов.
  • Использовать в окружении (пока мок запущен) создаёт окружение Mock: <name>, в котором {{baseUrl}} — адрес мока, и делает его активным. Запросы, начинающиеся с {{baseUrl}}, например созданные «Создать запросы» из спецификации, после этого идут в мок, пока вы не выберете другое окружение. См. Окружения.

Настройки

НастройкаЧто делает
ИмяИмя мока в боковой панели.
СпецификацияСпецификация, которую он обслуживает, или Нет: отвечают только его маршруты. Открыть открывает спецификацию на странице «Спецификации»; Обслуживать спецификацию и Изменить выбирают спецификацию или перестают её обслуживать.
ПортПорт, который он слушает, от 1 до 65535.
Отвечать другим устройствам в сетиСлушает на всех сетевых интерфейсах, чтобы можно было тестировать с телефона или из контейнера. Выключено: мок доступен только с этого Mac.
ЗадержкаСколько миллисекунд ждать перед каждым ответом, до 60 000, чтобы попробовать медленное API.
ОшибкиДоля запросов в процентах, на которые подставляется 500, чтобы проверить, как справляется клиент.
ПроверкиДля спецификации: Отклонять запросы, нарушающие спецификацию (400 с причинами). По умолчанию включено.

Какой ответ получает запрос

Запрос идёт к первому из перечисленного, у кого есть ответ для его метода и пути:

  1. Маршруты на JavaScript мока. Маршрут, который ничего не задаёт, передаёт запрос дальше.
  2. Его маршруты, созданные вручную. У маршрута может быть несколько ответов; запрос может попросить нужный по имени или статусу, другие выбирают правила для запроса, а в остальных случаях отвечает ответ маршрута по умолчанию.
  3. Операции спецификации, как описано ниже.

Буквальные сегменты пути важнее параметров, поэтому /pets/mine выбирается раньше /pets/{id} и в маршрутах, и в операциях.

Для операции спецификации мок выбирает ответ в таком порядке:

  1. То, что просит запрос: заголовок Prefer: code=404, example=empty или заголовки Postman x-mock-response-code и x-mock-response-name.
  2. Ответ, выбранный для операции в карточке Ответы спецификации.
  3. Первый успешный ответ операции.

Карточка Ответы спецификации перечисляет каждую операцию с меню: Первый успешный или один из описанных статусов, а если у статуса несколько примеров, то и пример. Выбор сохраняется вместе с моком.

Тело — это именованный пример ответа (запрошенный или первый), его единственный example либо тело, собранное из схемы: тестовые данные, подходящие по типу, формату и имени каждого поля (адрес электронной почты для поля формата email), в пределах ограничений схемы, создаваемые заново при каждом запросе. Поле с именем, как у параметра пути, повторяет его значение. Если в спецификации описано несколько типов медиа, один из них выбирает заголовок Accept запроса. Описанные заголовки и тип содержимого тоже отправляются. У ответов 204, 304 и на HEAD тела нет.

Другие ответы мока:

СтатусКогда
400Мок обслуживает спецификацию, проверки включены, и запрос её нарушает: нет параметра пути, запроса, заголовка или cookie либо у него неверный тип, неверный тип содержимого или тело не соответствует своей JSON Schema. В теле перечислены все причины.
404Такого пути нет ни у одного маршрута и ни у одной операции.
405Путь есть, но не с этим методом. Заголовок Allow перечисляет методы, которые он принимает, из маршрутов и спецификации вместе.
413Тело запроса больше 32 МБ.
500Подставленная ошибка (см. Ошибки).
501Для операции не описан ответ с запрошенным статусом.

Браузеры могут обращаться к моку со страницы на другом порту: он отвечает на предварительные запросы и отправляет заголовки CORS.

Журнал

Внизу страницы перечислены запросы, на которые ответил выбранный мок, новые первыми: время, статус, метод и путь, использованный ответ (имя ответа маршрута, имя примера спецификации или generated, если тело собрано из схемы) и сколько это заняло. Проблемы указаны в строках под запросом: где он нарушил спецификацию или какое тестовое значение не удалось создать в теле маршрута. Наведите указатель на запрос, чтобы увидеть тело ответа, тело запроса и тип содержимого; Скопировать ответ копирует тело. Очистить очищает журнал.

Там, где доступна встроенная модель Apple, кнопка рядом с Очистить составляет сводку журнала.

Сохранение примеров в спецификацию

Для операций спецификации единственный источник того, что отвечает мок, — сама спецификация, поэтому настоящий полученный ответ сохраняется в неё как пример: в Истории щёлкните правой кнопкой обмен запроса, который следует спецификации, и выберите Сохранить как пример мока…. Задайте имя, например two tents, и нажмите Сохранить.

Ответ становится именованным примером ответа его операции в спецификации, которой следует запрос. Выберите его в карточке Ответы спецификации или запросите заголовком Prefer: example=two tents.

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

Доступ в сети

Включите Отвечать другим устройствам в сети, чтобы обращаться к моку с телефона, планшета или из контейнера. Другие устройства используют адрес вашего Mac в локальной сети и порт мока.

В первый раз macOS может спросить, можно ли Echolot находить устройства в локальной сети и подключаться к ним. Разрешите, иначе другие устройства не смогут обратиться к моку. Ответ можно изменить позже в Системные настройки › Конфиденциальность и безопасность › Локальная сеть.

После этого к моку может обратиться любой, кто есть в сети. Когда доступ не нужен, выключите его.

Из командной строки

echolot mock alpenglow.yaml обслуживает файл спецификации, а echolot mock -w <workspace> <mock> обслуживает мок рабочего пространства с его настройками и маршрутами, со спецификацией или без, для CI или контейнера. См. echolot mock. echolot fake создаёт тестовые данные по тем же шаблонам, для фикстур и начальных данных.

Агенты могут запускать моки и читать их журналы через MCP-сервер Echolot, а при включённом наборе инструментов Моки — создавать моки, добавлять и изменять маршруты, генерировать тестовые данные и создавать запросы из маршрутов. См. Агенты.

На этой странице