如何使用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 中访问 POST 请求的 JSON 请求正文?
通过 Angular JS $http.post 使用 slim 框架时出现 404 无效的 http 状态代码