3

我们一直在使用 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 更改应用程序范围的路由条件.

4

0 回答 0