Мок-API
Адресация
Два способа обратиться к моку — префикс сервиса и единый префикс /v1/, — и чем они отличаются.
На этой странице · 4
У шлюза две схемы адресации. Первая нужна, когда вы подменяете боевой адрес в готовом коде: остаётся тот же путь, тот же метод, те же заголовки. Вторая — когда сервис выбирается параметром: один базовый адрес на все API стенда.
Две схемы
Код сервиса в едином префиксе — bitrix24, ozon, wildberries. Оба адреса
ведут в один и тот же обработчик: набор заголовков, сценарии и лимиты одинаковы.
Остаток пути после префикса передаётся моку как есть — вместе с параметрами запроса, телом и заголовками.
curl -s localhost:8080/wb/api/v3/warehouses -H "Authorization: $KEY"
curl -s localhost:8080/v1/wildberries/api/v3/warehouses -H "X-Mock-Key: $KEY"
Базовый адрес стенда задаётся переменной APISTEND_PUBLIC_ORIGIN; в примерах
документации это http://localhost:8080 из .env.example. Тот же адрес каталог
подставляет в поля mockBaseUrl, exampleUrl и unifiedUrl ответа /api/catalog.
Bitrix24: ещё и корень
Портал сообщает приложению DOMAIN — голый хост без пути, — и приложение
склеивает адрес само: <схема>://<DOMAIN>/rest/<метод>. Поэтому у шлюза есть
третий маршрут, в корне: /rest/* обслуживается как Bitrix24.
curl -s "localhost:8080/rest/crm.deal.fields.json?auth=$KEY"
Приложению, написанному для боя, менять в этом случае нечего: достаточно,
чтобы DOMAIN указывал на стенд.
Почему нет поддоменов вида b24.apistend.dev
Доменное имя — способ использования товарного знака (ГК РФ ст. 1484 п. 2 пп. 5). Имена сервисов вынесены в путь, а не в поддомен, сознательно: путь адресует демо-копию и не притворяется адресом самого сервиса.
Подводные камни
Корень префикса отдаёт родной 404 сервиса, а неизвестный сервис — нет
/b24 без пути обслуживается тем же обработчиком и отвечает конвертом сервиса:
{"error":"ERROR_METHOD_NOT_FOUND","error_description":"Method not found!"}
А вот неизвестный код сервиса в едином префиксе — ошибка самого шлюза, и конверт у неё шлюзовой, а не сервисный:
{"error":"UNKNOWN_SERVICE","error_description":"Сервис «avito» не поддерживается"}
Проверять код сервиса в своём коде надёжнее, чем ловить эту разницу в тестах.
Если пути в каталоге нет, шлюз отвечает 404 в конверте сервиса и добавляет
подсказку X-APIStend-Did-You-Mean — до трёх похожих путей:
x-apistend-did-you-mean: /api/v3/warehouses, /api/v3/warehouses/{warehouseId}, /api/v1/warehouses
CORS шлюз отдаёт всегда — Access-Control-Allow-Origin: * — и честно помечает
это заголовком X-APIStend-Cors: added-by-sandbox. Боевые Ozon и Wildberries
запросы из браузера не разрешают: если ваш код рассчитывает на CORS, в бою
он работать не будет.
Собственные эндпоинты, которых нет ни в одном из трёх API, живут по отдельному
префиксу /custom/… — это не сервисный префикс, и правила этого раздела к ним
не относятся.