将现有的Codeigniter应用程序转换为私有API后端

时间:2019-02-13 12:13:52

标签: rest codeigniter codeigniter-3 php-7 api-design

我正在设法将基于codeigniter构建的现有web应用程序转换为rest API后端。我是整个REST API的新手。

作为旁注,我知道每个人似乎都在使用rest-server library,但是我对这条路线不感兴趣,因此我正在寻找不在该库的上下文。

我似乎无法找到答案的是,首先加载页面时,从DB检索数据,然后加载视图。这是一个get请求,但并不完全适合其余的API类型体系结构。您将获得页面所需的一堆东西(可能是一个或多个资源),并将其放入数据数组中,然后调用视图。

最好的方法是先通过is_ajax_request()方法检查请求是否为ajax,从而将这些调用与api分开吗?还是我在想这是错误的方式?

这是我为API调用设置概念证明的方式,但是我对如何将其与传统的“以我为视角”的体系结构集成感到迷茫。也许不是,我在所有这些方面都是完全错误的。

我正在使用路由来确保正确配置网址:

$route['users'] = 'users/index';
$route['users/(:any)'] = 'users/index';

从那里,我的基本控制器构造函数方法创建了一些类:

$this->request = new stdClass()
$this->api = new stdClass();
$this->request->http_method =($this->input->method()) ?? 'get';
$this->request->resource = $this->uri->segment(1);

我在处理初始请求的基础控制器中放置了一个索引方法:

function index()
    {
        $method = $this->route_request();
        $id = ($this->uri->segment(2)) ?? NULL;

        if(method_exists($this, $method))
        {
            $this->{$method}($id);
        }
        else
        {
            $this->output->set_status_header(404);
            exit;
        }
    }

请求被路由到适当的类方法:

protected function route_request()
    {
        $this->api->method = $this->request->resource . '_';

        switch($this->request->http_method)
        {
            case 'get':
                $this->parse_params();
                $this->api->method .= $this->request->http_method;
                break;
            case 'post':
                echo 'post';
                break;
            case 'patch':
                echo 'patch';
                break;
            case 'delete':
                echo 'delete';
                break;
        }

        return $this->api->method;

    }

并且此方法解析查询字符串以获取请求:

protected function parse_params()
{
    $input = $this->input->get();

        $this->request->params['select_fields'] = ($input['fields']) ?? '*';
        unset($input['fields']);
    if(sizeOf($input) > 0)
    {
        $this->request->params['filters'] = $input;
    }
}

以上所有结果均称为:

function users_get($id)
{
    $response = $this->Users_model->read($id, $this->request->params);
    echo json_encode($response);
}

0 个答案:

没有答案