我们一直在使用 Slim 框架为移动应用程序创建 REST API,现在 index.php 位于 web 根目录下的 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 版本 1-29 的 API(完全相同的处理)
$app = new \Slim\Slim();
$app->get('/:apiVersion/API_A/:lastName', $callableA)
->conditions(array('lastName' => '[a-z]{10,}'));
版本 1-21 和版本 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,并且我需要为新版本 30 的 API 更改 3 个 API,那么我可以像上面对 API_B 所做的那样简单地更改这三个 API,并为 apiVersion 更改应用程序范围的路由条件.