Юрий Белк – Full stack Developer (страница 30)
Пример:
GET /tasks?limit=20&cursor=eyJjcmVhdGVkX2F0IjoiLi4uIiwiaWQiOiIuLi4ifQ==
Ответ
Единый формат списка:
json
{
"items": [ … ],
"page": {
"next_cursor": "....",
"has_more": true
}
}
Правила:
– если has_more=false, next_cursor может быть null
– курсор непрозрачный для клиента (он не обязан понимать содержимое)
Если для некоторых endpoint’ов нужен offset – лучше не смешивать. Но если уж смешали, делайте разные endpoint’ы или разные модели ответа, чтобы клиент не гадал.
8.5. Versioning (версионирование)
Варианты:
– через путь: /api/v1/…
– через заголовок: Accept: application/vnd.taskflow.v1+json
Для простоты и ясности берём версию в пути:
– /api/v1
Почему:
– проще дебажить,
– проще проксировать,
– проще объяснить.
Правило:
– ломающее изменение – новая версия (/v2)
– не ломающее – расширяем текущую версию (добавляем поля, новые endpoints)
8.6. Endpoints: фиксируем основной набор
Ниже – список endpoint’ов, который покрывает домен из главы 6. Формат: метод, путь, смысл, основные ответы.
8.6.1. Auth / User
POST /api/v1/auth/register
Создать пользователя.
Request:
– password
– name (опционально)
Responses:
– 201 → создан пользователь (+ возможно токен)
– 400 validation_error
– 409 conflict (email занят)
– 429 rate_limited
POST /api/v1/auth/login
Логин.
Request:
– password
Responses:
– 200 → токен
– 400 validation_error
– 401 unauthorized
– 429 rate_limited
GET /api/v1/me
Текущий пользователь.
Responses:
– 200 user profile
– 401 unauthorized
8.6.2. Workspaces и участники
POST /api/v1/workspaces
Создать workspace.
Headers:
– Idempotency-Key (рекомендуется)
Responses:
– 201 workspace