Как поддерживать управление версиями API с помощью Slim Framework

Мы использовали Slim Framework для создания API-интерфейсов REST для мобильного приложения, и сейчас index.php находится в папке v1 / внутри корневого веб-каталога. Этот index.php содержит все API.

Однако в связи с тем, что для более новых версий мобильного приложения требуется несколько иной отклик для одной и той же конечной точки API, нам необходимо API-управление версиями, которое можно легко масштабировать. Мы не хотим использовать разные папки (например, v2, v3, …), каждая из которых имеет свой index.php.

В идеале, «вероятно» должен быть только один файл index.php, и, скажем, есть требование добавить новую версию API vX, в которой изменения могут быть только в одном из распространенных API, я хотел бы, чтобы изменения кода быть минимальным, может быть ограничено только этой функцией API и может быть несколько другим (чтобы включить эту новую версию для всех других API).

Есть ли простой и короткий способ добиться этого, чтобы легко добавлять новые версии? Как это обычно делается?

РЕДАКТИРОВАТЬ 1:

Ниже приведено «потенциальное» решение для устранения этой проблемы, пожалуйста, не стесняйтесь указывать на проблемы в ней, и лучшие решения:

Я решил использовать условия (условия Маршрута для всего приложения), чтобы достичь этого:

<?php
\Slim\Route::setDefaultConditions(array(
'apiVersion' => '[1-29]'       /* indicates integer API version between 1 and 29 */
));

Любой API, который поддерживает версии API 1-29 (точно такая же обработка)

$app = new \Slim\Slim();
$app->get('/:apiVersion/API_A/:lastName', $callableA)
->conditions(array('lastName' => '[a-z]{10,}'));

API, который отличается для версии 1-21 и отличается для версии 22-29

$app->get('/:apiVersion/API_B, $callableB1)
->conditions(array('apiVersion' => '[1-21]'));
$app->get('/:apiVersion/API_B, $callableB2)
->conditions(array('apiVersion' => '[22-29]'));

Так что, если я скажу 100 API, и мне нужно внести изменения в 3 API для новой версии 30 API, то я могу просто изменить эти три API, как это было сделано выше для API_B, и изменить условие маршрута для всего приложения для apiVersion. ,

2

Решение

Я нашел одно решение, читая эту статью: https://michaelheap.com/middleware-slim-and-versioning/

Если у вас есть изменения только в именах переменных, решение в статье работает как шарм.

В противном случае вы можете установить новый атрибут (скажем, версию) в промежуточном программном обеспечении before для обнаружения версии API, которую запрашивает пользователь, и внести соответствующие изменения в ваш контроллер, прочитав этот атрибут.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]