Перейти к содержимому

Версионирование и устаревание

Версия — это сегмент пути, и это единственное место, где она появляется:

https://api.zelnum.com/api/v1

Живая версия одна. В документе OpenAPI она обозначена как 1.0.0; вы адресуете сегмент пути v1. Тела ответов намеренно не повторяют версию, поэтому нет второго поля, которое нужно синхронизировать.

КлассПримерыВлияние на вас
АддитивныеНовый эндпоинт, новое необязательное поле запроса, новое поле ответа, новый продукт в каталогеНет. Версия не повышается, действий не требуется.
ПоведенческиеНовое значение в существующем перечислении, например error_code или billing_status; изменённое значение по умолчаниюОбычно нет, но может сломать исчерпывающее сопоставление.
ЛомающиеУдаление или переименование поля, смена типа, изменение смысла статуса, требование нового заголовкаТребуют новой версии.
КонтрактныеДокументация неверно описывала поведение APIНет — но см. ниже.

Документацию правят на месте, когда поведение API было описано неверно. Это изменение документации, а не контракта: API не менялся, менялось описание. Поскольку исправление — ровно то событие, которое нельзя увидеть в записи журнала вида «ничего не изменилось», исправления перечисляются явно в журнале изменений.

Если исправление затрагивает то, на что вы опирались, оно появляется там как примечание, а не как молчаливая правка.

Когда операция устаревает, в документе OpenAPI её помечают deprecated: true, а этот сайт документирует замену. Операция продолжает работать в течение периода предупреждения, и этот период указывается там, где объявлено устаревание.

Устаревание никогда не происходит в том же релизе, что и появление замены. Обе версии живут одновременно, поэтому вы можете мигрировать в удобном для себя темпе, а не во время инцидента.

POST /v1/realtime/detect сохранён для клиентов предрелизной версии и помечен в контракте как устаревший. Новым интеграциям следует использовать эндпоинты конкретной серии.

Это переименование, а не переработка — тело запроса и ответ имеют ту же форму:

ПрежнийТекущий
ЭндпоинтPOST /v1/realtime/detectPOST /v1/realtime/check/phone или POST /v1/realtime/check/email
СерияПодразумевается отправленными продуктамиЯвно задана в пути и должна им соответствовать
Поле продуктовproducts (алиас)product_ids
Idempotency-KeyОбязательноОбязательно

Миграция — это изменение на две строки:

Окно терминала
# Before
curl -X POST "https://api.zelnum.com/api/v1/realtime/detect" \
-H "X-API-Key: YOUR_KEY_HERE" \
-H "Idempotency-Key: UNIQUE_REQUEST_ID" \
-H "Content-Type: application/json" \
-d '{"identifier":"+8613800138000","products":[47]}'
# After — the series moves into the path and the field is renamed
curl -X POST "https://api.zelnum.com/api/v1/realtime/check/phone" \
-H "X-API-Key: YOUR_KEY_HERE" \
-H "Idempotency-Key: UNIQUE_REQUEST_ID" \
-H "Content-Type: application/json" \
-d '{"identifier":"+8613800138000","product_ids":[47]}'

Отправка product_ids и products в одном запросе отклоняется как 400 invalid_realtime_request, поэтому их нельзя смешивать при поэтапном развёртывании.