如何使用Slim框架支持API版本控制

时间:2016-01-23 19:05:34

标签: php api slim api-versioning

我们一直在使用Slim框架为移动应用程序创建REST API,现在index.php位于web根目录中的文件夹v1 /内。此index.php包含所有API。

但是,对于相同api终点需要稍微不同响应的移动应用程序的新版本,我们需要API版本,这可以很容易扩展。我们不想使用各自具有index.php的不同文件夹(如v2,v3,...)。

理想情况下,应该“可能”只是一个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版本1-29的API(完全相同的处理)

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

与版本1-21不同的API,与版本22-29不同的API

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

因此,如果我说100个API,并且我需要为新版本的API更新3个API,那么我可以像上面针对API_B那样更改这三个API,并更改应用程序范围的路径apiVersion的条件。

1 个答案:

答案 0 :(得分:0)

我在阅读本文时找到了一种解决方案:https://michaelheap.com/middleware-slim-and-versioning/

如果仅在变量名中进行了更改,则本文中的解决方案就像一个超级按钮。

否则,您可以在中间件之前的版本中设置新属性(例如版本),以检测用户要求的API版本,并通过读取该属性在控制器中进行相应的更改。