Для чего нужно версионирование API?

«Для чего нужно версионирование API?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Версионирование API — это практика управления изменениями в публичном интерфейсе сервиса. Оно позволяет развивать API, не нарушая работу существующих клиентских приложений.

Основные цели:

  1. Обеспечение обратной совместимости: Старые клиенты (v1) продолжают работать, пока вы развертываете новые функции в v2.
  2. Контролируемый вывод изменений: Клиенты могут мигрировать на новую версию в своем темпе.
  3. Четкая коммуникация: Версия явно указывает, какой контракт используется.

Распространенные стратегии версионирования:

  • В URI пути: https://api.example.com/v1/users (наиболее явный и простой).
  • В заголовке запроса: Accept: application/vnd.company.api+json;version=2
  • В параметре запроса: https://api.example.com/users?api-version=2 (менее предпочтительно).

Пример (Spring Boot):

// Контроллер для API v1
@RestController
@RequestMapping("/api/v1/users")
public class UserControllerV1 {
    @GetMapping
    public List<UserV1> getUsers() { /* ... */ }
}

// Контроллер для API v2 с новыми полями
@RestController
@RequestMapping("/api/v2/users")
public class UserControllerV2 {
    @GetMapping
    public List<UserV2> getUsers() { /* ... */ }
}

Без версионирования любое изменение (переименование поля, изменение формата ответа) немедленно сломает всех клиентов.