数据标注平台接口文档

作者:李瑞杰

备注:所有数据都是以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_sizedataset_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应该将数据集的所有数据dataJSON.stringify()函数生成JSON格式的数据,而data是一个数组,数组内的每一个元素是一个对象,表示一条数据的具体信息,data结构如下

[
	{
		"data_background":"xxx",
		"data_question":"xxx",
		"data_answer":Json,
		"data_area":"xxx",
        "data_keyword":"xxx",
        "other":"xxx"
	},
    ...
]

每个对象分别表示一条数据的信息,对象内所有数据都是字符串类型的,除了其中的data_answerJSON格式的数据,表示这条数据的答案,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_answerjson格式的数据外,其余均为字符串数据,具体含义如下:

  • 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_typearearesourceassign_timedue_timestatus都是字符串类型,finished_counttotal_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_typeexpert_namedataset_nameassign_timedue_timestatus都是字符串类型,finished_counttotal_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_counttotal_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_idis_labeled是整数类型外,其余所有数据都是字符串类型,且answerJSON类型,具体含义如下:

  • 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"
}