Версии и совместимость
Сейчас: v1 нестабильна
Версия стоит в пути с первого эндпоинта — /api/v1/… — но версии не
плодятся. Это две разные вещи.
v1 в пути — это место, куда потом можно поставить v2. Стоит один сегмент.
Переезд с /api/parcels на /api/v1/parcels потом стоил бы всех клиентов
сразу.
При этом пока у API нет ни одного внешнего потребителя, который не может обновиться синхронно с нами, ломающие изменения выходят в v1. Так честнее, чем обещать совместимость и тихо её нарушать.
Что считается ломающим изменением
- удаление поля из ответа;
- переименование поля или эндпоинта;
- новое обязательное поле в запросе;
- сужение того, что принимается: новый максимум длины, убранное значение перечисления;
- изменение кода ответа при том же исходе.
Не ломающее: новое поле в ответе, новое необязательное поле в запросе, новое значение перечисления, новый эндпоинт. Пишите клиент так, чтобы незнакомое поле в ответе его не роняло.
Когда появится v2
Когда появится первый внешний потребитель, который не может обновиться вместе с нами. Не раньше.
До тех пор ломающие изменения объявляются заранее: старое поведение, если его
вообще можно оставить, отвечает с заголовками Deprecation и Sunset, а само
изменение попадает в changelog этой документации.
Что не версионируется никогда
Маршруты самого сайта. Они уезжают на прод в одном коммите с фронтендом,
который их вызывает, поэтому обещание совместимости там — это обещание самим
себе. Публичный контракт — это /api/v1 и MCP, и только они.