You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的httr包构造Canvas API嵌套请求体修改display_items?

解决Canvas API修改测验设置的400错误问题

问题根源

你的代码存在两个关键错误:

  • URL路径错误:Canvas官方API的测验更新端点是/api/v1/courses/{course_id}/quizzes/{quiz_id},你写的/api/quiz/v1/...多了一层冗余的quiz,导致请求路由解析失败。
  • 请求体结构错误:Canvas要求所有测验相关的修改参数必须嵌套在quiz这个顶级列表下,你把quiz_settings、course_id等放在了顶层,不符合API的参数格式要求;另外URL已经包含了course_id和quiz_id,不需要在请求体里重复传递。

正确的代码实现

# 修正后的API端点URL
url <- "https://XXX.instructure.com/api/v1/courses/16867/quizzes/147030"

# 正确构造请求体:所有参数嵌套在quiz下
body <- list(
  quiz = list(
    title = "CHANGE TITLE",  # 可选:仅需修改标题时保留
    show_correct_answers = TRUE,
    quiz_settings = list(
      result_view_settings = list(
        result_view_restricted = TRUE,
        display_items = FALSE
      )
    )
  )
)

# 发送PATCH请求
response <- PATCH(
  url,
  add_headers(Authorization = paste("Bearer", token)),
  body = body,
  encode = "json"
)

# 可选:打印响应内容排查问题
# content(response)

额外注意事项

  • 确保token拥有课程编辑、测验修改的权限,权限不足也会导致请求失败。
  • 如果仅需修改display_items,可以去掉title等非必要参数,只保留需要的嵌套结构。
  • 布尔值直接使用R原生的TRUE/FALSE即可,无需转换为字符串。

内容的提问来源于stack exchange,提问作者User33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:18:28