advanced

Versioning and compatibility

Развивайте API через additive changes, deprecation windows, tolerant clients, explicit versions и migration plans.

API живут дольше клиентов. Предпочитайте обратно совместимую эволюцию; явную версию — только при неизбежном breaking change.

Тактики совместимости:

  • **Additive changes**: новые optional fields, endpoints, enum values, которые клиенты игнорируют.
  • **Tolerant readers**: клиенты игнорируют неизвестные JSON fields; серверы принимают пропущенные новые поля с defaults.
  • **Deprecation windows**: заголовок Sunset, changelog, метрики по старым полям.
  • **Version channels**: префикс URL (`/v2/orders`), заголовок (`Accept-Version: 2`) или media type — одна основная стратегия на API surface.
					GET /v2/orders/1
Accept: application/vnd.myapi.orders+json;version=2
				

Breaking examples, требующие новой версии или resource:

  • Переименование или смена типа полей, от которых зависят клиенты.
  • Изменение формы ошибок или смысла status code.
  • Удаление endpoints или ужесточение validation.

На интервью: как безопасно выкатывать additive changes, обнаруживать breaking usage, мигрировать mobile и сторонних consumers.

Типовые ошибки: тихие breaking changes, несколько схем версионирования сразу, версия на каждый мелкий твик, нет телеметрии по deprecated paths.

Компромисс: видимость URL versioning против чистоты headers — важнее согласованность и документация, чем конкретный механизм.

Чеклист:

  • По умолчанию additive, compatible changes.
  • Документируйте срок deprecation и Sunset.
  • Одна основная схема версионирования на public API.
  • CI на breaking diffs OpenAPI/schema.