01Разработка
Проектирование REST/RPC API
Ресурсы, эндпойнты, контракты, версионирование, ошибки, идемпотентность, rate limits.
Спроектируй API для {{domain}}. Потребители: {{consumers}}.
1. Стиль
- REST — для CRUD-ориентированных ресурсов
- RPC (POST /verbs) — для действий-команд
- GraphQL — для гибких выборок с фронтенда
- Выбери один доминирующий стиль, не смешивай
2. Ресурсы
Перечисли. Для каждого:
- Имя (множественное, kebab-case в URL)
- Поля (с типами)
- Связи (1:1, 1:N, M:N)
- Lifecycle (создание, изменение, удаление, мягкое удаление?)
3. Эндпойнты
GET /v1/resources # список с пагинацией
GET /v1/resources/:id # один
POST /v1/resources # создать
PATCH /v1/resources/:id # частичное обновление
DELETE /v1/resources/:id # удалить
POST /v1/resources/:id:verb # действие (например, :archive)
4. Параметры
- Пагинация: cursor-based (рекомендую) —
?cursor=...&limit=20 - Фильтры:
?status=active&owner_id=42 - Сортировка:
?sort=-created_at(минус = desc) - Sparse fields:
?fields=id,name,status
5. Формат ответа
{
"data": { ... } | [ ... ],
"meta": { "next_cursor": "..." }
}
6. Ошибки
HTTP статус + структурированное тело:
{
"error": {
"code": "validation_failed",
"message": "Email is required",
"fields": { "email": "required" }
}
}
Стандартные коды: 400 (validation), 401 (no auth), 403 (no permission), 404, 409 (conflict), 429 (rate limit), 500.
7. Версионирование
- В URL:
/v1/— простой и явный - Не
Accept: application/vnd.app.v1+json— сложно отлаживать - Breaking changes только при смене major
8. Идемпотентность
- GET/HEAD/PUT/DELETE — идемпотентны по природе
- POST — клиент шлёт
Idempotency-Keyheader, сервер кеширует ответ на N часов
9. Rate limits
- Заголовки:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset - 429 при превышении
- Разные лимиты для разных tier'ов
10. Аутентификация
- Bearer-токен в
Authorization: Bearer ... - Не сессии для API (только для веб-клиента)
Документация: OpenAPI 3 спека → доки сгенерируются из неё.
Принципы
- Имена ресурсов — существительные, не глаголы
- Один способ сделать одну вещь
- Консистентность важнее красоты
- Совместимость на минор-уровне обязательна
Похожие промты
start / glossary
Что такое API простыми словами + примеры
Все говорят «вызови API», «у этого сервиса есть API» — а что это? Объясним через ресторан и официанта. Плюс реальный запрос.
beginnerstartglossary
Открыть
Начальный15 мин
site / development
Стартовать новый Next.js проект
Создание Next.js приложения с разумными настройками: App Router, TypeScript, Tailwind, базовые компоненты, SEO.
nextjsscaffoldsetup
Открыть
Начальный≤15 мин
site / development
Превратить спецификацию фичи в план реализации
Декомпозиция требования на конкретные шаги, файлы, типы и порядок изменений.
planningfeaturedecomposition
Открыть
Начальный15-30 мин