2

我已经建立了一个提供 API 的 CodeIgniter 2.0 站点。我现在需要创建另一个版本的 API,它不会与以前的版本向后兼容。这是我正在尝试做的事情:

  1. 创建版本化的 API 控制器,例如 {root}/application/controllers/api/v1.0/api.php 和 /v2.0/api.php 等...
  2. 允许更高的 API 版本从以前的版本继承,所以我只需要覆盖那些我想要的方法

CodeIgniter 似乎不喜欢这种类型的文件夹结构。而且,如果我所有的 API 控制器都具有相同的类名,我将无法进行子类化(即“类 API 扩展 API”将不起作用)。也就是说,我宁愿不必这样做:“类 API2_0 扩展 API1_0”,但如有必要,我会这样做。

我觉得 URI 路由将是这里的关键(我对它的理解有限),但如果有人已经经历过这个思考过程,我将非常感谢一些指导。谢谢!!!

-史蒂夫

4

2 回答 2

3

构建你的 API,但是你通常会尽可能的控制器和诸如此类的东西,然后只需要:

application/controllers/api_1/foo.php
application/controllers/api_2/foo.php

使用Routes你可以做到:

/api/1/foo
/api/2/foo
于 2011-04-29T15:50:28.267 回答
0

我认为您需要改进逻辑,请参阅此答案代码点火器动态路由关于向您的站点添加自定义路由,您可以添加自己的路由。对于控制器,最佳实践是在您的 application/core/ 文件夹中有一个 MY_Controller ,它将成为所有应用程序控制器的基本父级。接下来,在 application/libraries/Apiv1_Controller.php 中创建将扩展 MY_Controller 类的新库,请注意,您将需要 __autoload() 函数来自动从 application/libraries 文件夹加载类。然后,您的所有 API 版本 1 控制器将扩展 Apiv1_Controller 从而获得对其方法的访问权限。对于版本 2,只需创建另一个库 Apiv2_Controller 扩展 Apiv1_Controller 和版本 2 中的控制器将扩展此类。这样,您的逻辑将保留在一个类中,因此您不必创建其他文件夹。同样使用自定义路由,您可以将您的路由映射到不同的控制器。希望这对您有所帮助。

//API V1 控制器
Someapi 类扩展了 Apiv1_Controller
{

}

//API V2 控制器
类 Otherapi 扩展 Apiv2_Controller
{

}
于 2011-04-28T20:00:10.647 回答