跳到主要内容

v1 API 创建对外查询

API 使用者,可以通过本接口,为一张表单创建对外查询页面:访问者填入查询条件即可查到匹配的数据

功能免费版专业版/专业增强版企业基础版企业协作版企业高级版
对外查询❌✔️✔️✔️✔️

认证方式​

V1 Bearer 认证方式

headers 设置​

需要在请求中设置如下 headers

  • Content-Type: application/json
  • Accept: application/json
  • Authorization: Bearer YOUR_ACCESS_TOKEN

接口说明​

  • 先调用获取对外查询可用字段,search_field_rules / display_field_rules 里的 api_code 必须来自那里,否则返回 400 并列出合法取值。
  • 调用方需要是该表单的管理员;能读表单但无管理权时返回 403。
  • 需要当前套餐支持「对外查询」,否则返回 402。
  • 创建出的查询归调用方所有,之后只有创建者能获取和编辑(账号级 API 的身份等同于账号 owner)。
  • display_field_rules 不能为空。protected / editable 只在字段本身支持时生效(见可用字段接口的 privacy_protectable / editable)。

接口描述​

Request​

POST https://jinshuju.net/api/v1/opensearch/queries

{
"form_token": "wX7pQ2",
"name": "成绩查询",
"search_field_rules": [
{
"operand": "and",
"search_field_settings": [
{ "field_api_code": "field_2", "field_label": "手机号", "sms_verification": true }
]
}
],
"display_field_rules": [
{ "field_api_code": "field_1", "protected": true },
{ "field_api_code": "field_3" }
],
"messages": { "has_result": "查到了你的成绩", "no_result": "没有查到,请核对手机号" },
"search_button": { "text": "查询成绩", "color": "#1F6FEB" },
"allow_to_export_results": false
}
参数名称是否必须类型说明
form_token是String数据来源表单的 Token
name是String查询页标题
description否String查询页描述文案
enabled否Boolean是否启用,默认 true
search_field_rules否Array(OpensearchSearchFieldRule)查询条件组,通常只有一组;结构见获取单个对外查询
display_field_rules是Array(OpensearchDisplayFieldRule)命中数据展示的字段,按展示顺序,不能为空
search_button否Object查询按钮外观,包含 text / color
search_button.text否String按钮文字
search_button.color否String按钮颜色
messages否Object结果文案,包含 has_result / no_result;未传的 key 在公开页上回落到产品默认值
messages.has_result否String查到结果时的提示文案
messages.no_result否String未查到结果时的提示文案
allow_to_export_results否Boolean是否允许访问者导出查询结果,默认 false
header否Object页头设置
header.background_image否Object页头背景图
header.background_image.attachment_id否String背景图附件 ID,由 POST /form_image_attachments(image_type=opensearch_header)返回
header.background_image.image_upload_token否String与 attachment_id 二选一:用途为 opensearch_header 的 form_image_token
header.background_image.position_x否Number背景图横向位置
header.background_image.position_y否Number背景图纵向位置
extra_configurable_setting否Object额外设置
extra_configurable_setting.show_exam_correct_answer否Boolean是否展示考试正确答案
extra_configurable_setting.show_exam_explanation否Boolean是否展示考试答案解析
scope_conditions否Array(Object)限定可被查询的数据范围;需套餐支持,否则返回 400
scope_conditions[].trigger否String触发字段的 api_code
scope_conditions[].operator否String运算符
scope_conditions[].value否Any条件值
scope_conditions[].group_index否Integer条件分组序号;同组条件为 and,不同组之间为 or
scope_conditions[].scope_attr否String条件作用的属性

Response​

201 Created,返回新建查询的完整配置,结构同获取单个对外查询。把响应里的 url 交给访问者即可开始使用。

参数名称是否必须类型说明
token是String对外查询 Token
url是String公开查询页地址
name是String查询页标题
enabled是Boolean是否启用
form_token是String / null数据来源表单 Token;来源表单已删除时为 null
created_at是DateTime创建时间
searches_count是Integer累计查询次数
views_count是Integer累计访问次数
description是String / null查询页描述文案
status是String查询页可用状态:active = 正常;entries_count_limited = 表单数据量超出套餐的对外查询上限,访问者会看到不可用提示;form_not_found = 来源表单已删除。与 enabled 无关,停用的查询 status 仍可能是 active
search_field_rules是Array(Object)查询条件组,通常只有一组
search_field_rules[].operand是String组内多个查询字段的关系:and = 全部匹配;or = 任一匹配
search_field_rules[].search_field_settings是Array(OpensearchSearchFieldSetting)访问者需要填写的查询字段
display_field_rules是Array(Object)命中数据展示的字段,按展示顺序
display_field_rules[].field_api_code是String展示字段的 api_code
display_field_rules[].field_label是String / null自定义标签;未设置为 null
display_field_rules[].editable是Boolean是否允许访问者在结果页编辑该字段值
display_field_rules[].protected是Boolean是否对值做隐私脱敏(如 张*三)
display_field_rules[].highlight是Object / null高亮设置;未设置为 null
display_field_rules[].highlight.color否String / null高亮颜色(CSS 颜色值)
display_field_rules[].highlight.position否Integer多个高亮字段间的排序,越小越靠前
messages是Object / null已存下来的结果文案;未设置的 key 不出现
messages.has_result否String查到结果时的提示文案
messages.no_result否String未查到结果时的提示文案
default_messages是Object回落默认值之后的实际生效文案
default_messages.has_result是String查到结果时的提示文案
default_messages.no_result是String未查到结果时的提示文案
search_button是Object查询按钮外观,包含 text / color;未设置时为 {}
search_button.text否String按钮文字
search_button.color否String按钮颜色
allow_to_export_results是Boolean是否允许访问者导出查询结果
header是Object页头设置
header.background_image是Object / null页头背景图;未设置为 null
header.background_image.attachment_id是String背景图附件 ID
header.background_image.position_x是Number / null背景图横向位置
header.background_image.position_y是Number / null背景图纵向位置
header.background_image.image_url是String / null背景图地址
updated_at是DateTime最后更新时间

状态码​

状态码说明
201创建成功
400参数不合法:api_code 不在该表单的可查询/可展示字段内、查询条件或展示字段为空等,错误详情见 error_description
401未认证
402当前套餐不支持 V1 API 或不支持「对外查询」
403能访问该表单但不是表单管理员
404表单不存在或无权访问

数据类型​

OpensearchSearchFieldRule​

参数名称是否必须类型说明
operand否String组内多个查询字段的关系:and = 全部匹配;or = 任一匹配。默认 and
search_field_settings是Array(OpensearchSearchFieldSetting)访问者需要填写的查询字段,不能为空

OpensearchDisplayFieldRule​

参数名称是否必须类型说明
field_api_code是String展示字段的 api_code,须在可用字段的 display_fields 中
field_label否String / null展示给访问者的自定义标签;为空时用字段标题
editable否Boolean是否允许访问者在结果页编辑该字段值,默认 false
protected否Boolean是否对值做隐私脱敏,默认 false;仅支持脱敏的字段生效
highlight否Object / null高亮设置;null 表示不高亮
highlight.color否String / null高亮颜色(CSS 颜色值)
highlight.position否Integer多个高亮字段间的排序,越小越靠前,默认 999

OpensearchSearchFieldSetting​

参数名称是否必须类型说明
field_api_code是String查询字段的 api_code,须在可用字段的 search_fields 中
field_label否String / null展示给访问者的自定义标签;未设置(null)时用字段标题
fuzzy否Booleantrue = 包含匹配;false = 精确匹配(默认)
sms_verification否Boolean查询前是否要求短信验证(仅手机号字段生效),默认 false

示例代码​

HTTP​

POST https://jinshuju.net/api/v1/opensearch/queries

Content-Type: application/json
Accept: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN

{
"form_token": "$FORM_TOKEN",
"name": "成绩查询",
"search_field_rules": [{"operand": "and", "search_field_settings": [{"field_api_code": "field_2"}]}],
"display_field_rules": [{"field_api_code": "field_1", "protected": true}]
}

Python​

import requests

access_token = 'YOUR_ACCESS_TOKEN'
form_token = 'YOUR_FORM_TOKEN'
base = 'https://jinshuju.net/api/v1'
headers = {'Authorization': f'Bearer {access_token}'}

# 1. 先拿到该表单允许的字段
suggestions = requests.get(
f'{base}/opensearch/query_suggestions',
headers=headers, params={'form_token': form_token}
).json()
search_code = suggestions['recommend_search_fields'][0]

# 2. 创建对外查询
response = requests.post(
f'{base}/opensearch/queries',
headers=headers,
json={
'form_token': form_token,
'name': '成绩查询',
'search_field_rules': [
{'operand': 'and', 'search_field_settings': [{'field_api_code': search_code}]}
],
'display_field_rules': [{'field_api_code': suggestions['display_fields'][0]['api_code']}]
}
)

print(response.json()['url'])