立即注册

API管理

前言

API管理是一种管理和维护API的方式,它可以帮助开发者更好地管理和使用API,提高开发效率和代码质量。

2.1 API管理的作用

API管理可以帮助开发者实现以下功能:

  • 统一管理API,方便开发者查找和使用API;

  • 管理API的权限,方便开发者控制API的访问权限;

  • 监控API的使用情况,方便开发者了解API的使用情况和性能瓶颈。

 

2.2 API管理的启用流程

API管理的流程一般包括以下几个步骤:

搭建并开启API服务的触发流程 > 创建API集合 > 创建并发布API > 创建并开启访问终端 > 生成签名(根据需要) > 拼装HTTP请求 > 发起HTTP请求 > 获得HTTP响应 > 监控各API的使用情况

 

示例:

2.2.1 搭建并开启API服务的触发流程

使用API服务触发器定义API的参数、返回值,再完善具体流程来定义API的功能。

请求参数 Params、Headers、Bodys 均支持

  • 头部请求参数 -》Headers

  • 查询请求参数 -》Params

  • 请求体内容 -》 Bodys

 

 

 

2.2.2 创建API集合

在API管理界面创建API集合,填写名称并补充路径。

 

2.2.3 创建并发布API

在集合中新建API服务,绑定刚才创建的API触发器的流程(linkup)并发布。

 

2.2.4 创建并开启访问终端 

在访问终端创建一个终端来绑定刚才创建的API集合,设置终端权限并开启。

(当授权方式为APP token时请求需要加签名验证。)

 

2.2.5 生成签名(根据需要)

访问终端中的授权方式设置为 “APP token”,调用API则需要携带签名;服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。(目前仅支持的签名算法为sha256)

下面以Java为例,详细解析一下签名算法:

 

(1)计算签名

  • 拼接请求参数

以method、apiPath、ceAccessKey、ceAccessSecret、timestamp这个顺序,把以上参数的键值对依次拼接在一起,中间用分隔符 “;” 隔开

示例:

method=GET;apiPath=/trigger/apimanage/thsshy/qq;ceAccessKey=5c821faca6ef49d4a845a6fa7066125c;ceAccessSecret=a33a824953944c8baed35386a3700aaf;timestamp=1651218530319

 

(其中 “ceAccessKey”、“ceAccessSecret” 在创建访问终端时获取)

 

签名参数:

参数名称

参数类型

是否必须

示例值

参数描述

method

string

GET

请求方法

apiPath

string

/trigger/apimanage/15ddbd3bb0da4584855356a7cec3a36b/instance/getOrder

用于调用 API 的请求路径(不包含host路径)

  ceAccessKey

    string

      是

4f844a8e0f77439cbe6b345a8724b7d9

用于调用 API 的accessKey

ceAccessSecret

    string

      是

58ec6f3f05484c7bb22ee5cbc9ce1331

用于调用 API 的accessSecret

timestamp

long

1651218530319

时间戳,格式为ms,和服务器时间相差超过5分钟会报错

  • 使用sha256算法,计算签名串

$sign = SHA256("sha256", $signPattern);

 

(2)将签名放置到Params中

  • ceAccessKey

  • sign (访问终端授权方式为“APP token”时需要)

  • timestamp

******以上三个为系统参数请勿混用******

 

 签名算法代码

      /**
       * 验签
       *
       * @param inputParams
       */
      public static String getSign(Map<String, Object> inputParams) {
          String calculateSign = null;
          String signPattern = null;
          StringBuffer paramJoin = new StringBuffer();
          inputParams.forEach((key, value) -> paramJoin.append(key).append("=").append(value).append(";"));
          signPattern = paramJoin.toString();
          if (signPattern.endsWith(";")) {
              signPattern = signPattern.substring(0, signPattern.length() - 1);
          }
          calculateSign = SignMethodEnum.calculateSign(SignMethodEnum.SHA256, signPattern);
          return calculateSign;
      }

    /**
     * 传入文本内容,返回 SHA-256 串
     *
     * @param strText
     * @return
     */
    public static String SHA256(final String strText) {
        return SHA(strText, "SHA-256");
    }


    /**
     * 字符串 SHA 加密
     *
     * @param strText
     * @return
     */
    private static String SHA(final String strText, final String strType) {
        // 返回值
        String strResult = null;

        // 是否是有效字符串
        if (strText != null && strText.length() > 0) {
            try {
                // SHA 加密开始
                // 创建加密对象 并傳入加密类型
                MessageDigest messageDigest = MessageDigest.getInstance(strType);
                // 传入要加密的字符串
                messageDigest.update(strText.getBytes());
                // 得到 byte 类型结果
                byte byteBuffer[] = messageDigest.digest();

                // 將 byte 转换为 string
                StringBuffer strHexString = new StringBuffer();
                // 遍历 byte buffer
                for (int i = 0; i < byteBuffer.length; i++) {
                    String hex = Integer.toHexString(0xff & byteBuffer[i]);
                    if (hex.length() == 1) {
                        strHexString.append('0');
                    }
                    strHexString.append(hex);
                }
                // 得到返回結果
                strResult = strHexString.toString();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }

        return strResult;
    }

 

2.2.6 拼装HTTP请求> 发起HTTP请求 > 获得HTTP响应

 

(postman请求)示例:

 

查询参数(QueryParams):

名称

类型

是否必填

描述

ceAccessKey

string

系统参数:用于调用 API 的凭证

sign

string

系统参数:签名参数

timestamp

long

系统参数:时间戳,格式为ms,和服务器时间相差超过5分钟会报错

(自定义参数)

 

在API服务中自定义的查询参数

请求体参数(BodyParams):

名称

类型

是否必填

描述

(自定义参数)

 

 

头部参数(HeaderParams):

名称

类型

是否必填

描述

(自定义参数)

 

 

 

 

请求示例(HTTP):

GET /trigger/apimanage/15ddbd3bb0da4584855356a7cec3a36b/qwer/rrrr?ww=string1&ceAccessKey=48ebc58065f84b6e929d27510a126559&sign=e45eebe688ebcf187de3c3a9624b5270f121c7ecee146590d7559a0fc8a6ce9b&timestamp=1681524781000 HTTP/1.1
Host: api.solinkup.net
qq: string2
Content-Type: application/json
Cookie: SERVERCORSID=ade7aa04d0135f0dac8f7bc18d8fca99|1681699042|1681699042; SERVERID=ade7aa04d0135f0dac8f7bc18d8fca99|1681699042|1681699042
Content-Length: 16

{"ee":"string3"}

返回示例:

{
    "result": "qwer,qwer,sadsad"
}

 

 

 

总结

API管理是一种重要的开发方式,可以帮助开发者更好地管理和使用API,提高开发效率和代码质量。

本篇目录

{{item.innerText}}

{{item.categoryName}}