CI中如何保护RESTful API

步骤5 保护RESTful API

  为了保护RESTful API,可以在application/config/rest.php中设置安全保护级别,如下所示:

CI中如何保护RESTful API$config['rest_auth'] = 'basic';

  其中保护级别有如下设置:

  None:任何人都可以访问这个API

  BASIC:这个设置中,只提供基本的验证方式,适合在内部网络使用

  Digest:使用用户名和密码进行验证,比如:$config['rest_valid_logins'] = array('admin' => '1234');

  第二部分 调用RESTful服务

  接下来,我们讲解如何调用RESTful服务,因为RESTful服务是通过HTTP协议进行发布服务,因此有多种方法进行调用。

  1) 通过file_get_contents()调用

  可以通过PHP中最简单的file_get_contents()去调用RESTful,比如:

CI中如何保护RESTful API$user = json_decode(file_get_contents('http://example.com/index.php/api/user/id/1/format/json'));
CI中如何保护RESTful APIecho $user;

  要注意的是,要是访问一个受密码保护的RESTful的话,需要用如下形式访问:

CI中如何保护RESTful API$user = json_decode(
CI中如何保护RESTful API    file_get_contents('http://admin:1234@example.com/index.php/api/user/id/1/format/json')
CI中如何保护RESTful API);
CI中如何保护RESTful APIecho $user->name;

  2)使用cUrl访问RESTful

  使用php中的cUrl去访问RESTful服务时最方便稳定的,下面的代码指导如何使用cUrl去设置HTTP协议头,去更新一个指定用户的信息,如下代码所示:

CI中如何保护RESTful API    function native_curl($new_name, $new_email)
CI中如何保护RESTful API    {
CI中如何保护RESTful API        $username = 'admin';
CI中如何保护RESTful API        $password = '1234';
CI中如何保护RESTful API
CI中如何保护RESTful API        // Alternative JSON version
CI中如何保护RESTful API        // $url = 'http://twitter.com/statuses/update.json';
CI中如何保护RESTful API        // Set up and execute the curl process
CI中如何保护RESTful API        $curl_handle = curl_init();
CI中如何保护RESTful API        curl_setopt($curl_handle, CURLOPT_URL, 'http://localhost/restserver/index.php/example_api/user/id/1/format/json');
CI中如何保护RESTful API        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
CI中如何保护RESTful API        curl_setopt($curl_handle, CURLOPT_POST, 1);
CI中如何保护RESTful API        curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array(
CI中如何保护RESTful API            'name' => $new_name,
CI中如何保护RESTful API            'email' => $new_email
CI中如何保护RESTful API        ));
CI中如何保护RESTful API
CI中如何保护RESTful API        //本行可选,如果你的RESTful API是开放的,则请删除该行
CI中如何保护RESTful API        curl_setopt($curl_handle, CURLOPT_USERPWD, $username . ':' . $password);
CI中如何保护RESTful API
CI中如何保护RESTful API        $buffer = curl_exec($curl_handle);
CI中如何保护RESTful API        curl_close($curl_handle);
CI中如何保护RESTful API
CI中如何保护RESTful API        $result = json_decode($buffer);
CI中如何保护RESTful API
CI中如何保护RESTful API        if(isset($result->status) && $result->status == 'success')
CI中如何保护RESTful API        {
CI中如何保护RESTful API            echo 'User has been updated.';
CI中如何保护RESTful API        }
CI中如何保护RESTful API
CI中如何保护RESTful API        else
CI中如何保护RESTful API        {
CI中如何保护RESTful API            echo 'Something has gone wrong';
CI中如何保护RESTful API        }
CI中如何保护RESTful API    }

  用过PHP的cUrl的朋友应该知道,这里其实是使用cUrl对我们已经发布的RESTful地址进行访问,并提交相关要更新的参数。但是,强大的CodeIgniter为我们封装了更强大的cUrl类库cUrl library(http://codeigniter.com/wiki/Curl_library/),上面的代码可以简化如下:

CI中如何保护RESTful APIfunction ci_curl($new_name, $new_email)
CI中如何保护RESTful API    {
CI中如何保护RESTful API        $username = 'admin';
CI中如何保护RESTful API        $password = '1234';
CI中如何保护RESTful API        $this->load->library('curl');
CI中如何保护RESTful API    $this->curl->create('http://localhost/restserver/index.php/example_api/user/id/1/format/json');
CI中如何保护RESTful API        //本行可选,如果你的RESTful API是开放的,则请删除该行        $this->curl->http_login($username, $password);
CI中如何保护RESTful API        $this->curl->post(array(
CI中如何保护RESTful API            'name' => $new_name,
CI中如何保护RESTful API            'email' => $new_email
CI中如何保护RESTful API        ));
CI中如何保护RESTful API        $result = json_decode($this->curl->execute());
CI中如何保护RESTful API        if(isset($result->status) && $result->status == 'success')
CI中如何保护RESTful API        {
CI中如何保护RESTful API            echo 'User has been updated.';
CI中如何保护RESTful API        }
CI中如何保护RESTful API        else
CI中如何保护RESTful API        {
CI中如何保护RESTful API            echo 'Something has gone wrong';
CI中如何保护RESTful API        }
CI中如何保护RESTful API    }
 
http://tech.chinaunix.net/a2011/0420/1180/000001180783_3.shtml
上一篇:django choices 字段处理返回枚举值


下一篇:C#--总结