如何使用Codeigniter Phil Sturgeon / Chris Kacerguis REST API将资源置于资源之下

时间:2018-01-24 01:34:34

标签: php rest api codeigniter

我想做这样的事情:GET api/companies/3/employees/45

解决方案1 ​​

我猜api是控制器,companies是资源,employees/45是参数。但是我如何指定它是id = 3的公司?

解决方案2

或者api可能是控制器(带索引资源),我可以使用companies/3employees/45作为参数。 对于GETPOSTPUT,我可以使用以下方法检索参数:

$this->get('blah'); // GET param
$this->post('blah'); // POST param
$this->put('blah'); // PUT param

但是DELETE是不同的,不能以相同的方式使用:

public function index_delete($id)
{
    $this->response([
        'returned from delete:' => $id,
    ]);
}

那么我该怎样做DELETE api/companies/3DELETE api/companies/3/employees/45

解决方案3

还有其他建议吗?

由于

2 个答案:

答案 0 :(得分:0)

您检查员工是否包含在请求中,然后将其传递给下面的功能示例

public function index_delete($id = NULL, $child = NULL, $child_value = NULL)
{
    switch ($child) {
      case NULL:
        $this->delete_company($id);
        break;
      case 'employee':
        $this->delete_employee($id, $child_value);
        break;
      default:
        // some error
   }


}

public function delete_company($company_id){}
public function delete_employee($company_id, $employee_id){}

所以这里会发生以下情况:

  • api/companies/1:它将转到delete_company功能以删除公司1
  • api/companies/1/employees/45:它将转到delete_employee功能以删除公司1中的员工45

答案 1 :(得分:0)

Codeigniter帮助您使用路线。转到应用程序> config> routes.php文件 添加这样的一行

$route['api/companies/(:num)/employees/(:num)']['GET'] = 'Test/do_stuff/$1/$2';

这转化为,当您向api/companies/3/employees/45发出请求时,codeigniter将匹配上述路由,并将转到名为Test的控制器,该控制器具有名为do_stuff的函数并通过comapany id和employee id作为参数,所以它看起来像这样。

function do_stuff_get($company_id, $company_id)
{
    $this->response(array($company_id, $company_id));
}

路由中的[' GET']部分指定它应匹配GET请求, 您可以为POST请求编写不同的规则并调用其他函数。

(:num)指定它需要一个数字,你也可以指定(:any)。

在您的情况下,如果您想根据网址执行删除,则需要考虑订单和请求类型。 在routes.php文件中,将获取与进入的请求匹配的第一个规则,并忽略其他规则。

因此,对于删除操作,您的routes.php将如下所示

$route['api/companies/(:num)']['DELETE'] = 'Test/delete_company/$1';
$route['api/companies/(:num)/employees/(:num)']['DELETE'] = 'Test/delete_employee/$1/$2';

因此,如果您想要删除公司并向DELETE api/companies/3发出请求,它将匹配第一个规则并转到函数delete_company,该函数将具有一个参数,该参数是传递的数字在网址中,对于第二种删除员工的情况,它将匹配第二条规则并转到函数delete_employee

有关路由检查URI Routing

的详细信息