API使用说明

!!!接口不支持异步请求,建议在后端使用!!!

API有两种使用方式:1.cli命令、2.http请求

配置通讯密钥

登录运行URLOS的主机,在 /data/urlos/master-config/config.jsonc 中自添加 “globalApiKey”,不短于60位,如:

  1. {
  2. "globalApiKey": "*^Ln!DLFk=a9i-uCgU8*BKLgqV#RIXxtQI.^Bt)@8%qFQ(ToNVEsCLV=qQZj" // 示例,实际使用请自定义字符串
  3. }

采用cli命令的方式

采用cli命令的方式使用接口,必须要登录到安装有URLOS的主机中运行命令。运行命令的方式为:

  1. docker exec -i urlos sh -ce 'urlos.sh "{API}&globalApiSign={md5(globalApiKey)}&getJson=1" "{要post提交的数据}"'

示例

  • 请求方式:GET
  • 接口地址:m=admin&c=swarm&a=list
  1. docker exec -i urlos sh -ce 'urlos.sh "a=list&c=swarm&m=admin&globalApiSign=b50e45d2bf0a6fd436a0ade287a82f62&getJson=1"'
  • 请求方式:POST
  • 接口地址:m=admin&c=swarm&a=add
  1. docker exec -i urlos sh -ce 'urlos.sh "a=add&c=swarm&m=admin&globalApiSign=b50e45d2bf0a6fd436a0ade287a82f62&getJson=1" "name=test001&nodeIpRange=192.168.111.0/24&uid=1&storageDir=/data/&storageDirConfirm=/data/"'

  1. docker exec -i urlos sh -ce 'urlos.sh "a=add&c=swarm&m=admin&globalApiSign=b50e45d2bf0a6fd436a0ade287a82f62&getJson=1" "BASE64:eyJuYW1lIjoidGVzdDAwMSIsIm5vZGVJcFJhbmdlIjoiMTkyLjE2OC4xMTEuMC8yNCIsInVpZCI6MSwic3RvcmFnZURpciI6Ii9kYXRhLyIsInN0b3JhZ2VEaXJDb25maXJtIjoiL2RhdGEvIn0="'

注意:

  1. globalApiKey需要用md5加密

  2. 要post的数据有两种格式:一种是序列化为查询字符串格式、一种是BASE64加密格式。 例子:原数据为JSON格式:

    1. {
    2. "name": "test001",
    3. "nodeIpRange": "192.168.111.0/24",
    4. "uid": 1,
    5. "storageDir": "/data/",
    6. "storageDirConfirm": "/data/"
    7. }

    1)将提交的数据序列化为查询字符串格式:

    1. "name=test001&nodeIpRange=192.168.111.0/24&uid=1&storageDir=/data/&storageDirConfirm=/data/"

    2)用BASE64加密:

    先将原数据转为字符串:

    1. '{"name":"test001","nodeIpRange":"192.168.111.0/24","uid":1,"storageDir":"/data/","storageDirConfirm":"/data/"}'

    然后加密字符串为BASE64:

    1. BASE64('{"name":"test001","nodeIpRange":"192.168.111.0/24","uid":1,"storageDir":"/data/","storageDirConfirm":"/data/"}');

    最终提交的数据格式为”BASE64:{已加密字符串}”:

    1. "BASE64:eyJuYW1lIjoidGVzdDAwMSIsIm5vZGVJcFJhbmdlIjoiMTkyLjE2OC4xMTEuMC8yNCIsInVpZCI6MSwic3RvcmFnZURpciI6Ii9kYXRhLyIsInN0b3JhZ2VEaXJDb25maXJtIjoiL2RhdGEvIn0="

采用http请求的方式

签名参数

字段名类型描述必填示例值
globalApiClientIpstring访问终端IP192.168.1.2
globalApiTimestampstring时间戳1585894268
globalApiNonceStrstring随机字符串
globalApiKeystring通讯密钥,在URLOS系统设置里配置填写
getJsonstring获取返回的数据为JSON格式,固定值为11
vstring用以区分不同版本的URLOS接口,根据实际版本填写,最低版本为1.2.51.2.5

接口使用方法

  • 生成签名
  • 拼接请求url

生成签名

示例:

示例中接口地址为:m=admin&c=swarm&a=list

  1. 接口地址参数和上面表格的签名参数合并:

    1. {
    2. "a": "list",
    3. "c": "swarm",
    4. "m": "admin",
    5. "v": "1.2.5",
    6. "getJson": 1,
    7. "globalApiKey": "通讯密钥",
    8. "globalApiClientIp": "访问终端IP",
    9. "globalApiNonceStr": "随机字符串",
    10. "globalApiTimestamp": "时间戳"
    11. }
  2. 参数名ASCII码从小到大排序(字典序,PHP语言用ksort函数对参数名的数组进行排序),排序后的结果:

    1. {
    2. "a": "list",
    3. "c": "swarm",
    4. "getJson": 1,
    5. "globalApiClientIp": "访问终端IP",
    6. "globalApiKey":"通讯密钥",
    7. "globalApiNonceStr": "随机字符串",
    8. "globalApiTimestamp": "时间戳",
    9. "m": "admin",
    10. "v": "1.2.5"
    11. }
  3. 然后序列化为键值对格式的字符串:

    1. "a=list&c=swarm&getJson=1&globalApiClientIp={访问终端IP}&globalApiKey={通讯密钥}&globalApiNonceStr={随机字符串}&globalApiTimestamp={时间戳}&m=admin&v=1.2.5"
  4. md5加密键值对格式的字符串得到签名globalApiSign:

    1. {
    2. "globalApiSign": "81d57813115a3dcf9d45d4c02f182526"
    3. }

拼接请求url

示例中的接口地址为:m=admin&c=swarm&a=list

最终的请求参数如下:

  1. {
  2. "a": "list",
  3. "c": "swarm",
  4. "m": "admin",
  5. "v": "1.2.5",
  6. "getJson": 1,
  7. "globalApiNonceStr": "随机字符串", // 此处的随机字符串跟签名里的随机字符串一致
  8. "globalApiTimestamp": "时间戳", // 此处的时间戳跟签名里的时间戳一致
  9. "globalApiSign": "81d57813115a3dcf9d45d4c02f182526" // 签名字符串
  10. }

然后序列化为键值对格式的字符串,加上域名拼接后,最终请求url如下:

  1. https://{你网站的ip或者域名}:9966/?m=admin&c=swarm&a=list&v=1.2.5&globalApiNonceStr={随机字符串}&getJson=1&globalApiTimestamp={时间戳}&globalApiSign=81d57813115a3dcf9d45d4c02f182526

获取终端IP

请求示例:

发起请求
  1. curl -k "https://{你网站的ip或者域名}:9966/getClientIp"
返回结果
  1. 59.42.180.228