码迷,mamicode.com
首页 > Windows程序 > 详细

restful API

时间:2018-03-11 17:19:51      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:安全   原来   pack   字符   substr   img   技术分享   信息   public   

Restful Api特点

技术分享图片

 

传统API

技术分享图片

restful api

技术分享图片

 

常用状态码

技术分享图片

 

 api数据结构格式技术分享图片

 封装返回json数据方法

技术分享图片

使用

技术分享图片

返回数据

技术分享图片

新建一个类重写render方法返回不可预知的json异常数据

技术分享图片

配置异常处理类

技术分享图片

成功返回json错误提示

技术分享图片

为了方便服务端调试,这个类可以再优化一下,开启了调试模式就返回原来的报错信息

技术分享图片

 

数据安全

技术分享图片

解决方法:加密

技术分享图片

header头携带sign和基础参数,与业务相关的放在body中

api公用控制器

技术分享图片

aes加密类

<?php
namespace app\common\lib;

/**
 * aes 加密 解密类库
 * @by singwa
 * Class Aes
 * @package app\common\lib
 */
class Aes {

    private $key = null;

    /**
     *
     * @param $key         密钥
     * @return String
     */
    public function __construct() {
        // 需要小伙伴在配置文件app.php中定义aeskey
        $this->key = config(‘app.aeskey‘);
    }

    /**
     * 加密
     * @param String input 加密的字符串
     * @param String key   解密的key
     * @return HexString
     */
    public function encrypt($input = ‘‘) {
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $input = $this->pkcs5_pad($input, $size);
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, ‘‘, MCRYPT_MODE_ECB, ‘‘);
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $this->key, $iv);

        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);

        return $data;

    }
    /**
     * 填充方式 pkcs5
     * @param String text          原始字符串
     * @param String blocksize   加密长度
     * @return String
     */
    private function pkcs5_pad($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

    /**
     * 解密
     * @param String input 解密的字符串
     * @param String key   解密的key
     * @return String
     */
    public function decrypt($sStr) {
        $decrypted= mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->key,base64_decode($sStr), MCRYPT_MODE_ECB);
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s-1]);
        $decrypted = substr($decrypted, 0, -$padding);

        return $decrypted;
    }

}

 

生成sign

 /**
     * 生成每次请求的sign
     * @param array $data
     * @return string
     */
    public static function setSign($data = []) {
        // 1 按字段排序
        ksort($data);
        // 2拼接字符串数据  &
        $string = http_build_query($data);
        // 3通过aes来加密
        $string = (new Aes())->encrypt($string);

        return $string;
    }

 

restful API

标签:安全   原来   pack   字符   substr   img   技术分享   信息   public   

原文地址:https://www.cnblogs.com/lamp01/p/8532414.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!