Статические эндпоинты
Данные доски отдаются статикой: за /api/v1/ стоит веб-сервер с файлами, а не приложение. Отсюда несколько особенностей поведения, описанных ниже.
Что отдаётся
| Адрес | Что внутри | Кеш |
|---|---|---|
GET /api/v1/board.json | Доска: спринт, колонки, 22 задачи | max-age=300 |
GET /api/v1/departments.json | Четыре отдела | max-age=300 |
GET /api/v1/members.json | Девять участников | max-age=300 |
GET /api/v1/tasks/<id>.json | Карточка задачи: описание, чек-лист, обсуждение, история | max-age=300 |
Карточки лежат по одной на файл — двадцать два небольших ответа вместо одного большого. Открытая задача загружает только себя, и кеш не сбрасывается целиком при правке одной из них.
Расширение .json в пути обязательно — это имена файлов на диске, а не маршруты. Во вкладке «API» самого стенда адреса показаны в укороченном виде (/api/v1/board), так читается опрятнее, но запрос уходит по полному имени.
Эндпоинты сеанса
Всё, что относится к текущему пользователю, отвечает 401.
| Адрес | Код | Поле error.code |
|---|---|---|
/api/v1/me | 401 | unauthorized |
/api/v1/notifications | 401 | unauthorized |
/api/v1/auth/session | 401 | unauthorized |
/api/v1/auth/sso | 401 | sso_not_configured |
{
"error": {
"code": "unauthorized",
"message": "Требуется авторизация",
"request_id": "a1b2c3d4e5f6…"
}
}
Ограничения
- Только чтение. Разрешены
GETиHEAD. Остальные методы отсекаются раньше, чем доходят до сервера. - Нет пагинации. Поле
has_moreв коллекциях всегдаfalse, курсора нет. - Нет фильтрации на стороне сервера. Параметры запроса игнорируются: отдаётся файл целиком, отбор делает браузер.
- Нет ключей и ограничений частоты.
Кеширование и повторные запросы
Файлы отдаются с ETag и Last-Modified, поэтому повторный заход даёт 304 вместо полного тела. Статика интерфейса (/assets/) и запись обзора (/hls/tour/) живут неделю, JSON — пять минут.
Индексация
Каталоги /api/, /app/ и /hls/ закрыты в robots.txt и отдают X-Robots-Tag: noindex.