Logo
    立即注册
    开放平台
    产品文档
    调用API
    最近更新时间:2022-10-09 14:31:35

    概述

    本文档将介绍在开放平台后台挂载 API 路由后,如何进行调用。主要步骤为配置授权、生成签名、访问调用。

    创建应用(Consumer)

    *此步骤可选

    在调用凭证页面点击创建应用,填写名称描述即可。目前应用默认为hmac认证

    file

    创建成功后点击查看详情即可查看Consumer的详细信息

    file

    授权配置

    目前开放平台后台的 API 路由默认的鉴权方式为 hmac-auth。需要在 API 路由的插件中启用 hmac-auth 和 consumer-restriction。hmac-auth 无需配置,在consumer-restriction 的 whitelist 中添加调用凭证(Consumer),即可完成授权

    file

    鉴权方式

    hmac-auth 的鉴权方式下,需要通过 key 和 secret 生成 SIGNATURE,key 和 secret 查看调用凭证详情,需要使用已授权的调用凭证访问路由,否则会返回403:

    file


    生成方式参考:APISIX-plugins-hmac-auth

    import base64
    import hashlib
    import hmac
    import datetime
    from urllib import parse
    
    def generate_sign_string(request_url, method, ak, sk, signheaders):
        o = parse.urlparse(request_url)
        path = o.path.split("/api")[1]
        query_array = parse.parse_qs(o.query)
        new_query = []
        for k, v in query_array.items():
            new_query.append(parse.unquote(k) + '=' + parse.quote(v[0]))
        new_query.sort()
        query_str = '&'.join(new_query)
        header_str = ""
        for index1 in signheaders:
            headerKey = index1
            HeaderValue = signheaders[index1]
            headerKeyValue = headerKey + ":" + HeaderValue + "\n"
            header_str += headerKeyValue
        # 暂时时间写死也能请求成功
        # GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT'
        # gmt_date = datetime.datetime.utcnow().strftime(GMT_FORMAT)
        gmt_date = "Tue, 19 Jan 2021 11:33:20 GMT"
        sign_str = method + '\n' + path + '\n' + query_str + '\n' + ak + '\n' + gmt_date + '\n' + header_str
        message = bytes(sign_str, 'utf-8')
        secret = bytes(sk, 'utf-8')
        hash = hmac.new(secret, message, hashlib.sha256)
        hash.hexdigest()
        signature = base64.b64encode(hash.digest()).decode("utf-8")
        print(sign_str)
        print(signature)
        return signature
    
    url = "https://open.datastory.com.cn/api/indicator.knowledge.user.list.uat"
    method = "POST"
    accessKey = "AppKey";
    secret = "AppSecret";
    signheader = {
        "User-Agent": "PostmanRuntime/7.29.0"
    }
    generate_sign_string(url, method, accessKey, secret, signheader)
    

    如果本地不能执行python代码,可以在这里执行: https://c.runoob.com/compile/9/

    参考文档,将生成的SIGNATURE,以及其他必要的参数添加到请求头,得到:

    curl --location --request POST 'https://open.datastory.com.cn/api/indicator.knowledge.user.list.uat' \
    --header 'X-HMAC-SIGNATURE: 生成的签名' \
    --header 'X-HMAC-ALGORITHM: hmac-sha256' \
    --header 'X-HMAC-ACCESS-KEY: c49d9e70-6d71-4967-a2f2-1e0b4cca075b' \
    --header 'Date: Tue, 19 Jan 2021 11:33:20 GMT' \
    --header 'User-Agent: PostmanRuntime/7.29.0' \
    --header 'X-HMAC-SIGNED-HEADERS: User-Agent'

    访问地址

    您需要按照“协议://域名/api/路径”的格式拼接API路由的访问地址

    例如:

    file

    访问地址为:http://open.dev.datastory.com.cn/api/datastory.appstore.v1.applications.options

    微信扫描二维码在线咨询