CodeIgniter中的正确自定义API版本控制

kq0g1dla  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(84)

我已经建立了一个CodeIgniter 2.0的网站,提供了一个API。我现在的点,我需要创建另一个版本的API,将不会向后兼容与以前的版本。这是我正在尝试做的:
1.创建版本化的API控制器,类似于{root}/application/controllers/API/v1.0/API.php和/v2.0/api. php等.
1.允许更高的API版本继承以前的版本,这样我只需要覆盖那些我想要覆盖的方法。
CodeIgniter似乎不喜欢这种类型的文件夹结构。而且,如果我所有的API控制器都有相同的类名,我将无法子类化(即“class API extends API”将不起作用)。也就是说,我宁愿不必这样做:“class API2_0 extends API1_0”,但如果需要的话,我会这样做。
我觉得URI路由将是这里的关键(我对它的掌握有限),但是如果有人已经经历了这个思考过程,我将非常感谢一些指导。

zbwhf8kr

zbwhf8kr1#

无论你如何构造你的API,只要控制器和诸如此类的东西,然后就有了:

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

字符串
使用Routes,您可以:

/api/1/foo
/api/2/foo

5q4ezhmt

5q4ezhmt2#

我认为你需要在你的逻辑改进,请参阅这个答案代码点火器动态路由关于添加自定义路由到您的网站,您可以添加自己的.当涉及到控制器的最佳做法是有一个MY_Controller在您的应用程序/核心/文件夹,这将是所有应用程序控制器的基本父.下一步,在application/libraries/Apiv1_Controller.php中创建一个新的库来扩展MY_Controller类,请注意,您需要__autoload()函数来自动从应用程序加载类/libraries文件夹。然后,所有API版本1控制器将扩展Apiv1_Controller,从而获得对其方法的访问。对于版本2,只需创建另一个扩展Apiv1_Controller的库Apiv2_Controller,版本2的控制器将扩展此类。这样,您的逻辑将保留在一个类中,所以你不需要创建额外的文件夹。另外,通过自定义路由,你可以将路由Map到不同的控制器。希望这对你有帮助。

//API V1 Controller
class Someapi extends Apiv1_Controller
{

}

//API V2 Controller
class Otherapi extends Apiv2_Controller
{

}

字符串

dsf9zpds

dsf9zpds3#

默认情况下CI不支持字符“.”作为文件夹名称。但你可以改变文件系统/核心/路由器. php和改变函数set_directory为不替换“.”在文件夹名称从这个

public function set_directory($dir, $append = FALSE)
{
    if ($append !== TRUE OR empty($this->directory))
    {
        $this->directory = str_replace('.', '', trim($dir, '/')).'/';
    }
    else
    {
        $this->directory .= str_replace('.', '', trim($dir, '/')).'/';
    }
}

字符串

public function set_directory($dir, $append = FALSE)
{
    if ($append !== TRUE OR empty($this->directory))
    {
        $this->directory = trim($dir, '/').'/';
    }
    else
    {
        $this->directory .= trim($dir, '/').'/';
    }
}


因此,控制器文件夹结构将是

controllers/api/2.0/your_controller.php
controllers/api/2.1/your_controller.php

相关问题