Echolot
Руководства

Демо-API

Alpenglow — ненастоящий магазин outdoor-снаряжения на demo.echolot.dev, на котором можно попробовать любую часть Echolot.

https://demo.echolot.dev — API, созданный для знакомства с Echolot: Alpenglow, магазин outdoor-снаряжения в Цюрихе и Берне. Ничего приватного в нём нет, и ничто из отправленного туда не сохраняется. GET https://demo.echolot.dev/ выводит список всех эндпоинтов.

Вход

Демо-аккаунт — heidi@alpenglow.ch с паролем alpenglow:

POST https://demo.echolot.dev/v1/auth/token
Content-Type: application/json

{ "email": "heidi@alpenglow.ch", "password": "alpenglow" }

В ответе приходит access_token (JWT, действует час). Передавайте его как Authorization: Bearer <token> на /v1/me и /v1/orders. Тот же эндпоинт принимает и учётные данные клиента OAuth 2: ID клиента alpenglow-demo, секрет клиента demo-secret.

Магазин

ЭндпоинтЧто делает
GET /v1/productsТовары; параметры q, category, tag, in_stock=true, sort (name, price, -price, rating), page и per_page. Постраничная навигация — в заголовках Link и X-Total-Count.
GET /v1/products/{sku}Один товар, например TNT-MH-2P, с ETag (передайте If-None-Match, чтобы получить 304).
GET /v1/products/export40 000 товаров, около 14 МБ: проверьте режимы просмотра на большом ответе.
GET /v1/categoriesКатегории с числом товаров в них.
GET /v1/meВошедший пользователь.
GET /v1/ordersЗаказы Хайди; ?status=shipped.
POST /v1/orders{"lines": [{"sku": "TNT-MH-2P", "quantity": 1}]}. Отвечает 201 с Location, 422 с описанием ошибки и тем же заказом для того же Idempotency-Key.
GET /v1/orders/{id}Один заказ, например ord_7Hk2Lw.
DELETE /v1/orders/{id}Отмена: 204 или 409, если заказ уже отправлен. На самом деле ничего не меняется.

Ошибки приходят как problem details (application/problem+json) с описанием того, что пошло не так. Спецификация OpenAPI магазина лежит по адресу https://demo.echolot.dev/openapi.yaml.

GraphQL

POST https://demo.echolot.dev/v1/graphql с интроспекцией, поэтому Echolot дополняет поля по мере ввода. Схема лежит по адресу /shop.graphql.

query SearchProducts($text: String!, $first: Int = 10) {
  search(text: $text, first: $first) {
    totalCount
    nodes { sku name price { amount currency } stock { warehouse available } }
  }
}

События в реальном времени

  • WebSocket wss://demo.echolot.dev/v1/orders: событие заказа каждые 1,5 секунды. Отправьте {"op": "subscribe", "channel": "orders"}, {"op": "ping"} или любой JSON с id, чтобы получить подтверждение. Сеанс длится три минуты; сообщения могут быть до 8 КБ, не более 20 за десять секунд.
  • Server-Sent Events GET https://demo.echolot.dev/v1/orders/events: 20 событий с интервалом в секунду, затем end. Передайте Last-Event-ID, чтобы продолжить.

MCP

https://demo.echolot.dev/mcp — MCP-сервер по Streamable HTTP. Добавьте его на странице MCP-серверов, чтобы попробовать его инструменты (search_catalog, get_product, order_status), ресурс и промпт.

Echo

Эндпоинты для знакомства с редактором запросов:

ЭндпоинтЧто делает
/echo/anythingВозвращает метод, строку запроса, заголовки и тело, которые вы отправили.
/echo/headersВозвращает отправленные вами заголовки.
/echo/status/{code}Отвечает с этим статусом.
/echo/delay/{seconds}Ждёт до 5 секунд, затем возвращает эхо.
/echo/redirect/{n}n перенаправлений, затем /echo/anything.
/echo/cookies, /echo/cookies/set?name=value, /echo/cookies/delete?nameПоказывает, устанавливает и удаляет cookie.
/echo/basic-auth/{user}/{password}200 при совпадающей авторизации Basic, иначе 401.
/echo/bearer200 при любом Bearer-токене, иначе 401.
/echo/bytes/{n}n случайных байтов, до 1 МБ.
/echo/xml, /echo/htmlДокумент XML и страница HTML.

Лимиты

Демо общее, поэтому у него есть лимиты на адрес: 120 запросов в минуту и 10 в минуту для экспорта, bytes, delay, WebSocket и SSE. При превышении лимита вы получите 429 Too Many Requests с Retry-After. Тела могут быть до 64 КБ.

gRPC, Socket.IO и MQTT там работать не могут; в их руководствах используются небольшие серверы, которые вы запускаете на своём Mac.

Исходный код демо-API лежит в репозитории документации.

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