步骤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. tensorflow变量作用域(variable scope)

    举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...

  2. SpringMVC之@RequestParam @RequestBody @RequestHeader 等详解

    转自:http://blog.csdn.net/kobejayandy/article/details/12690161?reload 简介: handler method 参数绑定常用的注解,我们根 ...

  3. Linux下查看系统版本和make版本

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/versionz [root@localhost ~]# cat /proc/versionLinux version 2.6.1 ...

  4. PHP超级全局变量

    $_get:地址栏上获取值 $_post:post表单发送数据 $_request:即有get也有post的内容 如果post和get重名:那么由设置项决定,比如request_crder=" ...

  5. 算法进阶之Leetcode刷题记录

    目录 引言 题目 1.两数之和 题目 解题笔记 7.反转整数 题目 解题笔记 9.回文数 题目 解题笔记 13.罗马数字转整数 题目 解题笔记 14.最长公共前缀 题目 解题笔记 20.有效的括号 题 ...

  6. bzoj千题计划117:bzoj1026: [SCOI2009]windy数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 数位DP 如果前一位填的是0, 0是前导0,下一位可以随便填 0不是前导0,下一位不能填1 为 ...

  7. c++模板函数作为参数的疑惑

    为什么22行只能传一个模板函数作为参数,而非模板却编译失败,求解释.

  8. 实验一 《网络对抗技术》逆向及Bof技术

  9. 基本控件文档-UIKit结构图

    CHENYILONG Blog 基本控件文档-UIKit结构图 Fullscreen   UIKit结构图 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博htt ...

  10. iOS6下实现滑动返回

    [转载请注明出处] 之前在看iOS7滑动返回时,发现了一个iOS6 SDK下的第三方实现,今天偶然间发现了作者在其博客上对该实现的一些心得,读来深觉之前的思考太过肤浅,许多实际的问题没有考虑到.帖子链 ...