【问题标题】:courses.list google classroom API returns JSON that doesn't match the API descriptioncourse.list 谷歌课堂 API 返回与 API 描述不匹配的 JSON
【发布时间】:2016-07-13 18:07:01
【问题描述】:

我们收到了来自用户的报告,称我们的 Google 课堂集成有问题。在摸索了一下之后,我们让用户发送他们的 HAR 文件,其中包含他们使用我们的 API 时的所有网络信息。在其中我们发现我们提出的请求:

 gapi.client.request({
   root: 'https://classroom.googleapis.com',
   path: 'v1/courses',
   params: {
     'pageSize': 1,
     'teacherId': 'me'
   }
 })

返回带有 nextPageToken 属性集但没有课程属性集的响应。

以下是 HAR 文件中的实际条目(减去 Authorization 标头):

{
    "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 description 中没有 pageSize 设置为 1 的区域,它会返回正确的格式。我们也无法使用我们的测试帐户进行复制,并且我们没有听到任何其他类似问题的报告。

有其他人遇到过这种情况或对可能发生的事情有任何想法吗?

【问题讨论】:

标签: google-api-js-client google-classroom


【解决方案1】:

没有任何关于 JSON 响应的格式不正确。 pageSize 设置 API 应返回的最大结果数,而不是最小值。您的代码应该处理设置了nextPageTokencourses 不是通过检索下一页直到它返回课程的情况。

出于好奇,为什么您一开始只检索一个课程?

【讨论】:

  • API 表示响应将以数组形式包含课程。听起来你说的是 API 是错误的,还是我只是读错了?我想知道,所以我不会在其他 API 上犯同样的错误。
  • 我们只要求一门课程,因为我们想知道该人是否是任何课程的老师。
  • 抱歉,刚刚发现这个标题非常具有误导性。我要改变它。我并不是说它不是有效的 JSON,而是它与 API 描述不匹配。
  • 顺便说一句,现在我有点清醒了。感谢您花时间查看我的问题。
猜你喜欢
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2017-10-25
  • 1970-01-01
相关资源
最近更新 更多