De toegang tot services in Google is impliciet toegang tot "cloud functions en data".
Dit houd in dat er per definitie asynchroon wordt gewerkt en dat het aanbod is stukken gebeurt.
Binnen Google noemt men deze stukken "pages" .
Wanneer je een aanvraag doet voor data zal de API deze aanbieden door je een aantal "pages" in één blok te sturen.
De volgende blok van "pages" zal je moeten aanvragen door de vraag te herhalen en aan deze vraag de referentie mee te geven van de volgende blok.
Deze volgende blok wordt gekenmerkt door de "pageToken".
Je vindt de volgende pageToken in de property nextPageToken.
Door het geheel samen te bouwen in een do-while lus kan je alle data samenbrengen tot één geheel.
function listCourses() {
var classroomdata = {}
let pageToken = ''
let courseList = []
let responseC = ''
do {
let optionalArgs = {
pageSize: 20,
pageToken: pageToken,
}
responseC = Classroom.Courses.list(optionalArgs);
let courses = responseC.courses;
if (courses && courses.length > 0) {
let courserec = courses.map(course => {
courseList = courseList.concat(courserec)
})
} else {
Logger.log('No courses found.');
}
pageToken = responseC.nextPageToken;
} while (pageToken != null);
return courseList
}
Alle API's binnen Google zijn beschikbaar voor de ontwikkelaars en benaderbaar als REST api.
Wanneer je de api wil gebruiken in Apps Script, zal deze meestal dezelfde methods en properties gebruiken als de REST versie.
Zo zien we in het bovenstaande voorbeeld in Apps Script het gebruik van:
Classroom.Courses.list(optionalArgs);
wat hetzelfde resultaat zou geven wanneer je de REST method list zou gebruiken.
Het page principe is enkel zichtbaar in de responces op het REST method niveau en dus niet wanneer je hierin nog verder zou doorbomen.
let responseS = Classroom.Courses.Students.list(course.id, optionalArgsS)
let students = responseS.students
Indien je bovenstaande code zou herleiden tot
let students = Classroom.Courses.Students.list(course.id, optionalArgsS).students
dan zal dit hetzelfde resultaat geven, wanneer het antwoorde tot één page beperkt is (vb maximum 500 users), maar zal je nooit een nextPageToken kunnen terug vinden in de verkregen structuur (object).
Het is daarom noodzakelijk om de API calls te beperken tot de REST api methods(ook bruikbaar in Apps Script), waarin de nextPageTokens vervat zitten zodat alle data kan worden ingelezen.