本文介绍如何通过HTTPS协议调用已开启数据安全防护的目标实例。

前提条件

  • 已开启数据安全防护。具体的开启方法,请参见设置数据安全防护中开启数据安全防护的内容。
  • 准备好数据安全防护的认证信息和连接地址。可在页面查看自己的认证信息和连接地址。

请求参数说明

参数名 含义 是否必须 传递方式
accessId AccessID accessId支持以下传值方式:
  • Query参数

    例如:?accessId=AccessID

  • Header参数

    例如:accessId:AccessID

accessSecret AccessSecret accessSecret支持以下传值方式:
  • Query参数

    例如:?accessSecret=AccessSecret

  • Header参数

    例如:accessSecret:AccessSecret

schema 数据库名称 schema支持以下传值方式:
  • URL路径参数

    例如:/server/[您的数据库名]

  • Body参数

    例如:{ "schema": "[您的数据库名]" }

sql SQL语句 sql支持以下传值方式:
  • URL参数
  • Body参数

    例如:纯文本格式:[您的SQL语句]

    JSON格式:{ "sql": "[您的SQL语句]" }

返回值说明

通过HTTPS协议调用,以JSON格式返回数据

JSON对象格式如下:

字段名 类型 描述
columnMetas Array 字段元信息列表
columnName String 字段名
columnLabel String 字段标签,对应SQL语句中as后的别名,没有别名时,则与columnName一致
columnTypeName String 字段类型,例如VARCHAR,BIGINT等
precision Integer 精度,部分字段类型包含精度定义,例如VARCHAR(32)的精度为32
scale Integer 范围,浮点型的字段类型包含范围定义,表示小数位数,例如DECIMAL(10,2)的范围为2
nullable Boolean 能否为空,true表示值可以为空,false表示值不可为空
autoIncrement Boolean 是否自增,true表示自增,false表示非自增
tableName String 字段所在的表名
msg String 执行出错时,返回错误信息
updateCount Integer 执行DML时,影响的记录数
requestId String 请求ID,遇到问题时用于帮助排查
rowCount Integer 查询操作时,返回的记录数
rows Array 查询操作时,返回的记录列表,数组中每个元素表示一行数据,与List Map结构相同
success Boolean 执行是否成功,true表示成功,false表示失败

返回值示例如下:

  • 成功查询到数据
    {
      "columnMetas": [
        {
          "columnName":"column1",
          "columnLabel":"column1",
          "columnTypeName":"varchar",
          "precision":10,
          "scale":2,
          "nullable":true,
          "autoIncrement":true,
          "tableName":"table1"
        },
        {
          "columnName":"column2",
          "columnLabel":"column2",
          "columnTypeName":"varchar",
          "precision":10,
          "scale":2,
          "nullable":true,
          "autoIncrement":true,
          "tableName":"table1"
        } 
      ],
      "updateCount": 0,
      "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi",
      "rowCount": 1,
      "rows": [
        {
          "col1": 1,
          "col2": "xxxx"
        }
      ],
      "success": true
    }
  • 成功更新数据
    {
      "updateCount": 0,
      "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi",
      "success": true
    }
  • 调用失败
    {
      "message": 'AccessID is required.',
      "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi",
      "success": false
    }

调用示例

您可以通过命令行、数据库管理工具、程序代码来调用已开启数据安全防护的目标实例。

假设连接地址为dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com,数据库名称为database,accessId为user,accessSecret为pwd,sql命令为show database。

  • 使用CURL命令行调用的示例
    # GET请求
    curl 'https://[您的连接地址]/server/[您的数据库名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[SQL语句]'
    # GET请求示例
    #curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW%20DATABASES'
    # POST请求
    curl 'https://[您的连接地址]/server/[您的数据库名]' -H 'accessId:[您的AccessID]' -H 'accessSecret:[您的AccessSecret] -H 'Content-Type:text/plain' -d '[SQL语句]'
    # POST请求示例
    curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database' -H 'accessId:user' -H 'accessSecret:pwd -H 'Content-Type:text/plain' -d 'SHOW DATABASES'
  • Python程序调用的示例

    GET请求

    import requests
    
    url = "https://[连接地址]/server/[您的数据库名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[sql语句]"
    print requests.get(url).text

    GET请求示例:

    import requests
    
    url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES"
    print requests.get(url).text

    POST请求:

    import requests
    
    url = "https://[连接地址]/server/[您的数据库名]"
    headers = {
        "Content-Type": "text/plain;charset=utf-8",
        "accessId": "[您的AccessID]",
        "accessSecret": "[您的AccessSecret]"
    }
    print requests.post(url, headers=headers, data='[sql语句]').text

    POST请求示例:

    import requests
    
    url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database"
    headers = {
        "Content-Type": "text/plain;charset=utf-8",
        "accessId": "user",
        "accessSecret": "pwd"
    }
    print requests.post(url, headers=headers, data='SHOW DATABASES').text
  • Node.js程序调用的示例

    GET请求:

    const https = require("https");
    
    https.get("https://[连接地址]/server/[您的数据库名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=SHOW DATABASES", resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });

    GET请求示例:

    const https = require("https");
    
    https.get("https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES", resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });

    POST请求:

    const https = require("https");
    
    var req = https.request({
        hostname: '[连接地址]',
        port: 443,
        path: '/server/[您的数据库名]',
        method: 'POST',
        headers: {
            'Content-Type': 'text/plain; charset=UTF-8',
            accessId: '[您的AccessID]',
            accessSecret: '[您的AccessSecret]'
        }
    }, resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });
    req.write("[sql语句]");
    req.end();

    POST请求示例:

    const https = require("https");
    
    var req = https.request({
        hostname: 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com',
        port: 443,
        path: '/server/database',
        method: 'POST',
        headers: {
            'Content-Type': 'text/plain; charset=UTF-8',
            accessId: 'user',
            accessSecret: 'pwd'
        }
    }, resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });
    req.write("SHOW DATABASES");
    req.end();
  • Postman客户端调用的示例
    GET请求:postmanget
    POST请求:postmanpost