Я читав про стратегії версій API API, і те, на що жоден з них не звертається, полягає в тому, як ви керуєте базовою базою коду.
Скажімо, ми робимо купу змін, що змінюються в API - наприклад, змінюючи наш ресурс клієнта, щоб він повертав окремо forename
і surname
поля замість одного name
поля. (У цьому прикладі я використовую рішення для версії URL-адреси, оскільки зрозуміти пов'язані поняття легко, але питання однаково застосовне до переговорів щодо вмісту чи спеціальних заголовків HTTP)
Тепер у нас є кінцева точка у http://api.mycompany.com/v1/customers/{id}
, а інша несумісна кінцева точка у http://api.mycompany.com/v2/customers/{id}
. Ми все ще випускаємо помилки та оновлення безпеки API v1, але тепер розробка нових функцій зосереджена на v2. Як ми записуємо, тестуємо та розгортаємо зміни на нашому сервері API? Я бачу щонайменше два рішення:
Використовуйте гілку / тег управління джерелом для бази даних коду v1. v1 і v2 розробляються та розгортаються незалежно, при цьому злиття керування редагуванням використовуються для необхідності застосування одного і того ж виправлення до обох версій - аналогічно тому, як ви керуєте базами коду для нативних програм, коли розробляєте основну нову версію, підтримуючи попередню версію.
Повідомте про кодову базу даних про версії API, тож ви отримаєте єдину базу даних, яка включає в себе як представлення клієнтів v1, так і представлення клієнтів v2. Розглядайте версії як частину архітектури рішення замість проблеми розгортання - можливо, використовуючи якусь комбінацію просторів імен та маршрутизації, щоб переконатися, що запити обробляються правильною версією.
Очевидною перевагою моделі гілки є те, що видаляти старі версії API - тривіально - просто перестаньте розгортати відповідну гілку / тег - але якщо ви використовуєте кілька версій, ви можете закінчити справді заплутану структуру гілки та конвеєр розгортання. Модель "уніфікованої бази даних" уникає цієї проблеми, але (я думаю, що) буде набагато складніше видаляти застарілі ресурси та кінцеві точки з бази даних, коли вони більше не потрібні. Я знаю, що це, мабуть, суб’єктивно, оскільки навряд чи є простий правильний відповідь, але мені цікаво зрозуміти, як організації, які підтримують складні API в декількох версіях, вирішують цю проблему.