步骤5 保护RESTful API

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

$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,比如:

$user = json_decode(file_get_contents('http://example.com/index.php/api/user/id/1/format/json'));
echo $user;

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

$user = json_decode(
    file_get_contents('http://admin:1234@example.com/index.php/api/user/id/1/format/json')
);
echo $user->name;

  2)使用cUrl访问RESTful

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

    function native_curl($new_name, $new_email)
    {
        $username = 'admin';
        $password = '1234';

        // Alternative JSON version
        // $url = 'http://twitter.com/statuses/update.json';
        // Set up and execute the curl process
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, 'http://localhost/restserver/index.php/example_api/user/id/1/format/json');
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl_handle, CURLOPT_POST, 1);
        curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array(
            'name' => $new_name,
            'email' => $new_email
        ));

        //本行可选,如果你的RESTful API是开放的,则请删除该行
        curl_setopt($curl_handle, CURLOPT_USERPWD, $username . ':' . $password);

        $buffer = curl_exec($curl_handle);
        curl_close($curl_handle);

        $result = json_decode($buffer);

        if(isset($result->status) && $result->status == 'success')
        {
            echo 'User has been updated.';
        }

        else
        {
            echo 'Something has gone wrong';
        }
    }

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

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

CI中如何保护RESTful API的更多相关文章

  1. iOS开发中使用Bmob RESTful API

    简介 尽管Bmob已经提供了一套SDK供开发者使用,但有时候开发者可能希望能直接与Bmob后台进行直接交互,以达到某些特别的需求(直接操作_User表.同步网络请求等).而RESTful API可以使 ...

  2. 分析RESTful API安全性及如何采取保护措施

    本文中讨论了API安全性和采用安全措施的重要性,如身份验证,API密钥,访问控制和输入验证. API设计的第一步是撰写接口文档 根据TechTarget(海外IT专业媒体)的定义,RESTful AP ...

  3. SpringBoot实现JWT保护前后端分离RESTful API

    通常情况下, 将api直接暴露出来是非常危险的. 每一个api呼叫, 用户都应该附上额外的信息, 以供我们认证和授权. 而JWT是一种既能满足这样需求, 而又简单安全便捷的方法. 前端login获取J ...

  4. 搭建RESTful API 之 实现WSGI服务的URL映射

    javarestfull 搭建参考 http://blog.csdn.net/hejias/article/details/47424511 问题引出:对于一个稍具规模的网站来说,实现的功能不可能通过 ...

  5. SpringBoot RESTful API 架构风格实践

    如果你要问 Spring Boot 做什么最厉害,我想答案就在本章标题 RESTful API 简称 REST API . 本项目源码下载 1 RESTful API 概述 1.1 什么是 RESTf ...

  6. Restful API 中的错误处理

    简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API. Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结 ...

  7. Spring MVC中使用 Swagger2 构建Restful API

    1.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <contex ...

  8. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  9. RESTful Api 身份认证中的安全性设计探讨

    REST 是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 ...

随机推荐

  1. 【题解】Catering World Finals 2015 上下界费用流

    Prelude 传送到Codeforces:0.0 Solution 板子题,在这里贴个板子. 这题面是smg?题面中有说每个点只能经过一次吗?是我瞎了吗? 因为这WA on test 27一个小时, ...

  2. Python面向对象补充以及异常处理

    面向对象相关内容 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(o ...

  3. 最新的IDEA激活方式

    IntelliJ IDEA2017.3 激活 转自:http://blog.csdn.net/zx110503/article/details/78734428 最新的IDEA激活方式 使用网上传统的 ...

  4. 《Java程序猿面试宝典》之字符串

    前不久刚看完这一章,然而这遗忘速度实在是不能忍,既然总是遗忘,那么老衲就和你磨上一磨. 1.字符串基础 先说字符串吧,看例1: String a = "abc"; String b ...

  5. bzoj千题计划167:bzoj3527: [Zjoi2014]力

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei.      以n=4为例: ...

  6. DFS——>记忆化搜索——>动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  7. IIS Media Service: Channel 小结

    IIS Media Service 对Channel的Schema可以在浏览器中输入http://{0}:{1}/services/smoothstreaming/publishingpoints.i ...

  8. [转载]C语言程序的内存分配方式

    "声明一个数组时,编译器将根据声明所指定的元素数量为数量为数组保留内存空间."其实就是编译器在编译的过程中,会加入几条汇编指令在程序里处理内存分配,并不是说编译时就分配了内存,不要 ...

  9. 添加 MySql 服务、Tomcat服务到windows服务中

    添加 MySql 服务到windows服务中: cmd --> F:\MySql\MySqlServer5.1\bin\mysqld --install 这样用默认的 MySQL 为名称添加一个 ...

  10. 【微服务架构】SpringCloud之Ribbon

    一:Ribbon是什么? Ribbon是Netfix发布的开源项目,主要负责客户端的软件负载均衡算法,将Netfix的中间层连接在一起,Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等. ...