OneClick.ai JSON API接口技术规范

JSON API是基于HTTP POST方式访问OneClick.ai模型的接口之一。用户在OneClick.ai平台登陆后,在模型列表界面选择需要的模型,进行部署。部署之后的模型会自动产生一个API的连接(URL),比如:

/api/pipeline_ykhhjcnnsqym

API连接可以用于服务器端程序对OneClick.ai平台的访问。链接中的路径部分(oneclick.ai 之后的部分)包含每个API唯一的标识序列。任何人只要拿到这个连接就可以访问此API。服务器端并不做额外的权限检查。出于安全的考虑,API连接不应该用于浏览器的代码中直接调用。

OneClick.ai平台同时也支持以GET方式的API,另外还有form-data格式的POST API。在未来的版本中,我们会逐步淘汰对这两种API格式的支持。

JSON API支持两种模式,对POST请求格式有不同的要求:

类型 协议 mime-type charset
单样本请求 POST application/json utf-8
批量、多样本请求 POST application/json-seq utf-8

下面我们分别讨论。

单一样本的JSON API

当API服务器收到POST请求时,服务器会检查请求的HTTP Header 中的Content-Type。如果Content-Type是application/json,这个请求便作为单一样本的JSON请求处理。

请求数据格式

HTTP Header必须包含:

Content-Type: application/json; charset=UTF-8

字符集(charset)可以省略。如果省略,实际字符集仍然必须是utf-8:

Content-Type: application/json

实际传输的内容是一个JSON对象(object)。对象的属性、属性值对对应样本的特征名与特征值。例如

{"f1": "some text", "f2": true, "f3": 2.3}

代表了如下的样本:

f1 f2 f3
“some text” true 2.3

样本中的每个特征对应着模型训练时提供的每个特征。所有训练时提供的特征都应该在JSON对象中出现。如果某个特征的值缺失,应使用null表示。

属性的名称不可以用@开头. @开头的属性保留用于其他用处

属性值必须是简单JSON类型,既字符串、浮点数,整数,逻辑,或者null。

使用优化模型的API时,待优化的变量不需要出现在属性中。

响应数据

正常情况下 HTTP Response Code 为200

API处理结果作为一个JSON对象返回。Response Header中会包含

Content-Type: application/json; charset=UTF-8

返回的JSON对象的具体格式取决于模型的种类。

回归分析模型的返回结果较为简单,仅包含一个属性代表预测结果

{ "@pred": 23.47}

上面的例子中回归分析模型的预测结果为23.47

二元、多元分类模型的返回结果中包含了概率最大的类别,另外还包含每个类别的概率分布。

{ "@pred": "a", "@probs": {"a": 0.73, "b": 0.27}}

多标注分类模型的返回结果中包含了概率大于50%的类别,另外还包含每个类别标注自身的概率。

{ "@pred": ["a", "b"], "@probs": {"a": 0.73, "b": 0.57, "c":0.21}}

优化模型的返回结果中包含了两部分:
1. 预测模型预测的最优结果(具体格式请参考前面讲到的这几种格式)
2. 产生这一预测结果的待优化变量的取值,具体格式如下

{ "@pred": "1", "@probs": {"1": 0.73, "0": 0.27}, "@opt":{"var1": 4.3}}

上面的例子中的模型通过改变待优化变量var1来最大化类别为1的概率。返回结果中包含了待优化变量var1的最优取值,既4.3。

错误处理

如果在数据处理过程中出现任何错误,我们返回的HTTP Response Code 会设为200以外的其他值。同时返回的json对象中会包含错误信息,例如:

{ "@error":{"code": "invalid_json", "message": ""}}

其中属性message并不是必须的。

多样本的JSON API

多样本的JSON API使用的数据传输格式是json-seq。简单地说就是,数据中的每行包含一个完整的JSON 对象。

请求数据格式

HTTP Header必须包含:

Content-Type: application/json-seq; charset=UTF-8

字符集(charset)可以省略。如果省略,实际字符集仍然必须是utf-8:

Content-Type: application/json-seq

json-object数据格式为以下形式的一个utf-8序列:

(RS json-object)*

其中RS是记录分隔符,其utf-8的编码为"\x1E"。json-object是一个合法的json字符串,可以包含RS字符以外的任何合法json字符。json-object可以包含空格符(" ")、合回符("\r")、换行符("\n")等字符。

实际使用中,一般采用每行一个json对象的形式,既

"\x1E{\"a\":1, \"b\":2}\n\x1E{\"a\":3, \"b\":4}\n"

上面的例子中包含了两个json对象。主意这里的换行符不是必须的,只是一种使用习惯。

{“a”:1, “b”:2}
{“a”:3, “b”:4}

JSON对象的属性参照单样本的API中的要求。

响应数据格式

在没有错误的情况下,API处理结果以同样的json-seq格式返回给客户端。
Response Header中会包含

Content-Type: application/json-seq; charset=UTF-8

返回结果的正文中每一条记录对应着请求中的一条记录。Http response code为200(既没有错误)时,请求中每一条记录与响应中的记录是一一对应的,并且顺序保持不便。

例如:

"\x1E{\"@pred\":1.3}\n\x1E{\"@pred\":3.4}\n"

上面的例子中包含了两个样本的处理结果

{“@pred”:1.3}
{“@pred”:3.4}

错误处理

如果模型处理过程中出现任何错误,Http response code就不会是200。这种情况下,我们仍然尽力返回每个样本的处理结果。

如果遇到的错误只影响个别的样本,返回结果仍然是json-seq格式,其中的记录和请求中的记录一一对应。只是部分记录对应的返回结果中可能包含出错信息。出错信息格式请参考单样本JSON API重定义的出错信息格式。

如果因为某些原因,API无法完成全部样本的处理,我们仍然会返回已经处理的部分样本。这种情况下,返回的记录数目可能少于请求中的记录数目。每一条返回的记录和请求中开始部分的记录仍然一一对应,顺序不变。

在某些极端情况下,API可能无法处理请求中的任何样本。比如请求中的数据格式不是有效的json-seq,API将无法正确读取样本。这种情况下,API会产生json格式(而非json-seq格式)的响应。具体格式和单样本API中定义的错误处理格式相同。

Tags: No tags

Comments are closed.