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

问题描述 投票:2回答:1

我们一直在使用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,}'));

一个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,并且我需要为新版本的API更新3个API,那么我可以像上面针对API_B那样更改这三个API,并更改apiVersion的应用程序范围的路由条件。

php api slim api-versioning
1个回答
0
投票

我找到了一篇解读这篇文章的解决方案:https://michaelheap.com/middleware-slim-and-versioning/

如果您只在变量名中进行了更改,则文章中的解决方案就像魅力一样。

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

© www.soinside.com 2019 - 2024. All rights reserved.