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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Slim框架支持API版本控制相关的知识,希望对你有一定的参考价值。

我们一直在使用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
SlimRoute::setDefaultConditions(array(
    'apiVersion' => '[1-29]'       /* indicates integer API version between 1 and 29 */
));

任何支持API版本1-29的API(完全相同的处理)

$app = new SlimSlim();
$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的应用程序范围的路由条件。

答案

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

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

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

以上是关于如何使用Slim框架支持API版本控制的主要内容,如果未能解决你的问题,请参考以下文章

Slim 框架和 GET/PUT/POST 方法

如何在 Slim 中访问 POST 请求的 JSON 请求正文?

Slim 框架上 CORS 期间的预检授权标头

通过 Angular JS $http.post 使用 slim 框架时出现 404 无效的 http 状态代码

使用 SLIM 和 SWAGGER 的 RESTful API 文档?

在 Slim 框架上发布请求