如何从LTI 1.3外部工具后端获取Canvas课程完整章节(含已删除)
你之前通过开发者密钥自定义字段$Canvas.course.sectionIds和$com.instructure.User.sectionNames获取章节信息的方式,只能拿到当前用户关联的活跃章节,无法获取已删除的章节数据。要在外部工具后端拿到课程完整章节列表(包括已删除项),最佳方案是直接调用Canvas官方API,具体操作如下:
调用Canvas课程章节API
使用GET /api/v1/courses/:course_id/sections接口,必须添加include[]=deleted查询参数,这样接口会返回课程内所有章节,包括已删除的条目。确保权限有效
外部工具后端需要通过LTI 1.3的OAuth 2.0流程获取合法的访问令牌,并且令牌必须包含url:GET|/api/v1/courses/:course_id/sections的权限范围——在Canvas开发者密钥配置页面,要把这个权限添加到工具的权限列表里。识别已删除章节
API返回的每个章节对象里,workflow_state字段会标识章节状态:值为deleted的是已删除章节,active则是正常活跃的章节。合理使用缓存
章节数据不会频繁变动,后端可以缓存API的响应结果,减少重复请求。可以设置几小时的缓存有效期,或者监听Canvas的章节更新/删除webhook事件,触发缓存刷新。处理分页场景
如果课程章节数量较多,API会自动分页。你需要通过page和per_page参数批量获取数据,确保拿到课程的全部章节。
相比自定义字段的方式,Canvas API能提供课程维度的完整章节数据,不受用户关联范围的限制,完全满足你获取已删除章节的需求。
内容的提问来源于stack exchange,提问作者Gal Katz

