courses.list Google Classroom API возвращает JSON, который не соответствует описанию API
У нас есть сообщение от пользователя о том, что в нашей интеграции с Google классом не все работает правильно. Немного покопавшись, мы попросили пользователя отправить файл HAR со всей информацией о сети, когда они используют наш API. В нем мы обнаружили, что запрос мы делаем:
gapi.client.request({
root: 'https://classroom.googleapis.com',
path: 'v1/courses',
params: {
'pageSize': 1,
'teacherId': 'me'
}
})
возвращает ответ с набором свойств nextPageToken, но без набора свойств курсов.
Ниже приведена фактическая запись из файла HAR (без заголовка авторизации):
{
"startedDateTime": "2016-03-25T21:08:16.672Z",
"time": 957.9219999995985,
"request": {
"method": "GET",
"url": "https://content-classroom.googleapis.com/v1/courses?pageSize=1&teacherId=me",
"httpVersion": "unknown",
"headers": [
{
"name": "X-Goog-Encode-Response-If-Executable",
"value": "base64"
},
{
"name": "X-Origin",
"value": "https://www.lucidpress.com"
},
{
"name": "X-ClientDetails",
"value": "appVersion=5.0%20(X11%3B%20CrOS%20x86_64%207834.61.0)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F49.0.2623.95%20Safari%2F537.36&platform=Linux%20x86_64&userAgent=Mozilla%2F5.0%20(X11%3B%20CrOS%20x86_64%207834.61.0)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F49.0.2623.95%20Safari%2F537.36"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (X11; CrOS x86_64 7834.61.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.95 Safari/537.36"
},
{
"name": "Referer",
"value": "https://content-classroom.googleapis.com/static/proxy.html?sensitive_query_string?"
},
{
"name": "X-JavaScript-User-Agent",
"value": "google-api-javascript-client/1.1.0-beta"
},
{
"name": "X-Referer",
"value": "https://www.lucidpress.com"
}
],
"queryString": [
{
"name": "pageSize",
"value": "1"
},
{
"name": "teacherId",
"value": "me"
}
],
"cookies": [],
"headersSize": -1,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "",
"httpVersion": "unknown",
"headers": [
{
"name": "date",
"value": "Fri, 25 Mar 2016 21:08:18 GMT"
},
{
"name": "content-encoding",
"value": "gzip"
},
{
"name": "x-content-type-options",
"value": "nosniff"
},
{
"name": "server",
"value": "ESF"
},
{
"name": "x-frame-options",
"value": "SAMEORIGIN"
},
{
"name": "vary",
"value": "Origin"
},
{
"name": "vary",
"value": "X-Origin"
},
{
"name": "vary",
"value": "Referer"
},
{
"name": "content-type",
"value": "application/json; charset=UTF-8"
},
{
"name": "status",
"value": "200"
},
{
"name": "alternate-protocol",
"value": "443:quic,p=1"
},
{
"name": "cache-control",
"value": "private"
},
{
"name": "alt-svc",
"value": "quic=\":443\"; ma=2592000; v=\"31,30,29,28,27,26,25\""
},
{
"name": "content-length",
"value": "198"
},
{
"name": "x-xss-protection",
"value": "1; mode=block"
}
],
"cookies": [],
"content": {
"size": 206,
"mimeType": "application/json",
"text": "{\n \"nextPageToken\": \"some_string_token_sensitive?"\n}\n"
},
"redirectURL": "",
"headersSize": -1,
"bodySize": -1,
"_transferSize": 448
},
"cache": {},
"timings": {
"blocked": 2.4730000004638,
"dns": -1,
"connect": -1,
"send": 0.8660000003146702,
"wait": 953.5609999984446,
"receive": 1.0220000003754421,
"ssl": -1
}
},
Я попросил пользователя заполнить запрос через "Попробуйте!" область в описании API без pageSize установлена в 1 и возвращает правильный формат. Нам также не удалось воспроизвести с помощью наших тестовых аккаунтов, и мы не слышали никаких других сообщений о подобных проблемах.
Кто-нибудь еще сталкивался с этим или есть какие-либо идеи о том, что может происходить?
1 ответ
В ответе JSON ничего не отформатировано. pageSize
устанавливает максимальное количество результатов, которое должен возвращать API, а не минимальное. Ваш код должен обрабатывать случай, когда nextPageToken
установлен, но courses
не путем получения следующей страницы, пока не вернется курс.
Из любопытства, почему вы выбираете только один курс?