Публичный API: документация, лимиты, ключи

↑ 5.1 Проектирование REST API · ← Предыдущая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Что нужно, чтобы API могли безопасно использовать внешние разработчики.

Объяснение

АспектПрактика
ДокументацияOpenAPI + примеры, гайд быстрого старта, changelog, коды ошибок
АутентификацияAPI-ключи для простых сценариев, OAuth 2.0 для доступа от имени пользователя
Лимитыrate limit по ключу/плану, заголовки X-RateLimit-*/Retry-After, ответ 429
Квоты и тарифысуточные/месячные лимиты, биллинг
БезопасностьHTTPS, минимальные права ключей (scopes), ротация, IP allowlist
Наблюдаемостьлогирование по ключам, метрики использования, алерты на аномалии
Песочницатестовое окружение с фиктивными данными
SDKгенерация клиентов из OpenAPI
Вебхукиподписи и повторы (см. Вебхуки: приём, подпись, повторы, идемпотентность)
builder.Services.AddRateLimiter(o => o.AddPolicy("by-key", ctx =>
    RateLimitPartition.GetTokenBucketLimiter(ctx.Request.Headers["X-Api-Key"].ToString(),
        _ => new TokenBucketRateLimiterOptions { TokenLimit = 100, TokensPerPeriod = 10, ReplenishmentPeriod = TimeSpan.FromSeconds(1) })));

Нюансы и подводные камни

  • Ключ храните хэшированным, показывайте только один раз.
  • Прозрачные, стабильные ошибки и коды — часть контракта.
  • Вводите лимиты с самого начала: снять ограничения проще, чем добавить.
  • Разделяйте публичный и внутренний API, не выставляйте внутренние endpoint-ы.
  • Планируйте депрекацию и версионирование до первых клиентов.

Практика

  1. Добавьте API-ключи с scopes и лимитами по плану.
  2. Опубликуйте OpenAPI в Scalar/Swagger UI с примерами.
  3. Соберите дашборд использования по ключам.

Вопросы с ответами

Связанные темы