响应 API 调用,使用 QuickBase 的新 RESTful 渲染数据 API

React API call, render data with QuickBase's new RESTful API

我想弄清楚我在这里做错了什么...我已经有一段时间没有编码了,并试图跳回使用 QuickBase 的外部应用程序 RESTful API。我只是想从 QuickBase 获取数据以在外部应用程序中使用以创建 charts/graphs.

我无法使用 GET,因为它只提供字段名称而没有数据,如果我使用 POST,那么我也会得到这些字段的值。我能够获取控制台中呈现的所有数据,但很难让呈现的每个字段在应用程序中使用。

let headers = {
  'QB-Realm-Hostname': 'XXXXXXXXXXXXX.quickbase.com',
  'User-Agent': 'FileService_Integration_V2.1',
  'Authorization': 'QB-USER-TOKEN XXXXXX_XXXXX_XXXXXXXXXXXXXXXX',
  'Content-Type': 'application/json'
}
let body = {"from":"bpz99ram7","select":[3,6,80,81,82,83,86,84,88,89,90,91,92,93,94,95,96,97,98,99,101,103,104,105,106,107,109,111,113,115,120,123,224,225,226,227,228,229,230,231,477,479,480,481],"sortBy":[{"fieldId":6,"order":"ASC"}],"groupBy":[{"fieldId":40,"grouping":"equal-values"}],"options":{"skip":0,"top":0,"compareWithAppLocalTime":false}}

fetch('https://api.quickbase.com/v1/records/query',
  {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(body)
  })
  
.then(res => {
  if (res.ok) {
    return res.json().then(res => console.log(res));
  }

return res.json().then(resBody => Promise.reject({status: res.status, ...resBody}));
})

.catch(err => console.log(err))

希望得到一些帮助,以便在 React 中使用呈现的数据,以及来自在他们的领域中使用过 QuickBase 的新 API 调用的任何人的任何提示!如果这很简单,我深表歉意 question/issue,我已经有几年没有使用 React 了……我感觉到了!

谢谢!

在 Quickbase 方面,没有 'SELECT *' 的等价物,因此要获取 table 的所有字段的数据,而您不知道架构(或它更改经常)您可以 运行 在字段端点上进行 GET:https://developer.quickbase.com/operation/getFields 然后使用响应中的字段 ID 对 /records/query

进行 POST 调用

Quickbase 对此调用的成功响应有一个 属性 data,它是返回记录的数组。此数组的每个元素都是一个对象,其中返回的每个字段的 FID 是嵌套对象(或某些字段类型的对象)的键以及字段的值。这是一个非常人为的例子:

{
  "data": [
    {
      "1": {
        "value": "2020-10-24T23:22:39Z"
      },
      "2": {
        "value": "2020-10-24T23:22:39Z"
      },
      "3": {
        "value": 2643415
      }
    }
  ],
  "fields": [
    {
      "id": 1,
      "label": "Date Created",
      "type": "timestamp"
    },
    {
      "id": 2,
      "label": "Date Modified",
      "type": "timestamp"
    },
    {
      "id": 3,
      "label": "Record ID#",
      "type": "recordid"
    }
  ]
}

如果您将响应的 data 数组直接放入 const [quickbaseData, setQuickbaseData] = useState(res.data); 状态,则在访问该数据时需要牢记响应的结构。如果我想从响应中的第一条记录中获取 FID 3 的值,我需要使用 quickbaseData[0]["3"].value。对于大多数字段类型,value 将是一个字符串或整数,但对于某些字段类型,它将是一个对象。您可以在 Field type details.

中查看每种字段类型返回值的方式

根据您的需要,您可以考虑将 Quickbase 响应处理成一个新的、更简单的 array/object 以在您的应用程序中使用。如果返回的值需要额外处理(例如转换为 Date() 对象),这将特别有用。这也将使您的应用程序 API 不可知,因为除了最初处理来自 Quickbase 的响应之外,您的应用程序的其余部分不必了解 Quickbase returns 如何查询数据。