访问预览版 API

本页面介绍了如何使用 Classroom API 预览版功能和 指定预览版本。

与稳定版相比,使用预览版功能时的三个注意事项 v1 API 具有如下特点:

  1. 发起调用的 Google Cloud 项目必须在 Google Workspace 中注册 开发者预览版计划并允许被 Google 列入。
  2. 抢先体验计划或预览版计划中的 API 功能不会在 标准客户端库,默认情况下可能无法通过 HTTP 访问。
  3. 在任意给定时间, 预览。

在客户端库中启用预览功能

使用 Classroom API 的常见方式是使用客户端库。那里 客户端库有三种类型:

  1. 动态生成的客户端库
  2. Google 提供的静态客户端库
  3. 您自己的自定义客户端库

使用动态生成或 Google 提供的静态库 使用此 API 的推荐方法如果需要,请参阅构建客户端库 构建自己的内容库。创建您自己的库不在本课程的讨论范围之内 但建议您查看动态库部分,详细了解 预览标签及其在 Discovery 中的作用。

动态库

以 Python 等语言编写的库在运行时使用 发现服务中的发现文档

发现文档是一种机器可读的规范,用于描述和 使用 REST API。它用于构建客户端库、IDE 插件以及 与 Google API 交互的其他工具。一项服务可能会提供多种 发现文档。

Classroom API 服务(classroom.googleapis.com)的发现文档 可在以下端点找到:

https://classroom.googleapis.com/$discovery/rest?labels=PREVIEW_LABEL&version=v1&key=API_KEY

使用预览版 API 的重要区别在于,您可以指定 相应的 label。对于 Google 课堂公开预览版,标签为 DEVELOPER_PREVIEW

要生成 Python 库并实例化 Google 课堂服务,请使用 使用相应的服务指定发现网址, 凭据和标签:

classroom_service_with_preview_features = googleapiclient.discovery.build(
  serviceName='classroom',
  version='v1',
  credentials=credentials,
  static_discovery=False,
  discoveryServiceUrl='https://classroom.googleapis.com/$discovery/rest?labels=DEVELOPER_PREVIEW&key=API_KEY)'

请参阅各个 Google API 客户端库文档,详细了解各个客户端库 语言。

静态库

必须构建 Java、Node.js、PHP、C# 和 Go 等语言的客户端库 。这些库是为您提供的,并且具有预览版功能 已经纳入。

对于公开预览版,Google 课堂客户端库可以 Workspace 开发者预览版计划客户端库。对于非公开预览版 如果您需要生成的静态库,请与您的 Google 联系人联系。

您可能需要修改典型的依赖项配置才能使用这些 与导入标准客户端库相比 提供预览版功能

例如,若要使用 Go 客户端库,您需要使用 replace 指令添加到 go.mod 文件中,以需要本地目录中的模块

module example.com/app

go 1.21.1

require (
    golang.org/x/oauth2 v0.12.0
    google.golang.org/api v0.139.0 // Classroom library is in here.
)

require (
  ...
)

// Use a local copy of the Go client library.
replace google.golang.org/api v0.139.0 => ../google-api-go-client

再举一例,如果您使用的是 Node.js 和 npm,请添加 Node.js 客户端 库下载 (googleapis-classroom-1.0.4.tgz) 作为本地依赖项 package.json

{
  "name": "nodejs-classroom-example",
  "version": "1.0.0",
  ...
  "dependencies": {
    "@google-cloud/local-auth": "^2.1.0",
    "googleapis": "^95.0.0",
    "classroom-with-preview-features": "file:./googleapis-classroom-1.0.4.tgz"
  }
}

然后在您的应用中,需要 classroom-with-preview-features 模块 除了常规依赖项之外,还要将 classroom 服务实例化 从该单元中学习到的内容

const {authenticate} = require('@google-cloud/local-auth');
const {google} = require('googleapis');
const classroomWithPreviewFeatures = require('classroom-with-preview-features');

...

const classroom = classroomWithPreviewFeatures.classroom({
  version: 'v1',
  auth: auth,
});

...

指定预览版 API 版本

无论您是使用静态库还是动态库,都必须指定 对具有预览功能的方法进行 API 调用时,请使用预览版。

各种可用版本及其包含的功能 (请参阅 Classroom API 路线图)。方法和 字段还描述了方法或字段可用的版本。

您可以通过设置请求中的 PreviewVersion 字段来指定版本。 例如,要使用 Rubrics CRUD 预览 API 创建评分准则,您需要将 在 CREATE 请求中将 previewVersion 设置为 V1_20231110_PREVIEW

rubric = service.courses().courseWork().rubrics().create(
            courseId=course_id,
            courseWorkId=coursework_id,
            # Specify the preview version. Rubrics CRUD capabilities are
            # supported in V1_20231110_PREVIEW and later.
            previewVersion="V1_20231110_PREVIEW",
            body=body
).execute()

与预览方法调用相关联的资源还包含 previewVersion 用作只读字段,以帮助您了解 您使用的版本。例如,上一个 CREATE 的响应 调用包含 V1_20231110_PREVIEW 值:

print(json.dumps(rubric, indent=4))
{
  "courseId": "123",
  "courseWorkId": "456",
  "creationTime": "2023-10-23T18:18:29.932Z",
  "updateTime": "2023-10-23T18:18:29.932Z",
  "id": "789",
  "criteria": [...],
  # The preview version used in the call that returned this resource.
  "previewVersion": "V1_20231110_PREVIEW",
  ...
}

HTTP 请求

您也可以通过 HTTP 直接使用 Classroom API。

如果您在没有客户端库的情况下发出 HTTP 请求,您仍然需要启用 指定预览版本。方法是设置一个 label 具有 X-Goog-Visibilities 标头和上述预览版,作为 查询参数或 POST 正文字段(请参阅相应的 API 参考文档)。对于公开预览版,此标签为 DEVELOPER_PREVIEW

例如,以下 curl 请求对评分准则服务进行 LIST 调用 具有适当的可见性标签和预览版本:

curl \
  'https://classroom.googleapis.com/v1/courses/COURSE_ID/courseWork/COURSE_WORK_ID/rubrics?key=API_KEY&previewVersion=V1_20231110_PREVIEW' \
  --header 'X-Goog-Visibilities: DEVELOPER_PREVIEW' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  --header 'Accept: application/json' \
  --compressed

您还可以在请求正文中指定预览版本,例如, 发出 POST 请求:

curl --request PATCH \
  'https://classroom.googleapis.com/v1/courses/COURSE_ID/courseWork/COURSE_WORK_ID/rubrics/RUBRIC_ID?updateMask=criteria&key=API_KEY&previewVersion=V1_20231110_PREVIEW' \
  --header 'X-Goog-Visibilities: DEVELOPER_PREVIEW' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"criteria":"[...]"}' \
  --compressed

REST 文档中介绍了每个 HTTP 请求的 API。

Google Apps 脚本

可以通过 Google Apps 脚本调用预览版 API。不过, 这与典型的 Apps 脚本用法存在一些差异。

  1. 您必须将脚本配置为使用 已注册开发者预览版计划
  2. 高级服务不支持预览方法,因此您需要 发送请求。
  3. 您必须提供标签和预览版本,如上文所述 HTTP 部分

如需熟悉,请参阅相应的快速入门 Apps 脚本,并设置基本的项目。然后按照这些说明操作 开始调用预览版 API 的说明:

更改脚本使用的 Cloud 项目

项目设置中,点击更改项目,然后输入 您在 Developer 中注册的任何项目的 Cloud 项目 ID 预览计划(默认情况下, Apps 脚本使用通用项目)。仅已注册 项目可以调用预览方法。

配置 HTTP 请求

接下来,配置您希望在其中回调的任意方法的 HTTP 请求 编辑者。例如,在快速入门中列出包含 Google 课堂的课程 Service 如下所示:

function listCourses() {
  try {
    const response = Classroom.Courses.list();
    const courses = response.courses;
    if (!courses || courses.length === 0) {
      console.log('No courses found.');
      return;
    }
    for (const course of courses) {
      console.log('%s (%s)', course.name, course.id);
    }
  } catch (err) {
    // TODO: Developer to handle.
    console.log(err.message);
  }
}

直接使用 HTTP 的等效操作如下:

function listCourses() {
  const response = UrlFetchApp.fetch(
        'https://classroom.googleapis.com/v1/courses', {
        method: 'GET',
        headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
        contentType: 'application/json',
      });
  const data = JSON.parse(response.getContentText());
  if (data.error) {
    // TODO: Developer to handle.
    console.log(err.message);
    return;
  }
  if (!data.courses || !data.courses.length) {
    console.log('No courses found.');
    return;
  }
  for (const course of data.courses) {
    console.log('%s (%s)', course.name, course.id);
  }
}

使用高级服务时,系统会推断出所需的 OAuth 范围,但 在 Apps 脚本中对 Google API 进行直接 HTTP 调用,您需要 手动添加适当的范围。

项目设置中,启用显示“appsscript.json”清单文件 编辑器。返回编辑器,将 oauthScopes 添加到 appscript.json 文件中, 所需的范围给定方法的范围列在 参考页面。如需查看示例,请参阅 courses.courseWork.rubrics list 方法 页面

更新后的 appscript.json 文件可能如下所示:

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/classroom.coursework.students",
    "https://www.googleapis.com/auth/classroom.courses",
    "https://www.googleapis.com/auth/spreadsheets.readonly",
    "https://www.googleapis.com/auth/spreadsheets"
  ]
}

提供标签和预览版本

返回到脚本,确保您已添加适当的标签和预览 请参阅上一 HTTP 部分中的说明。对 评分准则服务将如下所示:

function listRubrics() {
  const courseId = COURSE_ID;
  const courseWorkId = COURSE_WORK_ID;
  const response = UrlFetchApp.fetch(
         `https://classroom.googleapis.com/v1/courses/${courseId}/courseWork/${courseWorkId}/rubrics?previewVersion=V1_20231110_PREVIEW`, {
        method: 'GET',
        headers: {
          'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
          'X-Goog-Visibilities': 'DEVELOPER_PREVIEW'
        },
        contentType: 'application/json',
        muteHttpExceptions: true
      });
  const data = JSON.parse(response.getContentText());
  console.log(data)
  if (data.error) {
    // TODO: Developer to handle.
    console.log(error.message);
    return;
  }
  if (!data.rubrics || !data.rubrics.length) {
    console.log('No rubrics for this coursework!');
    return;
  }
  console.log(data.rubrics);
}