Accedi alle API di anteprima

Questa pagina descrive come accedere alle funzionalità di anteprima dell'API Classroom e specificare le versioni di anteprima.

Le tre considerazioni da tenere presenti quando si utilizzano le funzionalità di anteprima rispetto all'API v1 stabile sono:

  1. Il progetto Google Cloud chiamante deve essere registrato al programma di anteprima per sviluppatori di Google Workspace e aggiunto alla lista consentita da Google.
  2. Le funzionalità API nei programmi di accesso in anteprima o di anteprima non sono esposte nelle librerie client standard e potrebbero non essere accessibili per impostazione predefinita tramite HTTP.
  3. In un determinato momento potrebbero essere presenti più stati o versioni dell'API in anteprima.

Attivare le funzionalità di anteprima nelle librerie client

Un'opzione comune per utilizzare l'API Classroom è una libreria client. Esistono tre tipi di librerie client:

  1. Librerie client generate dinamicamente
  2. Librerie client statiche fornite da Google
  3. La tua libreria client personalizzata

L'utilizzo di librerie statiche generate dinamicamente o fornite da Google è il modo consigliato per utilizzare l'API. Consulta la sezione Creare librerie client se devi creare la tua libreria. La creazione di una libreria personalizzata non rientra nell'ambito di questa guida, ma ti consigliamo di consultare la sezione Librerie dinamiche per scoprire di più sulle etichette di anteprima e sul loro ruolo in Discovery.

Librerie dinamiche

Le librerie in linguaggi come Python generano la libreria client in fase di runtime utilizzando un documento di rilevamento del servizio di rilevamento.

Un documento di scoperta è una specifica leggibile da computer per descrivere e utilizzare le API REST. Viene utilizzato per creare librerie client, plug-in IDE e altri strumenti che interagiscono con le API di Google. Un servizio potrebbe fornire più documenti di rilevamento.

I documenti di rilevamento per il servizio API Classroom (classroom.googleapis.com) sono disponibili al seguente endpoint:

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

La distinzione importante per l'utilizzo delle API di anteprima è la specifica del label appropriato. Per le anteprime pubbliche di Classroom, l'etichetta è DEVELOPER_PREVIEW.

Per generare la libreria Python e creare un'istanza del servizio Classroom con metodi di anteprima, puoi specificare l'URL di Discovery con il servizio, le credenziali e l'etichetta appropriati:

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

Per informazioni dettagliate su ogni lingua, consulta la documentazione relativa alle singole librerie client dell'API di Google.

Librerie statiche

Le librerie client in linguaggi come Java, Node.js, PHP, C# e Go devono essere create dal codice sorgente. Queste librerie vengono fornite e includono già le funzionalità di anteprima.

Per le anteprime pubbliche, le librerie client di Classroom si trovano insieme alle altre librerie client del programma Anteprima per sviluppatori di Workspace. Per le anteprime private, contatta il tuo referente Google se hai bisogno di librerie statiche generate.

Potresti dover modificare la configurazione delle dipendenze tipica per utilizzare queste librerie locali anziché importare le librerie client standard, che non dispongono delle funzionalità di anteprima.

Ad esempio, per utilizzare la libreria client Go, devi utilizzare l'istruzione replace nel file go.mod per richiedere un modulo da una directory locale:

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

Come altro esempio, se utilizzi Node.js e npm, aggiungi il download della libreria client Node.js (googleapis-classroom-1.0.4.tgz) come dipendenza locale in 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"
  }
}

Quindi, nella tua applicazione, richiedi il modulo classroom-with-preview-features oltre alle dipendenze regolari e crea un'istanza del servizio classroom da quel modulo:

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

...

Specificare una versione dell'API di anteprima

Indipendentemente dal fatto che utilizzi una libreria statica o dinamica, devi specificare la versione di anteprima quando effettui chiamate API a metodi con funzionalità di anteprima.

Le diverse versioni disponibili e le funzionalità che includono sono documentate nella roadmap dell'API Classroom. La documentazione di riferimento per metodi e campi descrive anche in quali versioni è disponibile il metodo o il campo.

La specifica di una versione viene eseguita impostando il campo PreviewVersion nelle richieste. Ad esempio, per creare una rubrica con l'API di anteprima CRUD delle rubriche, devi impostare previewVersion su V1_20231110_PREVIEW nella richiesta CREATE:

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

Le risorse associate a una chiamata al metodo di anteprima contengono anche il previewVersion utilizzato nella chiamata come campo di sola lettura, per aiutarti a capire quale versione stai utilizzando. Ad esempio, la risposta alla precedente chiamata CREATE contiene il valore 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",
  ...
}

Richieste HTTP

È anche possibile utilizzare l'API Classroom direttamente con HTTP.

Se effettui richieste HTTP senza una libreria client, devi comunque attivare le funzionalità di anteprima e specificare una versione di anteprima. A questo scopo, imposta un label con un'intestazione X-Goog-Visibilities e la versione di anteprima menzionata in precedenza come parametro di query o campo del corpo POST (consulta la documentazione di riferimento dell'API individuale appropriata). Per le anteprime pubbliche, l'etichetta è DEVELOPER_PREVIEW.

Ad esempio, la seguente richiesta curl esegue una chiamata LIST al servizio Rubriche con l'etichetta di visibilità e la versione di anteprima appropriate:

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

Puoi anche specificare la versione di anteprima nel corpo della richiesta, ad esempio quando esegui una richiesta 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

L'API per ogni richiesta HTTP è descritta nella documentazione REST.

Google Apps Script

È possibile chiamare le API di anteprima da Google Apps Script. Tuttavia, esistono alcune differenze rispetto all'utilizzo tipico di Apps Script.

  1. Devi configurare lo script in modo che utilizzi il progetto Google Cloud a cui ti sei registrato nel programma di anteprima per sviluppatori.
  2. I servizi avanzati non supportano i metodi di anteprima, quindi devi effettuare richieste direttamente con HTTP.
  3. Devi fornire un'etichetta e una versione di anteprima, come descritto nella sezione HTTP precedente.

Consulta la guida rapida corrispondente per acquisire familiarità con Apps Script e configurare un progetto di base. Poi segui queste istruzioni per iniziare a utilizzare le API di anteprima delle chiamate:

Modificare il progetto Cloud utilizzato dallo script

In Impostazioni progetto, fai clic su Cambia progetto e inserisci l'ID progetto Cloud del progetto a cui hai eseguito la registrazione al programma di anteprima per gli sviluppatori (per impostazione predefinita, gli script Apps Script utilizzano un progetto generico). Solo i progetti registrati possono chiamare i metodi di anteprima.

Configura le richieste HTTP

Successivamente, configura la richiesta HTTP del metodo che vuoi richiamare in Editor. Ad esempio, nella guida rapida, l'elenco dei corsi con il servizio Classroom ha il seguente aspetto:

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

L'operazione equivalente che utilizza direttamente 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);
  }
}

Quando utilizzi i servizi avanzati, gli ambiti OAuth richiesti vengono dedotti, ma per effettuare chiamate HTTP dirette alle API di Google in Apps Script, devi aggiungere manualmente gli ambiti appropriati.

In Project Settings (Impostazioni progetto), attiva Show "appsscript.json" manifest file in editor (Mostra il file manifest "appsscript.json" nell'editor). Torna all'editor e aggiungi oauthScopes al file appscript.json per gli ambiti che ti servono. Gli ambiti per un determinato metodo sono elencati nella pagina di riferimento. Ad esempio, consulta la pagina del metodo di elenco courses.courseWork.rubrics.

Il file appscript.json aggiornato potrebbe avere il seguente aspetto:

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

Fornire un'etichetta e una versione di anteprima

Nello script, assicurati di aver aggiunto l'etichetta e la versione di anteprima appropriate come descritto nella sezione HTTP precedente. La chiamata LIST di esempio al servizio Rubriche avrebbe il seguente aspetto:

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