成绩与过程性评价对接手册
本文说明希悦 OpenAPI 成绩与过程性评价相关接口的读取方式、主要字段及同步顺序。
本手册覆盖以下 5 类接口:
SystemReflectionAdminClassKlassAssessment
本文仅覆盖读取场景,不包含回写接口。
1. 接口范围
各接口分类的职责如下:
| 接口大类 | 作用 | 在本项目中的用途 |
|---|---|---|
System |
学校、学期、词汇基础字典 | 获取学期、学科、毕业届等基础数据 |
Reflection |
用户身份数据 | 同步用户包含学生和教师 |
AdminClass |
行政班 | 获取学生归属班级、班主任等组织关系 |
Klass |
课程班、选课关系 | 获取课程班及课程班成员关系 |
Assessment |
评价主体、评价项、过程分、总成绩 | 获取过程性评价和总成绩数据 |
常见的数据实体如下:
- 词汇表
term - 学期
semester - 学生/教师
reflection - 行政班
admin_class - 课程班
klass - 课程班成员
class_selection - 评价主体
assessment - 评价项
assessment_item - 评价项分数
assessment_score - 总成绩
class_grade
2. 对接前准备
2.1 鉴权
平台使用 OAuth 2.0 client_credentials 模式获取 access_token。详细说明见 docs/oauth.md。
Token 接口:
POST /api/v3/oauth/tokens
OpenAPI: 申请 OAuth AccessToken
业务接口请求头:
Authorization: Bearer {access_token}
X-School-Id: {school_id}
要求:
X-School-Id是业务接口的公共请求头。
2.2 权限范围
读取基础数据、过程性评价和总成绩时,通常需要以下 Scope:
semester.readterm.readstudent.read_all或student.read_basicteacher.read_all或teacher.read_basicreflection.read_all或reflection.read_basicadmin_class.readclass.read
class.read 用于查询过程性评价、课程班和成绩数据。
2.3 分页与 expand 约定
分页
对于集合类型的接口,通过以下 URI 参数控制分页:
| 参数 | 类型 | 说明 |
|---|---|---|
paginated |
boolean |
是否启用分页,接收 0、1、true、false |
page |
integer |
页码,默认 1 |
per_page |
integer |
每页数量 |
启用分页后,响应 Header 中会返回:
| Header | 说明 |
|---|---|
X-Pagination-Current-Page |
当前页 |
X-Pagination-Page-Count |
总页数 |
X-Pagination-Per-Page |
每页数量 |
X-Pagination-Total-Count |
总条数 |
详见 接口调用约定。
expand
部分接口支持 expand 查询参数,用于在响应中内嵌关联对象,减少额外请求。多个字段用逗号分隔,例如 expand=items,klass。各接口可用的 expand 值在下文对应章节中说明。
3. 数据关系图
semester
│
└── klass ──── class_selection ── reflection
│ (选课关系) (学生/教师)
│ │
│ admin_class
│
└── assessment ── item ── score
│
└──────── grade
term (词汇字典:学科、届别、学年等,被多个实体引用)
关键关联:
- 一个
semester(学期)下有多个klass(课程班) - 一个
klass对应一个assessment(评价主体) - 一个
assessment包含多个item(评价项),每个item下有多条score(过程分) - 一个
assessment产出多条grade(总成绩),每条grade对应一个学生 class_selection记录klass与reflection(学生/教师)的成员关系
4. 总体对接顺序
推荐顺序如下:
- 通过 OAuth 获取 Token
- 同步学期、词汇字典
- 同步学生、教师
- 同步行政班
- 同步课程班与课程班成员
- 为目标课程班查询评价主体
- 获取评价项
- 获取过程性评价分数
- 获取总成绩
5. 第一步:同步基础主数据
5.1 学期列表
接口:
GET /api/v3/system/semesters
OpenAPI: 获取学期列表
请求参数:
id_inpaginated、page、per_page— 分页参数,详见 2.3 分页与 expand 约定expand— 可选值:academic_year(学年)、category(学期类型)
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 学期 ID |
school_id |
integer |
否 | 学校 ID |
academic_year_id |
integer |
否 | 学年 ID |
category_id |
integer |
否 | 学期分类 ID |
name |
string |
否 | 学期名称 |
start_at |
string |
否 | 学期开始时间 |
end_at |
string |
否 | 学期结束时间 |
is_current |
boolean |
否 | 是否当前学期 |
outer_id |
string |
是 | 外部系统中的学期标识 |
5.2 基础词汇字典
接口:
GET /api/v3/term/{type}/terms
OpenAPI: 获取基础词汇字典
常用 type:
system.graduates_insystem.academic_yearsystem.semester_categorycourse.subjectcourse.domain
请求参数:
name— 按名称筛选parent_id— 按父级 ID 筛选archived_at_is_empty— 仅返回未归档数据sort— 排序方式
该接口用于获取学期、年级届别、学科、教师学科归属等字典数据。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 词汇 ID |
school_id |
integer |
否 | 学校 ID |
parent_id |
integer |
否 | 上级词汇 ID |
name |
string |
否 | 词汇名称 |
label |
string |
否 | 展示名称 |
description |
string |
否 | 词汇说明 |
type |
string |
否 | 词汇类型 |
weight |
integer |
否 | 排序权重 |
archived_at |
string |
是 | 归档时间 |
6. 第二步:同步人员与组织关系
6.1 用户主表(包含学生、教师)
接口:
GET /api/v3/reflection/reflections
OpenAPI: 获取用户数据
常用参数:
roleexpandupdated_at_egtwith_trashedpaginated、page、per_page— 分页参数
该接口用于获取用户主表数据,也可作为增量同步入口。返回结果仅包含基础字段,不包含完整身份扩展信息。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 用户 ID |
school_id |
integer |
否 | 学校 ID |
name |
string |
否 | 姓名 |
role |
RoleEnum |
否 | 用户角色 |
usin |
string |
是 | 用户统一标识 |
phone |
string |
是 | 手机号 |
outer_id |
string |
是 | 外部系统中的用户标识 |
status |
StatusEnum |
否 | 用户状态 |
deleted_at |
string |
是 | 删除时间 |
说明:
role可见枚举包括:teacher、student、staff、guardian- 成绩相关场景通常至少需要学生和教师数据
6.2 学生数据
接口:
GET /api/v3/reflection/students
OpenAPI: 获取学生数据
常用参数:
id_inname_inname_likekeyword_identityexpandupdated_at_egtwith_trashedpaginated、page、per_page— 分页参数
该接口用于获取学生主数据及学生身份相关字段。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 学生 ID |
school_id |
integer |
否 | 学校 ID |
name |
string |
否 | 学生姓名 |
role |
RoleEnum |
否 | 用户角色,学生场景固定为 student |
usin |
string |
是 | 学生统一标识 |
pupil_id |
integer |
是 | 学籍相关 ID |
graduates_in_id |
integer |
是 | 届别 ID |
outer_id |
string |
是 | 外部系统中的学生标识 |
status |
StatusEnum |
否 | 学生状态 |
6.3 教师数据
接口:
GET /api/v3/reflection/teachers
OpenAPI: 获取教师数据
常用参数:
id_inname_inname_likeexpandupdated_at_egtwith_trashedpaginated、page、per_page— 分页参数
该接口用于获取教师主数据及教师身份相关字段。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 教师 ID |
school_id |
integer |
否 | 学校 ID |
name |
string |
否 | 教师姓名 |
role |
RoleEnum |
否 | 用户角色,教师场景固定为 teacher |
usin |
string |
是 | 教师统一标识 |
phone |
string |
是 | 手机号 |
outer_id |
string |
是 | 外部系统中的教师标识 |
department_names |
array |
否 | 所属部门名称列表 |
status |
StatusEnum |
否 | 教师状态 |
6.4 行政班
接口:
GET /api/v3/admin_class/admin_classes
OpenAPI: 获取行政班接口
常用参数:
idid_inname_likeouter_idouter_id_inteacher_idplace_idstatusexpand— 可选值:teachers(班主任)、students(学生列表)、classes(关联课程班)paginated、page、per_page— 分页参数
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 行政班 ID |
school_id |
integer |
否 | 学校 ID |
name |
string |
否 | 行政班名称 |
graduates_in_id |
integer |
否 | 届别 ID |
place_id |
integer |
是 | 空间 ID |
teacher_ids |
array |
否 | 班主任或关联教师 ID 列表 |
student_nums |
integer |
否 | 学生人数 |
outer_id |
string |
是 | 外部系统中的班级标识 |
status |
StatusEnum |
否 | 行政班状态 |
该接口用于获取学生所属行政班关系,以及班级、班主任等数据。
7. 第三步:同步课程班与成员关系
7.1 课程班列表
接口:
GET /api/v3/klass/classes
OpenAPI: 获取课程班列表
常用参数:
semester_idid_inupdated_at_egtadmin_class_idwith_trashedexpand— 可选值:teachers(任课教师)、students(学生)、admin_class_ids(关联行政班 ID)、class_lessons(课节)、tag(课程班标签)paginated、page、per_page— 分页参数
课程班查询应以学期为主维度,并带上 semester_id。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 课程班 ID |
school_id |
integer |
否 | 学校 ID |
semester_id |
integer |
否 | 学期 ID |
csin |
string |
否 | 课程班唯一标识 |
name |
string |
否 | 课程班名称 |
class_name |
string |
否 | 展示用班级名称 |
subject_id |
integer |
是 | 学科 ID |
domain_id |
integer |
是 | 领域 ID |
admin_class_ids |
array |
否 | 关联行政班 ID 列表 |
teachers |
array |
否 | 任课教师列表 |
students |
array |
否 | 学生列表 |
created_at |
string |
否 | 创建时间 |
updated_at |
string |
否 | 更新时间 |
7.2 课程班成员
接口:
GET /api/v3/klass/class-selections
OpenAPI: 获取课程班成员
必填参数:
semester_id
常用参数:
class_id_inupdated_at_egtwith_trashedpaginated、page、per_page— 分页参数
该接口用于获取课程班与学生之间的选课或成员关系。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
type |
ClassReflectionEnum |
否 | 成员类型 |
reflection_id |
integer |
否 | 用户 ID |
class_together |
boolean |
是 | 是否共同上课 |
deleted_at |
string |
是 | 删除时间 |
created_at |
string |
否 | 创建时间 |
updated_at |
string |
否 | 更新时间 |
8. 第四步:获取过程性评价数据
过程性评价相关接口顺序如下:
- 先定位课程班
- 再查询课程班对应的评价主体
- 再获取评价项列表
- 最后获取每个评价项下的学生分数
8.1 查询课程班评价主体与评价项
接口:
GET /api/v3/class-assessment/classes/{id}/assessment
OpenAPI: 根据课程班 ID 获取评价主体
常用参数:
expand— 可选值:items(评价项列表)
该接口根据课程班 ID 返回评价主体 assessment。评价项和分数数据均依附于该对象。传 expand=items 时,返回的 assessment 对象中会包含一个 items 字段,表示该评价主体下的评价项列表。
返回字段(assessment):
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 评价主体 ID |
school_id |
integer |
否 | 学校 ID |
semester_id |
integer |
是 | 学期 ID |
type |
AssessmentTypeEnum |
否 | 评价类型 |
name |
string |
否 | 评价主体名称 |
scope_type |
AssessmentScopeTypeEnum |
否 | 评价范围类型 |
status |
AssessmentStatusEnum |
否 | 评价主体状态 |
full_score |
string |
否 | 满分 |
item_num |
integer |
否 | 评价项数量 |
published_at |
string |
是 | 发布时间 |
updated_at |
string |
否 | 更新时间 |
items |
array |
否 | 评价项列表(需 expand=items) |
返回字段(items 中的每个评价项):
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 评价项 ID |
assessment_id |
integer |
否 | 所属评价主体 ID |
pid |
integer |
否 | 上级评价项 ID,顶层项为 0。评价项为 1-3 层树形结构,通过 pid 关联父子关系 |
type |
ItemTypeEnum |
否 | 评价项类型 |
name |
string |
否 | 评价项名称 |
description |
string |
否 | 评价项说明 |
sort |
integer |
否 | 排序号 |
full_score |
string |
是 | 满分 |
initial_score |
string |
是 | 初始分 |
weight |
integer |
是 | 权重 |
stage_id |
integer |
是 | 关联学段 ID |
scoring_type |
ScoringTypeEnum |
否 | 计分方式 |
display_type |
DisplayTypeEnum |
否 | 展示方式 |
tags |
array |
否 | 标签列表 |
published_at |
string |
是 | 发布时间 |
相关枚举:
ItemTypeEnum:dimension、sub_dimension、item、special_item、attendance_itemScoringTypeEnum:score、star、level、addition、tag、reviewDisplayTypeEnum:score、star、levelComputeTypeEnum:sum、avg、weighted_avg
8.2 查询评价项分数
接口:
GET /api/v3/class-assessment/items/{id}/scores
OpenAPI: 查询评价项分数
常用参数:
owner_id_intypevalidtagtag_inscore_egtscore_eltexpandpaginated、page、per_page— 分页参数
该接口用于获取指定评价项下的学生过程分明细。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 分数记录 ID |
school_id |
integer |
否 | 学校 ID |
assessment_id |
integer |
否 | 评价主体 ID |
item_id |
integer |
否 | 评价项 ID |
type |
ScoreTypeEnum |
否 | 分数类型 |
owner_id |
integer |
否 | 学生 ID |
evaluator_id |
integer |
是 | 打分人 ID,加减分和初始分时为 null |
valid |
boolean |
否 | 是否有效(是否参与评价) |
invalid_type_id |
integer |
是 | 暂不评价类型 ID |
invalid_reason |
string |
否 | 不参与评价原因 |
score |
string |
是 | 分值,注意区分 null(未打分)与 "0"(零分) |
gained_score |
string |
是 | 学生在维度下的已得分 |
tag |
string |
否 | 标签值,对应 item.tags[].name |
review |
string |
否 | 评语 |
self_review |
string |
否 | 学生反思 |
rank |
integer |
是 | 班级排名 |
rank_base |
integer |
是 | 排名基数 |
status |
ScoreStatusEnum |
否 | 分数状态 |
published_at |
string |
是 | 发布时间 |
created_at |
string |
否 | 创建时间 |
updated_at |
string |
否 | 更新时间 |
说明:
- 一个课程班通常对应多个评价项,查询时需要按
item_id分批处理 type可见枚举:raw、item_score
9. 第五步:同步总成绩
9.1 查询总成绩
接口:
GET /api/v3/class-assessment/class/grades?class_ids={class_ids}
OpenAPI: 查询课程班学生总成绩
常用参数:
class_ids,必填,多个课程班用逗号分隔updated_at_egt,支持增量查询paginatedpageper_page
该接口用于获取课程班学生总成绩,并支持按更新时间增量查询。
返回字段:
| 字段 | 类型 | 可为空 | 描述 |
|---|---|---|---|
id |
integer |
否 | 总成绩记录 ID |
school_id |
integer |
否 | 学校 ID |
semester_id |
integer |
是 | 学期 ID |
source_id |
integer |
否 | 评价主体(Assessment)ID |
source |
GradeSourceEnum |
否 | 来源类型 |
stage_id |
integer |
是 | 学段 ID |
owner_id |
integer |
否 | 学生 ID |
name |
string |
否 | 成绩名称 |
csin |
string |
否 | 课程班标识 |
full_score |
string |
否 | 满分 |
score |
string |
是 | 最终得分,由教师给出;未给出时默认等于系统算分 |
real_score |
string |
是 | 实际得分:score 非空时等于 score,否则等于 suggest_score |
suggest_score |
string |
是 | 系统算分(建议分),基于所有已打分评价项计算 |
gained_score |
string |
是 | 已得分,基于所有已发布评价项计算 |
gained_score_rate |
string |
是 | 已得分率 |
level |
string |
是 | 等级 |
credit |
string |
是 | 学分 |
gpa |
string |
是 | 绩点 |
rank |
integer |
是 | 排名 |
rank_base |
integer |
是 | 排名基数 |
status |
GradeStatusEnum |
否 | 成绩状态 |
pass_status |
GradePassStatusEnum |
否 | 及格状态 |
published_at |
string |
是 | 发布时间 |
review |
string |
否 | 评语 |
updated_at |
string |
否 | 更新时间 |
相关枚举:
GradeSourceEnum:class、moral、dorm、custom、teacher_assessment、awarded_credit、stage但一般只关注 class 即可。GradeStatusEnum:pending(未发布)、published(已发布)、delayed(暂不评价)、passed(已通过)GradePassStatusEnum:pending、warning、passed、failed
说明:
source_id对应 Assessment ID,而非课程班 ID;如需关联课程班,应通过 Assessment 的scope_id字段获取