数据标注平台接口文档
数据标注平台接口文档
作者:李瑞杰
备注:所有数据都是以JSON
的数据格式在前后端进行传递。
用户
GET /user/get-current 获取当前登录用户
传入参数:
无
返回数据:
若session中没有用户信息,就返回
{
'response': "未登录"
}
若存在用户信息,返回
{
'response': "已登录",
'username': username,
'usertype': usertype
}
其中全部的数据均为字符串类型,具体含义如下:
- username:用户名
- usertype:用户类型,若登陆用户是管理员,则为
manager
, 若是专家,则为expert
。
GET /user/list 列出用户,用于分配人员界面
传入参数:
无
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{
"response": res
}
其中res
是一个数组,数组的每一个元素都是一个对象,表示一个专家的信息,res
结构如下
[
{
'expert_id': expert.expert_id,
'expert_name': expert.expert_name,
'expert_area': expert.expert_area
},
...
]
其中expert_id
为整数类型,其余均为字符串类型,具体含义如下:
- expert_id:专家的id
- expert_name:专家的名字
- expert_area:专家的擅长领域。
GET /user/login 登录
传入参数:
- username:用户名
- password:密码
均为字符串类型
返回数据:
若登陆成功,则返回
{'response': '登录成功', 'Session-Id': session.session_id}
若用户名不存在,则返回
{'response': '登陆失败,账号不存在,请先注册'}
若用户密码不正确
{'response': '登陆失败,用户名或密码不正确'}
GET /user/logout 登出功能
传入参数:
无
返回数据:
{'response': '登出成功'}
POST /user/register 专家的注册功能
传入参数:
- username:专家的用户名
- password:密码
- user_area:专家擅长的领域
返回数据:
如果专家的用户名已经存在了,则返回
{'response': '注册失败,用户名已存在'}
否则,注册成功,返回
{'response': '注册成功'}
POST /user/register-manager 管理员的注册功能
传入参数:
- username:管理员的用户名
- password:管理员的密码
返回数据:
如果管理员的用户名已经存在了,则返回
{'response': '注册失败,用户名已存在'}
否则,注册成功,返回
{'response': '注册成功'}
数据集
GET /dataset/get 获取数据集信息,用于管理员分发标注任务界面,返回数据集各个领域的信息
传入参数:
- dataset_id:数据集id
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{"response": res}
其中res
是一个数组,数组的每一个元素都是一个对象,表示数据集某个领域的信息,res
结构如下
[
{
"area": area,
"data_size": data_size,
"dataset_size": dataset_size,
"is_assigned": is_assigned,
"expert_name": expert_name
},
...
]
其中area
, expert_name
为字符串类型,is_assigned
是布尔类型,data_size
和dataset_size
为整数类型,具体含义如下:
- area:领域名字
- data_size:当前领域的数据量
-
dataset_size:数据集的总数据量
- is_assigned:表示当前领域的数据是否已经分配。为
True
代表已分配,为False
代表未分配 - expert_name:专家名字,若未分配,会返回
"-"
GET /dataset/list 列出数据集,用于管理员数据集列表
传入参数:
无
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{"response": res}
其中res
是一个数组,数组的每一个元素都是一个对象,表示一个数据集的信息,res
结构如下
[
{
"dataset_id": dataset_id,
"dataset_name": dataset_name,
"dataset_task_type": dataset_task_type,
"dataset_source": dataset_source,
"dataset_upload_time": dataset_upload_time,
"dataset_assign_time": dataset_assign_time,
"status": status
},
...
]
除dataset_id
是整数类型外,其余均为字符串类型,具体含义如下:
- dataset_id:数据集id
- dataset_name:数据集名称
- dataset_task_type:数据集任务类型
- dataset_source:数据集来源
- dataset_upload_time:数据集上传时间,如
"2024/01/12"
- dataset_assign_time:数据集最近一次分配任务的时间,若没有分配过任务,则为
"-/-/-"
, - status:数据集状态,数据集如果是未分配的状态,
status
就为'未分配'
,如果是已分配,status
就为'已分配'
,如果是已完成状态,status
就是'已完成'
,如果是已结束,status
就为'已结束'
。
POST /dataset/upload 上传数据集
传入参数:
- dataset_name
- dataset_task_type
- dataset_source
- dataset_json
除dataset_json
是JSON类型外,其余数据均为字符串类型,具体含义如下:
- dataset_name:数据集名称
- dataset_task_type:数据集任务类型
- dataset_source:数据集来源
- dataset_json:数据集的所有数据
这里的dataset_json
应该将数据集的所有数据data
用JSON.stringify()
函数生成JSON格式的数据,而data
是一个数组,数组内的每一个元素是一个对象,表示一条数据的具体信息,data
结构如下
[
{
"data_background":"xxx",
"data_question":"xxx",
"data_answer":Json,
"data_area":"xxx",
"data_keyword":"xxx",
"other":"xxx"
},
...
]
每个对象分别表示一条数据的信息,对象内所有数据都是字符串类型的,除了其中的data_answer
是JSON
格式的数据,表示这条数据的答案,data_answer
具体的定义参考樊坤的《标注平台数据上传与下载概述文档》。
[{“answer”: “...”, “ranking_number”: 0, “reserve”: 0},....]
data
内其余的参数含义如下:
- data_background:数据背景信息
- data_question:问题信息
- data_answer:答案信息
- data_area:数据所属领域
- data_keyword:数据的关键字
- other:数据的其他信息。
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{"response": "success"}
GET /dataset/download 用于管理员数据集列表,归档操作
传入参数:
- dataset_id:数据集id
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回数据集内所有数据,以数组的形式返回,数组内每一个元素是一个对象,分别表示一条数据的信息,返回信息如下:
{
"response":
[
{
"data_background": data.data_background,
"data_question": data.data_question,
"data_answer": data.data_answer,
"data_area": data.data_area,
"data_keyword": data.data_keyword,
"other": data.other,
"expert_name": expert_name,
},
...
]
}
除data_answer
是json
格式的数据外,其余均为字符串数据,具体含义如下:
- data_background:数据背景信息
- data_question:问题信息
- data_answer:答案信息
- data_area:数据所属领域
- data_keyword:数据的关键字
- other:数据的其他信息
- expert_name:标注这条数据的专家名字
任务
GET /task/list 列出所有任务,用于管理员任务列表、标注专家任务列表
传入参数:
无
返回数据:
如果当前未登录,则返回:
{
"response": "请先登录"
}
如果当前已登录且当前用户是专家,则返回:
{
'response': data
}
其中data
是所有任务信息,是一个数组,里面每一个元素是一个对象,代表每个任务的信息,data
结构如下所示:
[
{
"task_id": task_id,
"task_type": task_type,
"area": area,
"resource": resource,
"assign_time": assign_time,
"due_time": due_time,
"status": status,
"finished_count": finished_count,
"total_count": total_count,
"is_highlight": is_highlight,
},
...
]
其中task_type
,area
,resource
,assign_time
,due_time
,status
都是字符串类型,finished_count
和total_count
是整数类型。含义分别如下:
- task_id: 任务id
- task_type:任务类型
- area:任务数据所属领域,如果当前任务没有数据,area值为”-“
- resource:数据来源
- assign_time:分发时间
- due_time:完成时间
- status:状态,包含
"未开始"
,"未完成"
,"超时"
- finished_count:任务内已完成数据量
- total_count:任务内总数据量
- is_highlight:任务是否高亮(被催促),为1代表被催促,为0代表没有被催促
如果当前已登录并且当前用户是管理员,则返回:
{
"response": res
}
其中data
是所有任务信息,是一个数组,里面每一个元素是一个对象,代表每个任务的信息,data
结构如下所示:
[
{
"task_id": task_id,
"task_type": task_type,
"expert_name": expert_name,
"dataset_name": dataset_name,
"status": status,
"assign_time": assign_time,
"due_time": due_time,
"finished_count": finished_count,
"total_count": total_count,
"is_highlight": is_highlight,
},
...
]
其中task_type
,expert_name
,dataset_name
,assign_time
,due_time
,status
都是字符串类型,finished_count
和total_count
是整数类型。含义分别如下:
- task_id: 任务id
- task_type:任务类型
- expert_name:任务执行人的名字
- dataset_name:所属数据集名称
- assign_time:分发时间
- due_time:完成时间
- status:状态,包含
"已分配"
,"标注中"
,"超时"
- finished_count:任务内已完成数据量
- total_count:任务内总数据量
- is_highlight:任务是否高亮(被催促),为1代表被催促,为0代表没有被催促
GET /task/list-by-dataset 列出某个数据集的任务,用于数据集标注任务历史记录界面
传入参数:
dataset_id
:数据集id
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{
"response": res
}
其中res
是一个数组,代表所有当前数据集的任务信息,数组的每一个元素代表一个任务的信息,res
结构如下:
[
{
"mission_id": mission_id,
"expert_name": expert_name,
"area": area,
"dataset_name": dataset[0].dataset_name,
"status": status,
"original_id": original_id,
"assign_time": assign_time,
"finished_count": finished_count,
"total_count": total_count,
},
...
]
除了finished_count
和total_count
是整数类型外,其余数据均为字符串类型,具体含义如下:
- mission_id:任务id
- expert_name:执行人的名字
- area:任务领域
- dataset_name:数据集
- status:状态,包括
"标注中"
,"已移交"
,"已完成"
- original_id:原任务id,如果没有,则为
"-"
- assign_time:任务创建时间
- finished_count:任务内已标注的数据量
- total_count:任务数据总量
POST /task/assign 分配任务,用于分配人员界面
传入参数:
- dataset_id:数据集id
- area:分配任务时的所选领域
- expert_id_list:选中的专家的id列表
- notice:注意事项
- due_time:完成时间
其中的expert_id_list
代表的是所有选中的专家列表,是数组的json格式,结构如下所示:
[
1,
2,
3,
...
]
返回数据:
{
"response": "success"
}
PUT /task/reassign 移交任务,用于分配人员界面
传入参数:
- mission_id:原任务id
- expert_id_list:选中专家id列表
- mission_notice:注意事项
- mission_due_time:任务完成时间
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{
"response": "success"
}
POST /task/urgent 催促任务,用于管理员任务列表
传入参数:
- mission_id:任务id
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是管理员,则返回:
{'response': "非管理员用户"}
否则,返回
{
"response": "success"
}
数据
GET /data/list 列出所有数据,用于标注专家任务内数据列表
传入参数:
- mission_id:当前任务的id
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是专家,则返回:
{'response': "非专家用户"}
否则,返回
{
"response": res,
"notice": mission.mission_notice
}
其中res
是一个数组,其中每个元素代表一条数据的信息,res
的结构如下:
[
{
"data_id": data_id,
"background": data_background,
"task_type": task_type,
"data_source": data_source,
"is_labeled": is_labeled,
"question": question,
"answer": answer,
"keywords": keywords,
"lastest_time": lastest_time,
},
...
]
其中除了data_id
和is_labeled
是整数类型外,其余所有数据都是字符串类型,且answer
是JSON
类型,具体含义如下:
- data_id:数据id
- data_background:数据背景信息
- task_type:任务类型
- data_source:数据来源
- is_labeled:数据是否被标注过,为0代表未标注,为1代表已标注
- question:问题信息
- answer:答案
- keywords:数据的关键字
- lastest_time:数据最近更新时间
answer
的结构和之前的一致
[{“answer”: “...”, “ranking_number”: 0, “reserve”: 0},....]
PUT /data/label 标注数据,用于标注专家标注界面
传入参数:
- data_id:数据id
- data_question:数据的问题信息
- data_answer:数据的答案信息
- data_reserve:整条数据是否保留,为0表示不保留,为1表示保留
返回数据:
如果当前未登录,则返回:
{'response': "未登录"}
否则,如果当前登录用户不是专家,则返回:
{'response': "非专家用户"}
否则,返回
{
"response": "success"
}