通用数据查询服务 JFetch

简介

JFetch 是基于近年来公司交易量持续攀升所积累的交易数据,提供高效、通用、轻量的数据查询服务,以满足多场景的数据查询需求 ,可支持 SaaS、PaaS 两种方式灵活部署。

JFetch 有以下功能优势:

  • 接入简单,实现无驱动模式方式接入,支持 RESTful API 接入,实现多数据源的统一管理;

  • 支持多数据源,支持 Vertica、Oracle、MySQL、Hive、Redis 和 Memcache 等数据源,未来还会支持 HBase 等大数据数据源;

  • 类型多场景应用,支持同步查询和异步查询,同步应用于实时、小数据量场景,异步应用于非实时、大数据量场景;

  • 部署灵活,支持 SaaS 和 PaaS 部署模式,服务子公司和外部商户;

应用场景

通用大数据查询场景

通过接入 JFetch 实现风控、合规业务的数据查询,业务无需关系后端数据源。为可视化 BI 系统提供历史数据和实时数据查询。

应用案例 image0

通用数据执行场景

通过接入 JFetch 实现测试环境数据执行操作。

应用案例

自研自动化测试工具 agbot 使用 JFetch 实现 MySQL、Oracle、Redis 和 Memcache 等数据库的数据写入和更新等操作,从而协助 agbot 实现自动化数据测试。

常见问题

异步查询接口回调

  1. 确保调用异步查询接口的 req_id 参数唯一

  2. 确保接口回调的服务与环境所在 Virgo 服务的网络能够连通

调用 JFetch 没有响应

JFetch 在普天环境和阿里云环境都有部署,确定调用的环境以及网络是否连通

接入流程

  1. 申请 BUser,具体参考“Jarvis账号申请流程

  2. 按照公司流程,向 DBA 申请数据源配置,DBA 管理数据源的用户表权限

  3. 准备以下表格,app_token 是 BUser 标识,数据源配置包括类型、URL、用户名和密码

系统中文名

系统英文名

环境

app_token

数据源类型

URL

用户名

密码

速刷

supay

测试

app-***66322e

Vertica

jdbc:vertica://*:*/***db

jf_***_user

***

速刷

supay

生产

app-***66322e

Vertica

jdbc:vertica://*:*/***db

jf_***_user

***

  1. 以上表格,邮件给审批人(xin.guo@huifu.com)申请,并抄送项目经理

  2. 审批人进行审核,通过后,将 ds_key 发给用户

API 文档

请求地址

测试地址:http://192.168.16.210:7099

联调地址:http://192.168.16.248:10010

生产地址(阿里云):https://jua.cloudpnr.com

生产地址(普天):http://10.99.1.4

公共参数

所有接口均包含公共参数,为减少冗余,单独提出。

公共请求参数

名称

类型

是否必须

限制

描述

req_id

String

变长 32 位

请求流水号,不具有业务含义,用于跟踪请求信息。建议采用 {JMan用户名}_{请求方唯一数字流水号},以保持唯一

app_token

String

变长 40 位

Jarvis分配的,app_token用于同一用户不同产品或渠道的接口调用区分

signature

String

定长 64 位

v1.0.0版本,明文拼接规则:请求方法方式(大写) + app_token + 请求参数(请求参数需要按 ASCII 字符排序依次拼接),明文加签规则:见章节“API签名”。v2版本,明文拼接规则和明文加签规则参见“API签名”。

公共响应参数

名称

类型

是否必须

限制

描述

req_id

String

变长 32 位

同请求

resp_code

String

定长 5 位

返回码

resp_msg

String

变长 256 位

返回描述

HTTP 状态码

所有接口均符合 RESTful 规范,返回 HTTP 状态码,为减少冗余,单独提出。

状态码

描述

状态说明

200

OK

服务器成功返回用户请求的数据,通常出现在GET 操作中

201

Created

服务器成功创建用户请求的纪录,通常出现在POST/PUT/PATCH 操作中

400

Bad Request

用户发起的请求有错误,参数不符合API 规则

401

Unauthorized Access

用户没有权限,通常出现在登录失败或者app_token 错误的情况

403

Forbidden

用户登录成功,但是没有该操作的权限

404

Not Found

用户发出的请求不存在,该响应可能是请求的记录或者请求的页面不存在,具体参考详细的错误码

5xx

Internal Server Error

服务器内部错误,出现该错误说明Jarvis 服务目前不可用

返回码定义

JFetch 返回码为 5 位数字,前 3 位表示接口编号,后 2 位表示返回信息。

1xx~8xx 起始的错误码表示仅该接口出现的返回信息,后 2 位为 00-09 时表示成功返回,为 10-99 时表示失败返回。

9xx 起始的返回码表示所有接口都可能出现的公共返回信息,90000~90009 表示成功返回,90010~99999 表示错误返回。

返回码

描述

状态说明

90000

Success

成功

90092

Prod Forbid

生产环境禁止使用该接口

90099

System Error

系统内部错误,服务不可用

90100

Invalid parameters

请求信息参数不符合规则

90201

Invalid User Information

请求用户信息无效

90301

Authentication Denied

请求信息权限认证未通过

90302

Signature Failed

请求信息签名验证未通过

90303

Access White List Denied

请求信息白名单验证未通过

通用同步数据查询

调用 JFetch 通用同步数据查询接口,可通过指定数据源获取满足查询条件的目标数据集合。

HTTP Request

v1.0.0

GET http://192.168.16.210:7099/fetch/data/v1.0.0/query

v2

GET http://192.168.16.210:7099/fetch/data/v2/query

请求参数

名称

类型

是否必须

限制

描述

query_lang

String

定长 2 位

请求方所采用的查询语言,需注意不同的查询语言,其语法规范会有不同。01-Impala SQL;02-Vertica SQL;03-MySQL SQL;04-Oracle SQL;默认值为03

query_sql

String

不定长

需要查询引擎执行的查询语句的 Base64 编码,不支持的 SQL 关键字列表:CREATE,DROP,ALTER,TRUNCATE,DELETE,MERGE,INSERT,UPDATE,V$,UTL_HTTP,EXEC ( 不区分大小写 ) 。编码后需进行urlencode编码,防止加号、等于号等出现歧异

db_type

String

不定长

数据库类型,默认为 MySQL,可取值范围:MySQL,Vertica,Hive,Oracle ( 不区分大小写 )

ds_key

String

定长 40 位

通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串

result_form

String

定长 2 位

返回结果集的格式,默认取值为 01。01-JSON;02-CSV

result_flat

String

定长 2 位

返回结果集 result_set 采用的处理算法,默认不做任何处理。01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64 编码

max_rows

String

变长 8 位

同步返回最大行数。只在v2版本有效。取值范围在1到50000000之间。默认为1000行。

响应参数

名称

类型

是否必须

限制

描述

result_form

String

定长 2 位

返回结果集的格式,默认取值为 01。01-JSON;02-CSV

result_flat

String

定长 2 位

返回结果集 result_set 采用的处理算法,默认不做任何处理。01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64 编码

result_num

Integer

不定长

满足条件的查询结果数目

result_set

String

不定长

满足条件的查询结果集合

expend_time

Integer

不定长

查询耗时,以毫秒为单位

失败响应

返回码

描述

状态说明

10098

存在异常结果数据,系统处理发生错误

存在异常结果数据,系统处理发生错误

10097

数据源不存在或拒绝接受客户端连接请求

数据源不存在或拒绝接受客户端连接请求

10096

存在 SQL 语法错误,请检查 SQL 指令是否符合相关规范

存在 SQL 语法错误,请检查 SQL 指令是否符合相关规范

10095

无法解析的查询指令,请检查 SQL 指令是否符合相关规范

无法解析的查询指令,请检查 SQL 指令是否符合相关规范

调用示例

curl -H env:test \
     -X GET \
     -F "req_id=201709150000002" \
     -F "app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2" \
     -F "signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643" \
     -F "ds_key=dbs-51045419-3c95-4074-bc49-083c7fb8570c" \
     -F "query_language=02" \
     -F "result_format=01" \
     -F "query_sql=U0VMRUNUICogRlJPTSB0YWJfc3lzX2NmZyB0IG9yZGVyIGJ5IHQuY29uZmlnX2lkIGRlc2M7" \
     -F "query_lang=01" \
     -F "result_flater=02" \
     http://192.168.16.210:7099/fetch/data/v1.0.0/query
curl GET http://192.168.16.210:7099/fetch/data/v1.0.0/query?req_id=201709150000002\&app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2\&signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643\&query_language=02\&ds_key=dbs-51045419-3c95-4074-bc49-083c7fb8570c\&result_format=01\&query_sql=U0VMRUNUICogRlJPTSB0YWJfc3lzX2NmZyB0IG9yZGVyIGJ5IHQuY29uZmlnX2lkIGRlc2M7\&query_lang=01\&result_flater=02 -H env:test

成功响应

 HTTP Status Code:200
 {
     "req_id":"201709150000002",
     "resp_code":"90100",
     "result_flater":"02",
     "result_format":"01",
     "result_num":3,
     "resp_msg":"成功",
     "result_set":"W3siY29uZmlnX3ZhbHVlIjoiMTI3LjAuMC4xfDE3Mi4zMS4xOS4yMyIsImNvbmZpZ19yZW1hcmsiOiJJUOWcsOWdgOeZveWQjeWNlSIsImNvbmZpZ19pZCI6IjMiLCJjcnRfZGF0ZXRpbWUiOiIyMDE3LTEwLTE2IDA0OjM2OjEyIiwiY29uZmlnX2tleSI6ImFwcC5hY2Nlc3MuaXBzIiwic3lzX25hbWUiOiJhcHAtZjI4MDQ3YTktMGZlYy00NDU3LWE4YzYtZGZlMTQ2NWNkMWEyIiwiY29uZmlnX3R5cGUiOiJhd2wiLCJ1cGRfZGF0ZXRpbWUiOiIyMDE3LTEwLTE2IDA0OjM3OjE2IiwiY29uZmlnX3ZlcnNpb24iOiJ2MS4wLjAifSx7ImNvbmZpZ192YWx1ZSI6InNrZXktM2Y2Y2M4ODMtODQ5NS00MThkLTgxMDktZjFhNGZjODUyMTZmIiwiY29uZmlnX3JlbWFyayI6IuetvuWQjeS9v+eUqCIsImNvbmZpZ19pZCI6IjIiLCJjcnRfZGF0ZXRpbWUiOiIyMDE3LTEwLTE2IDA0OjM1OjQxIiwiY29uZmlnX2tleSI6ImFwcC5rZXkiLCJzeXNfbmFtZSI6ImFwcC1mMjgwNDdhOS0wZmVjLTQ0NTctYThjNi1kZmUxNDY1Y2QxYTIiLCJjb25maWdfdHlwZSI6ImF3bCIsInVwZF9kYXRldGltZSI6IjIwMTctMTAtMTcgMDg6MTQ6MDIiLCJjb25maWdfdmVyc2lvbiI6InYxLjAuMCJ9LHsiY29uZmlnX3ZhbHVlIjoiamZldGNoX3Rlc3QiLCJjb25maWdfcmVtYXJrIjoi5rWL6K+VQi1VU0VSIiwiY29uZmlnX2lkIjoiMSIsImNydF9kYXRldGltZSI6IjIwMTctMTAtMTYgMDQ6MzQ6NDIiLCJjb25maWdfa2V5IjoiYnVzZXIubmFtZSIsInN5c19uYW1lIjoiYXBwLWYyODA0N2E5LTBmZWMtNDQ1Ny1hOGM2LWRmZTE0NjVjZDFhMiIsImNvbmZpZ190eXBlIjoic3lzIiwidXBkX2RhdGV0aW1lIjoiMjAxNy0xMC0xNiAwNDozNDo0MiIsImNvbmZpZ192ZXJzaW9uIjoidjEuMC4wIn1d",
     "expend_time":426
}

失败响应

HTTP Status Code:401
{
     "req_id":"201709150000002",
     "resp_code":"90201",
     "resp_message":"请求用户信息无效"
}

通用缓存数据查询

调用 JFetch 通用缓存数据查询接口,可高效快速获取Redis缓存数据库(单机版)指定Key值数据集合。

HTTP Request

v1.0.0

GET http://192.168.16.210:7099/fetch/data/v1.0.0/mapping

v2

GET http://192.168.16.210:7099/fetch/data/v2/mapping

请求参数

名称

类型

是否必须

限制

描述

ds_key

String

定长 40 位

通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串

db_type

String

不定长

数据库类型,默认为 Redis,可取值范围:Redis;Memcached( 不区分大小写 )

cache_type

String

定长2位

缓存数据类型,可取值范围:01-String 类型;02-Hash 类型。注:Memcached不支持Hash类型

cache_key

String

不定长

缓存关键字,支持多个关键字 ( 不超过 20 个 ),多个关键字之间使用英文逗号分隔并使用Base64编码,举例:String类型为 key01,key02 ;Hash类型为 ( Hash 类型Key值组织形式为{key}#{field}形式,其中 field 域为空时查询该 Key 所有 field 缓存值)hashMapKey#mapKey1,hashMapKey#mapKeyx 或 hashMapKey#

result_format

String

定长 2 位

返回结果集的格式,默认取值为 01;01-JSON

result_flater

String

定长 2 位

返回结果集 result_set 采用的处理算法,默认不做任何处理;01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64编码

响应参数

名称

类型

是否必须

限制

描述

result_format

String

定长 2 位

返回结果集的格式,默认取值为 01;01-JSON

result_flater

String

定长 2 位

返回结果集 result_set 采用的处理算法,默认不做任何处理。 01-zLib 压缩 ( 压缩结果已执行 Base64 编码变为可见字符 ) ;02-Base64 编码

result_num

Integer

不定长

满足条件的查询结果数目

result_set

String

不定长

满足条件的查询结果集合,举例如下:String 类型为{“key01”:“value01”,“key02”:“value02”};Hash 类型为{“hashMapKey#mapKey1”:“mapValue1”,“hashMapKey#mapKeyx”:“mapValuex”}或 {“hashMapKey#mapKey2”:“mapValue2”,“hashMapKey#mapKey1”:“mapValue1”,“hashMapKey#mapKey0”:“mapValue0”,“hashMapKey#mapKey6”:“mapValue6”,“hashMapKey#mapKey5”:“mapValue5”,“hashMapKey#mapKey4”:“mapValue4”,“hashMapKey#mapKey3”:“mapValue3”,“hashMapKey#mapKey9”:“mapValue9”,“hashMapKey#mapKey8”:“mapValue8”,“hashMapKey#mapKeyx”:“mapValuex”,“hashMapKey#mapKey7”:“mapValue7”}

expend_time

Integer

不定长

查询耗时,以毫秒为单位

失败响应

返回码

描述

状态说明

10198

缓存指令个数超过系统限制,请修改后重新提交

缓存指令个数超过系统限制,请修改后重新提交

10197

缓存服务不存在或不可用,请检查网络或配置信息后再试

缓存服务不存在或不可用,请检查网络或配置信息后再试

10196

缓存指令无法执行,请检查指令是否符合相关协议或规范

缓存指令无法执行,请检查指令是否符合相关协议或规范

10195

缓存指令无法解析,请检查指令是否符合相关协议或规范

缓存指令无法解析,请检查指令是否符合相关协议或规范

调用示例

curl -H env:test
     -X GET
     -F req_id=201709150000002000
     -F app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2
     -F signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643
     -F ds_key=dbs-51045419-3c95-4074-bc49-083c7fb85703
     -F result_format=01
     -F cache_type=01
     -F db_type=Redis
     -F cache_key=a2V5MDEsa2V5MDI=
     http://192.168.16.210:7099/fetch/data/v1.0.0/mapping
curl GET http://192.168.16.210:7099/fetch/data/v1.0.0/mapping?req_id=201709150000002000\&app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2\&signature=7c44e4d13d4687d3719f5436a497391586abc6cd1dc34bed4996bfb0f58f5643\&ds_key=dbs-51045419-3c95-4074-bc49-083c7fb85703\&result_format=01\&cache_type=01\&db_type=Redis\&cache_key=a2V5MDEsa2V5MDI= -H env:test

成功响应

 HTTP Status Code:200
 {
        "req_id":"201709150000002000",
        "resp_code":"90000",
        "result_flater":"",
        "result_format":"01",
        "result_num":2,
        "resp_msg":"成功",
        "result_set":"{\"key01\":\"value01\",\"key02\":\"value02\"}",
        "expend_time":7
}

失败响应

HTTP Status Code:401
{
     "req_id":"201709150000002000",
     "resp_code":"90201",
     "resp_message":"请求用户信息无效"
}

通用异步任务提交

调用 JFetch 通用异步任务提交接口,可通过指定任务类型,来执行不同的异步查询。

HTTP Request

v1.0.0

POST http://192.168.16.210:7099/fetch/data/v1.0.0/queryAsync

v2

POST http://192.168.16.210:7099/fetch/data/v2/queryAsync

请求参数

名称

类型

是否必须

限制

描述

ds_key

String

定长 40 位

通过数据源注册接口获取的数据源实例标识,以“dbs-”起始的字符串

mer_ret_url

String

不定长

回调URL,异步任务执行完成,将会调用该URL,用Base64编码

task_param

String

不定长

任务参数,使用json格式并且进行Base64编码。应当包含一个key为“query_sql”、值为SQL字符串的属性。SQL长度不应超过4000

响应参数

名称

类型

是否必须

限制

描述

task_id

String

变长 40 位

任务ID,该任务的唯一ID

调用示例

curl -X POST \
     -F "req_id=001" \
     -F "app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc" \
     -F "signature=74303f2f20c2169a422ab60435db165718a65c64262ca6e503e8c7150ea40697" \
     -F "ds_key=dbs-b0a6664a-d201-4ad0-b9f9-274c2635eb49" \
     -F "task_param=eydxdWVyeV9zcWwnOidTRUxFQ1QgKiBmcm9tIGRtX3JjLnN1cGF5X2dhX21lcl9zY29yZSd9" \
     -F "mer_ret_url=aHR0cDovLzE3Mi4zMS4xOS41ODo4MDkwL2JnL3F1ZXJ5QXN5bmNDYWxsYmFjaw==" \
     http://192.168.16.210:7099/fetch/data/v1.0.0/queryAsync
curl -X POST -d 'req_id=001&mer_ret_url=aHR0cDovLzE3Mi4zMS4xOS41ODo4MDkwL2JnL3F1ZXJ5QXN5bmNDYWxsYmFjaw==&app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc&signature=74303f2f20c2169a422ab60435db165718a65c64262ca6e503e8c7150ea40697&ds_key=dbs-b0a6664a-d201-4ad0-b9f9-274c2635eb49&task_param=eydxdWVyeV9zcWwnOidTRUxFQ1QgKiBmcm9tIGRtX3JjLnN1cGF5X2dhX21lcl9zY29yZSd9' http://192.168.16.210:7099/fetch/data/v1.0.0/queryAsync

成功响应

 HTTP Status Code:200
 {
     "req_id":"001",
     "resp_code":"90000",
     "resp_msg":"成功",
     "task_id":"task-99430690-52e2-4463-ba21-561bda669e70"
}

失败响应

HTTP Status Code:401
{
     "req_id":"1001",
     "resp_code":"90201",
     "resp_message":"请求用户信息无效"
}

通用异步任务查询

调用 JFetch 通用异步任务查询接口,可查询异步任务的详细信息。

HTTP Request

v1.0.0

GET http://192.168.16.210:7099/fetch/data/v1.0.0/queryTask

v2

GET http://192.168.16.210:7099/fetch/data/v2/queryTask

请求参数

名称

类型

是否必须

限制

描述

task_id

String

变长 40 位

任务ID,该任务的唯一ID

响应参数

名称

类型

是否必须

限制

描述

task_id

String

变长 40 位

任务ID,该任务的唯一ID

app_token

String

变长 40 位

参数中的app_token

task_type

String

变长 24 位

任务类型,Vertica异步查询为AsyncVertica

task_req_id

String

变长 32 位

任务提交时的请求ID

task_app_token

String

变长 40 位

任务提交时的app_token

task_state

String

定长 1 位

任务状态“I”:任务初期化“S”:任务成功“F”:任务失败

task_param

String

不定长

任务提交时的参数

task_sync_result

String

不定长

任务同步返回结果,json格式

task_async_result

String

不定长

任务异步返回结果,json格式

ret_url

String

不定长

任务回调URL

ret_param

String

不定长

任务回调参数

crt_date

String

不定长

任务创建日期

crt_time

String

不定长

任务创建时间

upd_date

String

不定长

任务更新日期

upd_time

String

不定长

任务更新时间

失败响应

返回码

描述

状态说明

10098

异步任务不存在

使用该任务ID,无法查询到相应的异步任务

10099

只能查询本APP的任务

查询的任务不是本APP_TOKEN提交的

调用示例

curl -X GET \
     -F "req_id=001" \
     -F "app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc" \
     -F "signature=ffa1974beb0428950281f171d9023178bd4b205ee688207a64c92bebb8eadcb" \
     -F "task_id=task-99430690-52e2-4463-ba21-561bda669e70" \
     http://192.168.16.210:7099/fetch/data/v1.0.0/queryTask
curl GET http://192.168.16.210:7099/fetch/data/v1.0.0/queryTask?task_id=task-99430690-52e2-4463-ba21-561bda669e70\&app_token=app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc\&req_id=001\&signature=ffa1974beb0428950281f171d9023178bd4b205ee688207a64c92bebb8eadcb

成功响应

 HTTP Status Code:200
 {
  "app_token":"app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc",
  "task_async_result":"{\"req_id\":\"001\",\"resp_code\":\"90000\",\"task_state\":\"S\",\"task_id\":\"task-99430690-52e2-4463-ba21-561bda669e70\",\"resp_msg\":\"成功\",\"async_task_result\":\"eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNDU3OTA2ZjE3ZThiLTJkMDgtNDZhMS04MTJkLTVlYjBiOWQzY2UyNiIsImlwIjoiMTAuOTYuNTQuMTI1In0=\"}",
  "task_app_token":"app-f17f78fe-1994-4c71-9f9f-b2c5fad72dcc",
  "task_state":"S",
  "task_id":"task-99430690-52e2-4463-ba21-561bda669e70",
  "req_id":"001",
  "upd_date":"20180619",
  "resp_code":"90000",
  "task_param":"{\"querySql\":\"SELECT * from dm_rc.supay_ga_mer_score\"}",
  "ret_param":"?resp_code=90000&resp_msg=%E6%88%90%E5%8A%9F&req_id=001&task_id=task-99430690-52e2-4463-ba21-561bda669e70&task_state=S&async_task_result=eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNDU3OTA2ZjE3ZThiLTJkMDgtNDZhMS04MTJkLTVlYjBiOWQzY2UyNiIsImlwIjoiMTAuOTYuNTQuMTI1In0=",
  "crt_time":"212254",
  "upd_time":"212343",
  "task_req_id":"001",
  "task_type":"AsyncVertica",
  "resp_msg":"成功",
  "task_sync_result":"{\"req_id\":\"001\",\"resp_code\":\"90000\",\"task_id\":\"task-99430690-52e2-4463-ba21-561bda669e70\",\"resp_msg\":\"成功\"}",
  "ret_url":"http://172.31.31.158:9999/bg/queryAsyncCallback",
  "crt_date":"20180619"
}

失败响应

HTTP Status Code:401
{
     "req_id":"001",
     "resp_code":"90201",
     "resp_message":"请求用户信息无效"
}

异步回调请求

在异步任务执行完成之后, JFetch 会发起异步回调请求,将异步任务结果发送给调用方。请求URL为提交任务时的mer_ret_url参数。

请求参数

名称

类型

是否必须

限制

描述

req_id

String

定长 40 位

任务提交时的请求ID

resp_code

String

不定长

异步任务执行结果,90000为正确

task_state

String

不定长

任务状态

task_id

String

不定长

任务ID,该任务的唯一ID

resp_msg

String

不定长

异步任务执行结果,“成功”表示正确

async_task_result

String

不定长

异步任务结果,使用Base64解码。Vertica异步查询的话,包含结果文件所在机器的IP和文件路径

调用示例

curl -X GET \
     -F "req_id=001" \
     -F "resp_code=90000" \
     -F "task_state=S" \
     -F "task_id=task-dd904e5f-64d1-4e09-85f9-e224c09ea3f5" \
     -F "resp_msg=成功" \
     -F "async_task_result=eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNTU2NzQ4MzE4YzEyLTk5YTktNGVlYS05MzIzLWVkZWZmNjA1MTBkZCIsImlwIjoiMTAuOTYuQuMTI1In0=" \
     http://172.31.19.58:8090/bg/queryAsyncCallback
curl GET http://172.31.19.58:8090/bg/queryAsyncCallback?task_id=task-dd904e5f-64d1-4e09-85f9-e224c09ea3f5\&resp_code=90000\&req_id=001\&task_state=S\&resp_msg=成功\&async_task_result=eyJmaWxlX3BhdGgiOiIvYXBwL3NjcmlwdHMvamZldGNoX2ZpbGUvMjAxODA2MTkvMTUyOTQxNTU2NzQ4MzE4YzEyLTk5YTktNGVlYS05MzIzLWVkZWZmNjA1MTBkZCIsImlwIjoiMTAuOTYuQuMTI1In0=

通用数据执行

调用 JFetch 通用数据执行接口,可执行插入、更新、删除SQL。

HTTP Request

v1.1.0

POST http://192.168.16.210:7099/fetch/data/v1.1.0/execute

v2

POST http://192.168.16.210:7099/fetch/data/v2/execute

请求参数

名称

类型

是否必须

限制

描述

query_lang

String

定长 2 位

请求方所采用的查询语言,需注意不同的查询语言,其语法规范会有不同。01-Impala SQL;02-Vertica SQL;03-MySQL SQL;04-Oracle SQL;默认值为03

query_sql

String

不定长

需要查询引擎执行的查询语句的 Base64 编码,不支持的 SQL 关键字列表:SELECT,DROP,ALTER,MERGE,TRUNCATE,WITH,INSERT,V$,UTL_HTTP,EXEC ( 不区分大小写 ),只支持INSERT,UPDATE,DELETE(不区分大小写)

db_type

String

定长 2 位

数据库类型,默认为 MySQL,可取值范围:MySQL,Vertica,Hive,Oracle ( 不区分大小写 )

ds_key

String

定长 40 位

通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串

响应参数

名称

类型

是否必须

限制

描述

expend_time

Integer

查询耗时,以毫秒为单位

调用示例

curl -X POST \
     -F "req_id=redis_test1" \
     -F "ds_key=dbs-86ffaa1b-8a84-4540-82ab-dcb9f56eeb45" \
     -F "app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2" \
     -F "signature=b1400d11f797a9364e9b04f4797c92a0490f0212cb61ebde47be331840397eef" \
     -F "query_lang=04" \
     -F "query_sql=VVBEQVRFIG11c2VyZGIucDJwX2NvbmZfaW5mbyB0IFNFVCB0LklOVkVTVF9CT1JST1dfU0VQRVJBVEVfU1dJVENIID0gJ1knIFdIRVJFIHQuY3VzdF9pZCA9ICc2MDAwMDYwMDAwODg1NzQyJzs=" \
     -F "db_type=Oracle" \
     http://192.168.16.210:7099/fetch/data/v1.1.0/execute

成功响应

HTTP Status Code:200
{
    "req_id":"redis_test1",
    "resp_code":"90000",
    "resp_msg":"成功",
    "expend_time":270
}

失败响应

HTTP Status Code:500
 {
     "req_id":"redis_test1",
     "resp_code":"10097",
     "resp_msg":"数据源不存在或拒绝接受客户端连接请求",
     "expend_time":0
 }

通用缓存执行

调用 JFetch 通用缓存执行接口,可执行设置、删除缓存。

HTTP Request

v1.1.0

POST http://192.168.16.210:7099/fetch/data/v1.1.0/cache

v2

POST http://192.168.16.210:7099/fetch/data/v2/cache

请求参数

名称

类型

是否必须

限制

描述

cache_type

String

定长 2 位

缓存数据类型,可取值范围:01-String 类型;02-Hash 类型。注:memcached不支持Hash类型

cache_key

String

不定长

缓存关键字,支持多个关键字(不超过20个),多个关键字之间使用英文逗号分隔并使用Base64编码,举例: String类型 : key01,key02;Hash类型 : (Hash类型Key值组织形式为{key}#{field}形式,其中field域为空时查询该Key所有field缓存值)hashMapKey#mapKey1,hashMapKey#mapKeyx 或 hashMapKey#。注:memcached不支持批量操作

cache_value

String

不定长

缓存值,数量应当和cache_key相同,多个值之间使用英文逗号分隔开并使用Base64编码,举例 : value01,value02

db_type

String

定长 2 位

数据库类型,默认为 Redis,可取值范围:Redis ( 不区分大小写 )、Memcached(不区分大小写)

ds_key

String

定长 40 位

通过数据源注册接口获取的数据源实例标识,以 “dbs-” 起始的字符串

execute_type

String

定长 2 位

执行类型,可取值范围:01-SET或HSET;设置、02-DEL,删除

expire_time

String

不定长

过期时间。纯数字,不得超过8位,以秒为单位,不传或传0,表示不设置超时时间

响应参数

名称

类型

是否必须

限制

描述

expend_time

Integer

查询耗时,以毫秒为单位

调用示例

curl -X POST \
     -F "req_id=redis_test1" \
     -F "ds_key=dbs-aab3388f-b354-4ddf-a189-07c4cf1c7295" \
     -F "app_token=app-f28047a9-0fec-4457-a8c6-dfe1465cd1a2" \
     -F "signature=c8b0932a6993a022472025f13681e19f1572dd106d798268085953899a15fa56" \
     -F "db_type=Redis" \
     -F "cache_type=01" \
     -F "cache_key=YWFh" \
     -F "cache_value=MTEx" \
     -F "execute_type=01" \
     http://192.168.16.210:7099/fetch/data/v1.1.0/cache

成功响应

HTTP Status Code:200
{
    "req_id":"redis_test1",
    "resp_code":"90000",
    "resp_msg":"成功",
    "expend_time":270
}

失败响应

HTTP Status Code:500
 {
         'req_id': 'redis_test1',
         'expend_time': 0,
         'resp_code': '90099',
         'resp_msg': '系统异常,请稍后再试'
 }