restful API

Posted lamp01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了restful API相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Hyperledger Composer REST API调用在概念中的某些变量上失败

没有让 wordpress nonce 与 wp-rest api 应用程序一起工作

我可以使用现有的SOAP API会话验证Salesforce REST API吗?

REST API 对 Fragment 的响应 - Android Studio

我的RESTful API没有更新数据库,但是ajax返回成功

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]