Версионирование REST API
Версионирование API — это поддержка в рабочем состоянии нескольких версий одного и того же метода. Версионирование API соблюдать требование обратной совместимости, позволяя вносить изменения без нарушения работы потребителей.
⚙️ Как это работает
1️⃣ Под номером версии фиксируется существующий контракт API, который используется потребителями
2️⃣ Если возникла необходимость внести изменения в существующий контракт, заводится отдельная ветка под дорабатываемый метод
3️⃣ Изменения публикуются в новой версии метода API, при этом старая версия остаётся рабочей до тех пор, пока у неё есть потребители
4️⃣ Потребители сами решают, в какой момент они будут готовы перейти на новую версию того или иного метода
✍️ Пример
Допустим, есть метод который позволяет опубликовать статью в блоге:
Метод принимает на вход в теле запроса следующие параметры, которые являются обязательными:
Если мы добавим новый обязательный параметр
Поэтому создаём новую версию метода
При этом старая версия метода (
Способы версионирования API
💫 Префикс URI
Пример:
✔️ Способ простой в проектировании, реализации и документировании
✖️ Создает большое количество дубликатов URL и может снизить производительность приложения
💫 Параметр запроса
Пример:
✔️ Способ рекомендуется, если важно HTTP-кеширование для повышения пропускной способности
✖️ Приводит к загрязнению URI, так как префиксы и суффиксы добавляются к основным строкам URI
💫 HTTP заголовок запроса
Пример:
✔️ Не приводит к загрязнению URI, легко реализовать
✖️ Приводит к неправильному использованию заголовков, т.к они нужны для метаинформации
💫 Feature-версионирование
У клиента API есть набор фич. При отправке запроса, сервер проверяет его набор фич и на этой основе сам определяет нужную версию для каждого клиента
✔️ Можно использовать в качестве внутреннего API
✖️ Со временем фичи могут вступить в конфликт, если отвечают за одну и ту же часть бизнес-логики
⭐️ Подборка материалов доступна в базе знаний по системному анализу
#api
Версионирование API — это поддержка в рабочем состоянии нескольких версий одного и того же метода. Версионирование API соблюдать требование обратной совместимости, позволяя вносить изменения без нарушения работы потребителей.
⚙️ Как это работает
✍️ Пример
Допустим, есть метод который позволяет опубликовать статью в блоге:
POST /v1/articles
Метод принимает на вход в теле запроса следующие параметры, которые являются обязательными:
{
"text": "string",
"author": "string",
"title": "string"
}
Если мы добавим новый обязательный параметр
category
, не применяя версионирование API и не оповестив потребителей, то получим ситуацию, когда у потребителей будут сыпаться ошибки, а у нас пепел на нашу голову.Поэтому создаём новую версию метода
POST /v2/articles
и все изменения реализуем там:{
"text": "string",
"author": "string",
"title": "string",
"category": "string"
}
При этом старая версия метода (
POST /v1/articles
) продолжает работать.Способы версионирования API
Пример:
GET /v1/users
Пример:
GET /users?version=v1
Пример:
GET /users
, а версию передаём в headers: version=v1У клиента API есть набор фич. При отправке запроса, сервер проверяет его набор фич и на этой основе сам определяет нужную версию для каждого клиента
⭐️ Подборка материалов доступна в базе знаний по системному анализу
#api