首页
应用列表
解决方案
新闻动态
帮助文档
关于我们
立即体验
【必读】AIGCaaS API 同步调用指南
首页
文章详情
Aug 09,2023
# 【必读】AIGCaaS API 同步调用指南 AIGCaaS 平台是一个 AIGC 领域的 SaaS API 平台,平台以开放形式提供大量的 AIGC API,开发者可以无需考虑 GPU 显卡等情况下,进行对应的 API 的快速使用。本文档将会用户引导用户如何进行 API 的调用。 ## 参数分类 在 AIGCaaS 平台,分为系统参数和 API 参数。 ### 系统参数 所谓系统参数指的是和你使用具体的 API 无关的参数,主要用户进行系统鉴权使用,这部分参数主要包括: | 参数名 | 类型 | 位置 | 解释 | | :-------: | :----: | :-----: | :----------------------------------------------------------: | | Nonce | string | headers | 防重放配置 随机字符串(最大长度64位,推荐20位)且10秒内不可重复 | | Timestamp | string | headers | 发起请求时间戳 与服务器时间差小于10秒 | | SecretID | string | headers | 密钥信息 密钥配置中的 secret_id 配置 | | Token | string | headers | 签名结果 sha256(Timestamp, SecretKey, Nonce) | 关于参数说明: 1. 请求级安全防护: **Nonce** 参数是防重放配置,本质是随机字符串(最大长度64位,推荐20位,且10秒内不可重复; **Timestamp** 参数是发起请求时间戳,与服务器时间差小于10秒; **Token** 签名结果`sha256(Timestamp, SecretKey, Nonce)`; 所以可以认为,在10秒内,每个用户的 Nonce 是唯一的,所以 Token 也是唯一的(出现重复的概率极低,可以趋近于无穷小),此时即便你的 API 请求被别人抓包所获取,他也没办法多次盗用请求,因为每个请求只能被服务器认可一次,如果: - 10秒内重复请求,会因为 Nonce 参数重复而拒绝响应; - 10秒外再发起重复请求,会因为 Timestamp 参数过期而拒绝响应; 2. 账号信息安全防护: **SecretID** 密钥信息,密钥配置中的 secret_id 配置; **Token** 签名结果`sha256(Timestamp, SecretKey, Nonce)`; 在服务端获取到的 SecretId与SecretKey两个信息,分别用于参数传输与参与签名,通过`sha256`算法签名后的结果极难通过撞库等方法进行逆向,所以相对拉说也是进行账号信息防护; 综上所述,`SecretID`与`Token`组合是用于身份信息验证的使用;`Nonce`与`Timestamp`,`Token`组合,是用户请求防盗使用; ### API 参数 所谓的 API 参数,指的是具体的应用 API 所需要的参数信息,以Stable Diffusion为例,其中部分的参数: | 参数名 | 类型 | 位置 | 解释 | | :-----------------: | :-----: | :--: | :----------------------------------------------------------: | | text | string | body | 文本 绘画的文本描述(仅支持英文描述) | | width | integer | body | 图片宽度 需要为8的倍数,最大800 | | height | integer | body | 图片高度 需要为8的倍数,最大800 | | negative_prompt | string | body | 反面描述内容 反面描述内容 | | guidance_scale | number | body | CFG 控制图片与提示词的相关程度 | | seed | integer | body | 随机种子数 控制生成图片是否可复现 | | num_inference_steps | integer | body | 推理步数 推理过程给图想去噪音,数值越大效果越好,速度越慢,本平台限制(5,40) | | eta | number | body | 噪声种子 噪声种子(取值范围0.0-1.0) | ## 请求方法 AIGCaaS 平台所接入的 AIGC 应用 API,其地址格式为: ``` https://api.aigcaas.cn/v3/application/{应用名}/action/{具体方法} ``` 所有的 AIGC 应用 API 的请求方法均是 POST方法,所以,可以这样做总结: **请求地址**:`https://api.aigcaas.cn/v3/application/{应用名}/action/{具体方法}` **请求方法**:POST **入参**: | 参数名 | 类型 | 位置 | 解释 | | :-------: | :----: | :-----: | :----------------------------------------------------------: | | Nonce | string | headers | 防重放配置 随机字符串(最大长度64位,推荐20位)且10秒内不可重复 | | Timestamp | string | headers | 发起请求时间戳 与服务器时间差小于10秒 | | SecretID | string | headers | 密钥信息 密钥配置中的 secret_id 配置 | | Token | string | headers | 签名结果 sha256(Timestamp, SecretKey, Nonce) | | api 参数 | string | body | API 参数 | 以 Python 语言为例: ```python import time import json import hashlib import random import requests # 签名对象 getSha256 = lambda content: hashlib.sha256(content.encode("utf-8")).hexdigest() # 密钥信息获取与帮助文档:https://www.aigcaas.cn/article/16.html secret_id = '<请替换为自己的密钥信息: SecretId>' # 密钥信息 secret_key = '<请替换为自己的密钥信息: SecretKey>' # 密钥信息 application_name = 'analog' # 应用名称 api_name = 'analog' # 接口名称 # 请求地址 url = "https://api.aigcaas.cn/v3/application/%s/action/%s" % (application_name, api_name) # 构建请求头 nonce = str(random.randint(1, 10000)) timestamp = str(int(time.time())) token = getSha256(("%s%s%s" % (timestamp, secret_key, nonce))) headers = { 'SecretID': secret_id, 'Nonce': nonce, 'Token': token, 'Timestamp': timestamp, 'Content-Type': 'application/json' } # 构建请求 body data = { "text": "" } # 获取响应 response = requests.request("POST", url, headers=headers, data=json.dumps(data)) print(response.text) ``` ## 响应结果 在 AIGCaaS 平台中,平台级响应结果主要体现在 Response Header 中,API 的响应结果主要体现在 Response Body 中。 例如,某次失败的请求,响应结果: **Headers** ``` X-Forwarded-For: 172.17.0.9 Host: api.aigcaas.cn X-Nginx-Proxy: true Connection: upgrade Content-Length: 22 Sec-Ch-Ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103" Sec-Ch-Ua-Mobile: ?0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 Secretid: x.temp.id.cibqLMAKuyKkUBABVPbDdpJlGbuqwNtZhnNTiyjHxuiDfPOHCz Accept: application/json, text/plain, */* Content-Type: application/json Sec-Ch-Ua-Platform: "macOS" Origin: https://www.aigcaas.cn Sec-Fetch-Site: same-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://www.aigcaas.cn/ Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Aigcaas-Request-Id: 354ea732-6402-4614-a83b-81cbbd37f148 Aigcaas-Timestamp: 1684898592 Aigcaas-Backed-Status: False ``` 其中,平台级结果为`Aigcaas-XXXX`,例如: ``` Aigcaas-Request-Id: 354ea732-6402-4614-a83b-81cbbd37f148 Aigcaas-Timestamp: 1684898592 Aigcaas-Statue: False ``` 对应的是请求 ID(用于错误追踪等)以及接收到请求的时间戳等。值得注意的是,`Aigcaas-Statue`参数决定当前请求是否成功,如果为 True,表示成功,并进行计费,如果为 False 表示失败,不进行计费。 - 成功的定义:成功获取到了结果; - 失败的定义:没有成功获得到结果,出现了错误信息; - 特殊的情况:由于安全限制等原因,导致模型已经响应结果,但是被安全隔离,尽管没有获得到预期结果,但是也算是成功请求; **Body** ``` { "error": "APIError", "message": "API Server Error, the system failed to obtain a correct return of the model.", "help": "https://www.aigcaas.cn/article/35.html" } ``` 该响应结果,为最终的结果。通常情况下,包括两个层面: 1. 平台级错误:主要有`status`,`message`以及`help`三个参数,用于表示状态,信息以及帮助文档; 2. 模型自定义响应结果:此处不做规约;
Tags :
同步调用
API 调用