Auf Vorschau-APIs zugreifen

Auf dieser Seite wird beschrieben, wie Sie auf Vorschaufunktionen der Classroom API zugreifen und Vorschauversionen angeben können.

Im Vergleich zur stabilen Version 1 der API gibt es drei Dinge, die Sie bei der Verwendung von Vorschaufeatures beachten sollten:

  1. Das aufrufende Google Cloud-Projekt muss für das Google Workspace-Entwickler-Vorabprogramm registriert und von Google in die Zulassungsliste aufgenommen sein.
  2. API-Funktionen in Early-Access- oder Vorabversionen sind nicht in den Standardclientbibliotheken verfügbar und sind möglicherweise standardmäßig nicht über HTTP zugänglich.
  3. Es können jederzeit mehrere API-Status oder Versionen in der Vorschau angezeigt werden.

Vorabversionsfunktionen in Clientbibliotheken aktivieren

Eine gängige Option für die Verwendung der Classroom API ist eine Clientbibliothek. Es gibt drei Arten von Clientbibliotheken:

  1. Dynamisch generierte Clientbibliotheken
  2. Von Google bereitgestellte statische Clientbibliotheken
  3. Ihre eigene benutzerdefinierte Clientbibliothek

Wir empfehlen, die API mit dynamisch generierten oder von Google bereitgestellten statischen Bibliotheken zu verwenden. Wenn Sie eine eigene Bibliothek erstellen müssen, lesen Sie den Hilfeartikel Clientbibliotheken erstellen. Das Erstellen einer eigenen Bibliothek fällt nicht in den Rahmen dieses Leitfadens. Im Abschnitt Dynamische Bibliotheken erfährst du jedoch mehr über Vorschaulabels und ihre Rolle in Discovery.

Dynamische Bibliotheken

Bibliotheken in Sprachen wie Python generieren die Clientbibliothek zur Laufzeit mithilfe eines Discovery-Dokuments aus dem Discovery-Dienst.

Ein Discovery-Dokument ist eine maschinenlesbare Spezifikation zum Beschreiben und Nutzen von REST APIs. Damit können Clientbibliotheken, IDE-Plug-ins und andere Tools erstellt werden, die mit Google APIs interagieren. Ein Dienst kann mehrere Discovery-Dokumente bereitstellen.

Discovery-Dokumente für den Classroom API-Dienst (classroom.googleapis.com) finden Sie an folgendem Endpunkt:

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

Der wichtige Unterschied bei der Arbeit mit Vorabversionen von APIs besteht darin, die richtige label anzugeben. Bei öffentlichen Vorabversionen von Classroom lautet dieses Label DEVELOPER_PREVIEW.

Wenn Sie die Python-Bibliothek generieren und den Classroom-Dienst mit Vorschaumethoden instanziieren möchten, können Sie die Discovery-URL mit dem entsprechenden Dienst, den Anmeldedaten und dem Label angeben:

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)'

Weitere Informationen zu den einzelnen Programmiersprachen finden Sie in der Dokumentation der jeweiligen Google API-Clientbibliothek.

Statische Bibliotheken

Clientbibliotheken in Sprachen wie Java, Node.js, PHP, C# und Go müssen aus der Quelle erstellt werden. Diese Bibliotheken werden Ihnen zur Verfügung gestellt und die Vorschaufunktionen sind bereits integriert.

Für öffentliche Vorabversionen finden Sie die Classroom-Clientbibliotheken zusammen mit den anderen Clientbibliotheken des Workspace-Entwickler-Vorabversion-Programms. Wenn Sie statische Bibliotheken für private Vorschauen generieren lassen möchten, wenden Sie sich an Ihren Google-Ansprechpartner.

Möglicherweise müssen Sie Ihre typische Abhängigkeitskonfiguration ändern, um diese lokalen Bibliotheken zu verwenden, anstatt die Standardclientbibliotheken zu importieren, die keine Vorabversionsfunktionen haben.

Wenn Sie beispielsweise die Go-Clientbibliothek verwenden möchten, müssen Sie in Ihrer go.mod-Datei die Anweisung replace verwenden, um ein Modul aus einem lokalen Verzeichnis zu fordern:

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

Wenn Sie beispielsweise Node.js und npm verwenden, fügen Sie den Download der Node.js-Clientbibliothek (googleapis-classroom-1.0.4.tgz) als lokale Abhängigkeit in package.json hinzu:

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

Erfordere dann in deiner Anwendung zusätzlich zu den regulären Abhängigkeiten das classroom-with-preview-features-Modul und instanziere den classroom-Dienst aus diesem Modul:

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,
});

...

Preview-API-Version angeben

Unabhängig davon, ob Sie eine statische oder dynamische Bibliothek verwenden, müssen Sie die Vorabversion angeben, wenn Sie API-Aufrufe für Methoden mit Vorabversionen ausführen.

Die verschiedenen verfügbaren Versionen und die zugehörigen Funktionen sind in der Classroom API-Roadmap dokumentiert. In der Referenzdokumentation für Methoden und Felder wird auch beschrieben, in welchen Versionen die Methode oder das Feld verfügbar ist.

Geben Sie dazu in Anfragen das Feld PreviewVersion an. Wenn Sie beispielsweise eine Benotungsskala mit der Rubrics CRUD Preview API erstellen möchten, setzen Sie in der CREATE-Anfrage previewVersion auf 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()

Ressourcen, die mit einem Vorschaumethodaufruf verknüpft sind, enthalten auch die previewVersion, die im Aufruf als schreibgeschütztes Feld verwendet wird. So können Sie nachvollziehen, welche Version Sie verwenden. Die Antwort des vorherigen CREATE-Aufrufs enthält beispielsweise den Wert 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-Anfragen

Die Classroom API kann auch direkt über HTTP verwendet werden.

Wenn Sie HTTP-Anfragen ohne Clientbibliothek senden, müssen Sie trotzdem die Vorabversionsfunktionen aktivieren und eine Vorabversion angeben. Dazu wird ein label mit einem X-Goog-Visibilities-Header und der oben genannten Vorabversion entweder als Abfrageparameter oder als POST-Textfeld festgelegt (siehe die entsprechende API-Referenzdokumentation). Für öffentliche Vorschauen lautet das Label DEVELOPER_PREVIEW.

Mit der folgenden Curl-Anfrage wird beispielsweise ein LIST-Aufruf an den Rubrikendienst mit dem entsprechenden Sichtbarkeitslabel und der Vorabversion gesendet:

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

Sie können die Vorschauversion auch im Anfragetext angeben, z. B. beim Stellen einer POST-Anfrage:

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

Die API für jede HTTP-Anfrage wird in der REST-Dokumentation beschrieben.

Google Apps Script

Es ist möglich, Vorschau-APIs über Google Apps Script aufzurufen. Es gibt jedoch einige Unterschiede zur üblichen Verwendung von Apps Script.

  1. Sie müssen Ihr Skript so konfigurieren, dass das Google Cloud-Projekt verwendet wird, das Sie für das Entwicklervorschauprogramm registriert haben.
  2. Erweiterte Dienste unterstützen keine Vorschaumethoden. Sie müssen Anfragen also direkt über HTTP senden.
  3. Sie müssen ein Label und eine Vorschauversion angeben, wie im vorherigen HTTP-Abschnitt beschrieben.

Sehen Sie sich die entsprechende Kurzanleitung an, um sich mit Apps Script vertraut zu machen und eine grundlegende Projekteinrichtung zu ermöglichen. Folgen Sie dann dieser Anleitung, um mit dem Aufrufen von Vorschau-APIs zu beginnen:

Das vom Skript verwendete Cloud-Projekt ändern

Klicken Sie unter Projekteinstellungen auf Projekt ändern und geben Sie die Cloud-Projekt-ID des Projekts ein, das Sie für das Vorabprogramm für Entwickler registriert haben. Standardmäßig wird für Apps Script-Scripts ein generisches Projekt verwendet. Nur registrierte Projekte können Vorschaumethoden aufrufen.

HTTP-Anfragen konfigurieren

Konfigurieren Sie als Nächstes im Editor die HTTP-Anfrage der Methode, die Sie zurückrufen möchten. In der Kurzanleitung sieht das Eintragen von Kursen mit dem Classroom-Dienst beispielsweise so aus:

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);
  }
}

Der entsprechende Vorgang mit direktem HTTP-Aufruf sieht so aus:

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);
  }
}

Bei der Verwendung erweiterter Dienste werden die erforderlichen OAuth-Bereiche abgeleitet. Wenn Sie jedoch in Apps Script direkte HTTP-Aufrufe an Google APIs ausführen möchten, müssen Sie die entsprechenden Bereiche manuell hinzufügen.

Aktivieren Sie in den Projekteinstellungen die Option Manifestdatei „appsscript.json“ im Editor anzeigen. Fügen Sie im Editor der Datei appscript.json oauthScopes für die Bereiche hinzu, die Sie benötigen. Die Bereiche für eine bestimmte Methode sind auf der Referenzseite aufgeführt. Weitere Informationen finden Sie beispielsweise auf der Seite Methode „courses.courseWork.rubrics list“.

Die aktualisierte appscript.json-Datei könnte so aussehen:

{
  "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"
  ]
}

Label und Vorschauversion angeben

Fügen Sie in Ihrem Skript das entsprechende Label und die entsprechende Vorschauversion hinzu, wie im HTTP-Abschnitt oben beschrieben. Ein Beispiel für einen LIST-Aufruf an den Rubrikendienst:

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);
}